На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> SMPP , компоненты
    Не подскажете ли существуют ли компоненты для работы с SMPP протоколом для Delphi 2005.
    Если да, то какие? Если нет, то как можно реализовать работу с SMPP посредством Delphi 2005.
      Похоже что нет!
      А вот на PHP есть!
      ExpandedWrap disabled
        <?
         
        /*
         
        File: smppclass.php
        Implements: SMPPCLass()
        License: GNU Lesser Genercal Public License: http://www.gnu.org/licenses/lgpl.html
        Commercial advertisement: Contact info@chimit.nl for SMS connectivity and more elaborate SMPP libraries in PHP and other languages.
         
        */
         
        /*
         
        The following are the SMPP PDU types that we are using in this class.
        Apart from the following 3 PDU types, there are a lot of SMPP directives
        that are not implemented in this version.
         
        */
         
        define("CM_BIND_TRANSMITTER", 0x00000009);
        //define("CM_BIND_TRANSMITTER", 0x00000002);
        define("CM_SUBMIT_SM", 0x00000004);
        define("CM_DELIVER_SM", 0x00000005);
        define("CM_UNBIND", 0x00000006);
         
        class SMPPClass {
        // public members:
            /*
            Constructor.
            Parameters:
                none.
            Example:
                $smpp = new SMPPClass();
            */
            var $msg_id;
         
            function SMPPClass()
            {
                $this->_socket = NULL;
                $this->_command_status = 0;
                $this->_sequence_number = 1;
                $this->_source_address = "";
                $this->msg_id="";
            }
         
            /*
            For SMS gateways that support sender-ID branding, the method
            can be used to set the originating address.
            Parameters:
                $from   :   Originating address
            Example:
                $smpp->SetSender("31495595392");
            */
            function SetSender($from)
            {
                if (strlen($from) > 20) {
                    // todo
                    echo "Error: sender id too long.<br>\n";
                    return;
                }
                $this->_source_address = $from;
            }
         
            /*
            This method initiates an SMPP session.
            It is to be called BEFORE using the Send() method.
            Parameters:
                $host       : SMPP ip to connect to.
                $port       : port # to connect to.
                $username   : SMPP system ID
                $password   : SMPP passord.
                $system_type    : SMPP System type
            Example:
                $smpp->Start("smpp.chimit.nl", 2345, "chimit", "my_password", "client01");
            */
            function Start($host, $port, $username, $password, $system_type)
            {
                $this->_socket = fsockopen($host, $port, $errno, $errstr, 1.2);
                // todo: sanity check on input parameters
                if (!$this->_socket) {
                    echo "Error opening SMPP session.<br>\n";
                    echo "Error was: $errstr.<br>\n";
                    return;
                }
                //socket_set_timeout($this->_socket, 1200);
                $status = $this->SendBindTransmitter($username, $password, $system_type);
                if ($status != 0) {
                    echo "Error binding to SMPP server. Invalid credentials?<br>\n";
                }
            }
         
            /*
            This method sends out one SMS message.
            Parameters:
                $to : destination address.
                $text   : text of message to send.
            Example:
                $smpp->Send("31495595392", "This is an SMPP Test message.");
            */
            function Send($to, $text)
            {
                if (strlen($to) > 20) {
                    echo "to-address too long.<br>\n";
                    return;
                }
                if (strlen($text) > 160) {
                    echo "Message too long.<br>\n";
                    return;
                }
                if (!$this->_socket) {
                    // not connected
                    return;
                }
                $service_type = "";
                $source_addr_ton = 0;//default  0
                $source_addr_npi = 3;//0
                $source_addr = $this->_source_address;
                $dest_addr_ton = 1;
                $dest_addr_npi = 1;
                $destination_addr = $to;
                $esm_class = 0;
                $protocol_id = 0;
                $priority_flag = 0;
                $schedule_delivery_time = "";
                $validity_period = "";
                $registered_delivery_flag = 1;
                $replace_if_present_flag = 0;
                $data_coding = 8;
                $sm_default_msg_id = 0;
                $sm_length = strlen($text);
                $short_message = $text;
                $status = $this->SendSubmitSM($service_type, $source_addr_ton, $source_addr_npi, $source_addr, $dest_addr_ton, $dest_addr_npi, $destination_addr, $esm_class, $protocol_id, $priority_flag, $schedule_delivery_time, $validity_period, $registered_delivery_flag, $replace_if_present_flag, $data_coding, $sm_default_msg_id, $sm_length, $short_message);
                if ($status != 0) {
                    echo "SMPP server returned error $status.<br>\n";
                }
            }
         
            /*
            This method ends a SMPP session.
            Parameters:
                none
            Example: $smpp->End();
            */
            function End()
            {
                if (!$this->_socket) {
                    // not connected
                    return;
                }
                $status = $this->SendUnbind();
                if ($status != 0) {
                    echo "SMPP Server returned error $status.<br>\n";
                }
                fclose($this->_socket);
                $this->_socket = NULL;
            }
         
        // private members (not documented):
         
            function ExpectPDU($our_sequence_number)
            {
                do {
                    $elength = fread($this->_socket, 4);
                    extract(unpack("Nlength", $elength));
                    $stream = fread($this->_socket, $length - 4);
                    echo "Read PDU        : $length bytes.<br>\n";
                    echo "Stream len      : " . strlen($stream) . "<br>\n";
                    extract(unpack("Ncommand_id/Ncommand_status/Nsequence_number", $stream));
                    $command_id &= 0x0fffffff;
                    echo "Command id      : $command_id.<br>\n";
                    echo "Command status  : $command_status.<br>\n";
                    echo "sequence_number : $sequence_number.<br>\n";
                    switch ($command_id) {
                    case CM_BIND_TRANSMITTER:
                        echo "Got CM_BIND_TRANSMITTER_RESP.<br>\n";
                        break;
                    case CM_UNBIND:
                        echo "Got CM_UNBIND_RESP.<br>\n";
                        break;
                    case CM_SUBMIT_SM:
                        echo "Got CM_SUBMIT_SM_RESP.<br>\n";
                        $stream=substr($stream,12,strlen($stream)-12);
                        echo "MSG ID          : $stream.<br>\n";
                        break;
                    case CM_DELIVER_SM:
                        echo "Got CM_DELIVER_SM_RESP<br>\n";
                        $stream=substr($stream,12,strlen($stream)-12);
                        echo "MSG ID          : $stream.<br>\n";
                        break;
                    default:
                        echo "Got unknown SMPP pdu.<br>\n";
                        break;
                    }
                } while ($sequence_number != $our_sequence_number);
                return $command_status;
            }
            
            function SendPDU($command_id, $pdu)
            {
                $length = strlen($pdu) + 16;
                $header = pack("NNNN", $length, $command_id, $this->_command_status, $this->_sequence_number);
                echo "Sending PDU, len == $length<br>\n";
                echo "Sending PDU, header-len == " . strlen($header) .  "<br>\n";
                echo "Sending PDU, command_id == " . $command_id  .  "<br>\n";
                fwrite($this->_socket, $header . $pdu, $length);
                $status = $this->ExpectPDU($this->_sequence_number);
                $this->_sequence_number = $this->_sequence_number + 1;
                return $status;
            }
         
            function SendBindTransmitter($system_id, $smpppassword, $system_type)
            {
                $system_id_len = strlen($system_id) + 1;
                $smpppassword_len = strlen($smpppassword) + 1;
                $system_type_len = strlen($system_type) + 1;
                $pdu = pack("a{$system_id_len}a{$smpppassword_len}a{$system_type_len}CCCa1", $system_id, $smpppassword, $system_type, 3, 0, 0, "");
                $status = $this->SendPDU(CM_BIND_TRANSMITTER, $pdu);
                return $status;
            }
         
            function SendUnbind()
            {
                $pdu = "";
                $status = $this->SendPDU(CM_UNBIND, $pdu);
                return $status;
            }
         
            function SendSubmitSM($service_type, $source_addr_ton, $source_addr_npi, $source_addr, $dest_addr_ton, $dest_addr_npi, $destination_addr, $esm_class, $protocol_id, $priority_flag, $schedule_delivery_time, $validity_period, $registered_delivery_flag, $replace_if_present_flag, $data_coding, $sm_default_msg_id, $sm_length, $short_message)
            {
                $service_type_len = strlen($service_type) + 1;
                $source_addr_len = strlen($source_addr) + 1;
                $destination_addr_len = strlen($destination_addr) + 1;
                $schedule_delivery_time_len = strlen($schedule_delivery_time) + 1;
                $validity_period_len = strlen($validity_period) + 1;
                $message_len = $sm_length + 1;
                echo "PDU spec: a{$service_type_len}cca{$source_addr_len}cca{$destination_addr_len}ccca{$schedule_delivery_time_len}a{$validity_period_len}ccccca{$message_len}<br>\n";
                $pdu = pack("a{$service_type_len}cca{$source_addr_len}cca{$destination_addr_len}ccca{$schedule_delivery_time_len}a{$validity_period_len}ccccca{$message_len}", $service_type, $source_addr_ton, $source_addr_npi, $source_addr, $dest_addr_ton, $dest_addr_npi, $destination_addr, $esm_class, $protocol_id, $priority_flag, $schedule_delivery_time, $validity_period, $registered_delivery_flag, $replace_if_present_flag, $data_coding, $sm_default_msg_id, $sm_length, $short_message);
                $status = $this->SendPDU(CM_SUBMIT_SM, $pdu);
                return $status;
            }
         
            /* Возвращает статус доставки сообщения
            */
            function Deliver_SM($to,$text)
            {
                $service_type = "";
                $source_addr_ton = 0;//default  0
                $source_addr_npi = 3;//0
                $source_addr = $this->_source_address;
                $dest_addr_ton = 1;
                $dest_addr_npi = 1;
                $destination_addr = $to;
                $esm_class = 0;
                $protocol_id = 0;
                $priority_flag = 0;
                $schedule_delivery_time = "";
                $validity_period = "";
                $registered_delivery_flag = 0;
                $replace_if_present_flag = 0;
                $data_coding = 8;
                $sm_default_msg_id = 0;
                $sm_length = strlen($text);
                $short_message = $text;
         
                $service_type_len = strlen($service_type) + 1;
                $source_addr_len = strlen($source_addr) + 1;
                $destination_addr_len = strlen($destination_addr) + 1;
                $schedule_delivery_time_len = strlen($schedule_delivery_time) + 1;
                $validity_period_len = strlen($validity_period) + 1;
                $message_len = $sm_length + 1;
                echo "PDU spec: a{$service_type_len}cca{$source_addr_len}cca{$destination_addr_len}ccca{$schedule_delivery_time_len}a{$validity_period_len}ccccca{$message_len}<br>\n";
                $pdu = pack("a{$service_type_len}cca{$source_addr_len}cca{$destination_addr_len}ccca{$schedule_delivery_time_len}a{$validity_period_len}ccccca{$message_len}", $service_type, $source_addr_ton, $source_addr_npi, $source_addr, $dest_addr_ton, $dest_addr_npi, $destination_addr, $esm_class, $protocol_id, $priority_flag, $schedule_delivery_time, $validity_period, $registered_delivery_flag, $replace_if_present_flag, $data_coding, $sm_default_msg_id, $sm_length, $short_message);
                $status = $this->SendPDU(CM_DELIVER_SM, $pdu);
                return $status;
            }
         
        };
        ?>
         
         
        И пример
         
        <?
         require_once('smppclass.php');
        /*
         
        File: smppexample.php
        Implements: exmaple for smppclass.php::SMPPCLass()
        License: GNU Lesser Genercal Public License: http://www.gnu.org/licenses/lgpl.html
        Commercial advertisement: Contact info@chimit.nl for SMS connectivity and more elaborate SMPP libraries in PHP and other languages.
         
        */
         
        /*
         
        Caution: Replace the following values with your own parameters.
        Leaving the values like this is not going to work!
         
        */
         
        $smpphost = "IP";
        $smppport = port;
        $systemid = "Login";
        $password = "Pass";
        $system_type = "SMPP";
        $from = "NoTel";
         
        $smpp = new SMPPClass();
        $smpp->SetSender($from);
        $smpp->Start($smpphost, $smppport, $systemid, $password, $system_type);
        $smpp->Send($to, iconv('CP1251','ISO-8859-5',$msg));
         
        $smpp->End();
         
        ?>
        Такие компоненты стоят дорого. Просто так никто не отдаст.
          я сам писал SMPP клиент.. ну где то 2-3 недели + отладка, тестирование
              Цитата ChPuK @
              Не подскажете ли существуют ли компоненты для работы с SMPP протоколом для Delphi 2005.
              Если да, то какие? Если нет, то как можно реализовать работу с SMPP посредством Delphi 2005.

              smpp.by.ru
              Пиши на ICQ: 288885267
                MAX2002 Поделишься кодом?
                  Используйте DrufelSMPP http://drufel.ru
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0.0866 ]   [ 16 queries used ]   [ Generated: 24.10.26, 03:02 GMT ]