[PATCH] SMPP

Nisan Bloch <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Hi

A patch to help resolve the fact that different SMSCs use different 
standards for the number base  of the msg_id in the submit_sm_resp and 
deliver_sm.. they use hex or decimal or a mixture...

Here is a patch lets you set them independently.

The config file works like this.
smpp-msg-id-type;	

bit 1 submit_sm_resp
bit 2 deliver_sm
if he bit is set the value is hex

0x00 deliver_sm decimal, submit_sm_resp decimal
0x01 (default) deliver_sm decimal, submit_sm_resp hex
0x02 deliver_sm hex, submit_sm_resp decimal
0x03 deliver_sm hex, submit_sm_resp hex *

nisan


--- cvs/gateway/gw/smsc/smsc_smpp.c     Mon Aug 19 20:57:59 2002
+++ ./smsc_smpp.c       Mon Aug 19 20:54:30 2002
@@ -97,6 +97,16 @@
      int version;
      int priority;       /* set default priority for messages */
      time_t throttling_err_time;
+    int smpp_msg_id_type; /* msg id in hex or decimal..
+                          * bit 1 submit_sm_resp bit 2 deliver_sm &
+                          * bit set value is hex
+                          * 0x00 deliver_sm decimal, submit_sm_resp decimal
+                          * 0x01 (default) deliver_sm decimal, 
submit_sm_resp hex
+                          * 0x02 deliver_sm hex, submit_sm_resp decimal
+                          * 0x03 deliver_sm hex, submit_sm_resp hex *
+                          */
+
+
      SMSCConn *conn;
  } SMPP;

@@ -109,7 +119,8 @@
                           int dest_addr_ton, int dest_addr_npi,
                           int alt_dcs, int enquire_link_interval,
                           int max_pending_submits, int reconnect_delay,
-                         int version, int priority, Octstr *my_number)
+                         int version, int priority, Octstr *my_number,
+                                                int smpp_msg_id_type)
  {
      SMPP *smpp;

@@ -143,6 +154,7 @@
      smpp->priority = priority;
      smpp->conn = conn;
      smpp->throttling_err_time = 0;
+       smpp->smpp_msg_id_type = smpp_msg_id_type;

      return smpp;
  }
@@ -657,7 +669,12 @@

                  if (msgid != NULL) {
                      Octstr *tmp;
+                    if ((smpp->smpp_msg_id_type & 0x02))
+                        tmp = octstr_format("%ld", 
strtol(octstr_get_cstr(msgid), NULL, 16));
+                    else
                      tmp = octstr_format("%ld", 
strtol(octstr_get_cstr(msgid), NULL, 10));
+
+
                      dlrmsg = dlr_find(octstr_get_cstr(smpp->conn->id),
                                        octstr_get_cstr(tmp), /* smsc 
message id */
                                        octstr_get_cstr(pdu->u.deliver_sm.destination_addr), 
/* destination */
@@ -773,9 +790,14 @@
              } else {
                  Octstr *tmp;

-                /* deliver gives mesg id in decimal, submit_sm in hex.. */
+                if ((smpp->smpp_msg_id_type & 0x01))
                  tmp = octstr_format("%ld", strtol(
                          octstr_get_cstr(pdu->u.submit_sm_resp.message_id), 
NULL, 16));
+                else
+                    tmp = octstr_format("%ld", strtol(
+                        octstr_get_cstr(pdu->u.submit_sm_resp.message_id), 
NULL, 10));
+
+
                  /* SMSC ACK.. now we have the message id. */

                  if (msg->sms.dlr_mask & 
(DLR_SMSC_SUCCESS|DLR_SUCCESS|DLR_FAIL|DLR_BUFFERED))
@@ -1089,6 +1111,7 @@
      long reconnect_delay;
      long version;
      long priority;
+       long smpp_msg_id_type;


      my_number = NULL;
@@ -1180,13 +1203,16 @@
      if (cfg_get_integer(&priority, grp, octstr_imm("priority")) == -1)
          priority = SMPP_DEFAULT_PRIORITY;

+    if (cfg_get_integer(&smpp_msg_id_type, grp, 
octstr_imm("smpp-msg-id-type")) == -1)
+        smpp_msg_id_type = 0x01; /* default(0x01) deliver_sm decimal,
+ 
submit_sm_resp hex */

      smpp = smpp_create(conn, host, port, receive_port, system_type,
                        username, password, address_range, our_host,
                         source_addr_ton, source_addr_npi, dest_addr_ton,
                         dest_addr_npi, alt_dcs, enquire_link_interval,
                         max_pending_submits, reconnect_delay,
-                       version, priority, my_number);
+                       version, priority, my_number, smpp_msg_id_type);

      conn->data = smpp;
      conn->name = octstr_format("SMPP:%S:%d/%d:%S:%S",
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.