[PATCH] allow setting service-type for SMPP SMSC

David Holland <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Please find below a patch to allow an SMPP SMSC group to contain a
service-type definition. Previously Kannel would always send NULL, i.e.
"use default service-type". I've tested this patch and it works against
Xwireless/Mblox SMPP server. If no-one objects I'll commit it to CVS and
update the userguide.

Many thanks to Nick Clarey for writing this when I realised what the
missing functionality was.

Dave
-- 
:: David Holland :: Systems Manager :: 3G Lab :: +44 01223 478900 ::
"Standards ought to be less whimsical than, say, Microsoft APIs."
 -- Graham Nelson



Index: gw/smsc/smsc_smpp.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_smpp.c,v
retrieving revision 1.23
diff -u -r1.23 smsc_smpp.c
--- gw/smsc/smsc_smpp.c	14 Feb 2003 10:44:39 -0000	1.23
+++ gw/smsc/smsc_smpp.c	18 Feb 2003 13:34:11 -0000
@@ -89,6 +89,7 @@
     Octstr *address_range; 
     Octstr *our_host; 
     Octstr *my_number; 
+    Octstr *service_type;
     int source_addr_ton; 
     int source_addr_npi; 
     int dest_addr_ton; 
@@ -120,7 +121,7 @@
                          int max_pending_submits, int reconnect_delay,
                          int version, int priority, Octstr *my_number,
                          int smpp_msg_id_type, int autodetect_addr,
-                         Octstr *alt_charset) 
+                         Octstr *alt_charset, Octstr *service_type) 
 { 
     SMPP *smpp; 
      
@@ -144,6 +145,7 @@
     smpp->alt_dcs = alt_dcs;
     smpp->our_host = octstr_duplicate(our_host); 
     smpp->my_number = octstr_duplicate(my_number); 
+    smpp->service_type = octstr_duplicate(service_type);
     smpp->transmit_port = transmit_port; 
     smpp->receive_port = receive_port; 
     smpp->enquire_link_interval = enquire_link_interval;
@@ -173,6 +175,7 @@
         octstr_destroy(smpp->username); 
         octstr_destroy(smpp->password); 
         octstr_destroy(smpp->system_type); 
+        octstr_destroy(smpp->service_type); 
         octstr_destroy(smpp->address_range); 
         octstr_destroy(smpp->our_host); 
         octstr_destroy(smpp->my_number);
@@ -326,6 +329,9 @@
     	    	    
     pdu->u.submit_sm.source_addr = octstr_duplicate(msg->sms.sender); 
     pdu->u.submit_sm.destination_addr = octstr_duplicate(msg->sms.receiver); 
+
+    /* Set the service type of the outgoing message */
+    pdu->u.submit_sm.service_type = octstr_duplicate(smpp->service_type);
   
     /* Check for manual override of source ton and npi values */ 
     if(smpp->source_addr_ton > -1 && smpp->source_addr_npi > -1) { 
@@ -1252,6 +1258,7 @@
     long dest_addr_npi; 
     Octstr *our_host; 
     Octstr *my_number; 
+    Octstr *service_type;
     SMPP *smpp; 
     int ok; 
     int transceiver_mode; 
@@ -1284,6 +1291,7 @@
     address_range = cfg_get(grp, octstr_imm("address-range")); 
     our_host = cfg_get(grp, octstr_imm("our-host")); 
     my_number = cfg_get(grp, octstr_imm("my-number")); 
+    service_type = cfg_get(grp, octstr_imm("service-type")); 
      
     system_id = cfg_get(grp, octstr_imm("system-id")); 
     if (system_id != NULL) { 
@@ -1328,6 +1336,11 @@
 	    error(0, "SMPP: Configuration file doesn't specify system-type."); 
 	    ok = 0; 
     } 
+    if (octstr_len(service_type) > 6) {
+            error(0, "SMPP: Service type must be 6 characters or less.");
+            ok = 0;
+    }
+
     if (!ok) 
         return -1; 
  
@@ -1379,7 +1392,7 @@
                        dest_addr_npi, alt_dcs, enquire_link_interval, 
                        max_pending_submits, reconnect_delay, 
                        version, priority, my_number, smpp_msg_id_type,
-                       autodetect_addr, alt_charset); 
+                       autodetect_addr, alt_charset, service_type); 
  
     conn->data = smpp; 
     conn->name = octstr_format("SMPP:%S:%d/%d:%S:%S",  
@@ -1401,6 +1414,7 @@
     octstr_destroy(my_number); 
     octstr_destroy(smsc_id);
     octstr_destroy(alt_charset); 
+    octstr_destroy(service_type);
 
     conn->status = SMSCCONN_CONNECTING; 
        
Index: gwlib/cfg.def
===================================================================
RCS file: /home/cvs/gateway/gwlib/cfg.def,v
retrieving revision 1.81
diff -u -r1.81 cfg.def
--- gwlib/cfg.def	14 Feb 2003 10:55:37 -0000	1.81
+++ gwlib/cfg.def	18 Feb 2003 13:34:11 -0000
@@ -232,6 +232,7 @@
     OCTSTR(source-addr-npi)
     OCTSTR(dest-addr-ton)
     OCTSTR(dest-addr-npi)
+    OCTSTR(service-type)
     OCTSTR(source-addr-autodetect)
     OCTSTR(enquire-link-interval)
     OCTSTR(max-pending-submits)
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.