Please have a look at this patch adding option to configure SMPP throttling sleep time

Michael Zervakis <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Hi,

    I noticed that SMPP transmitter will sleep for 15 seconds when 
receiving a 0x58 (ESME_RTHROTTLED) response declaring that ESME has 
exceeded allowed message limits per second. This setting is hardcoded 
and I think 15 sec is a long time to wait, so I created this patch to 
allow user to configure this parameter as following:
group = smsc
smsc = smpp
.....
throttling-sleep-time = 5

Please have a look at this patch (C is not one of my core competencies).
smpp_throttle.patch (text/plain, 5.4 KB)
Index: doc/userguide/userguide.xml
===================================================================
RCS file: /home/cvs/gateway/doc/userguide/userguide.xml,v
retrieving revision 1.344
diff -u -r1.344 userguide.xml
--- doc/userguide/userguide.xml	14 Jan 2009 11:11:46 -0000	1.344
+++ doc/userguide/userguide.xml	4 Feb 2009 17:37:46 -0000
@@ -3190,6 +3190,13 @@
       active session. The default is 30 seconds.  
      </entry></row>
 
+    <row><entry><literal>throttling-sleep-time</literal></entry>
+      <entry><literal>number</literal></entry>
+      <entry valign="bottom">
+      Optional the time the transmitter will sleep after receiving
+      an 0x58 SMPP throttling error. The default is 15 seconds.  
+     </entry></row>
+
     <row><entry><literal>max-pending-submits</literal></entry>
       <entry><literal>number</literal></entry>
       <entry valign="bottom">
Index: gw/smsc/smsc_smpp.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_smpp.c,v
retrieving revision 1.112
diff -u -r1.112 smsc_smpp.c
--- gw/smsc/smsc_smpp.c	29 Jan 2009 11:38:28 -0000	1.112
+++ gw/smsc/smsc_smpp.c	4 Feb 2009 17:37:46 -0000
@@ -154,6 +154,7 @@
     int receive_port; 
     int quitting; 
     long enquire_link_interval;
+    long throttling_sleep_time;
     long max_pending_submits;
     int version;
     int priority;       /* set default priority for messages */    
@@ -213,12 +214,12 @@
     	    	    	 Octstr *address_range,
                          int source_addr_ton, int source_addr_npi,  
                          int dest_addr_ton, int dest_addr_npi, 
-                         int enquire_link_interval, int max_pending_submits, 
+                         int enquire_link_interval, int max_pending_submits,
                          int version, int priority, int validity,
                          Octstr *my_number, int smpp_msg_id_type, 
                          int autodetect_addr, Octstr *alt_charset, Octstr *alt_addr_charset,
                          Octstr *service_type, long connection_timeout,
-                         long wait_ack, int wait_ack_action) 
+                         long wait_ack, int wait_ack_action, int throttling_sleep_time) 
 { 
     SMPP *smpp; 
      
@@ -245,6 +246,7 @@
     smpp->transmit_port = transmit_port; 
     smpp->receive_port = receive_port; 
     smpp->enquire_link_interval = enquire_link_interval;
+    smpp->throttling_sleep_time = throttling_sleep_time;
     smpp->max_pending_submits = max_pending_submits; 
     smpp->quitting = 0; 
     smpp->version = version;
@@ -1771,6 +1773,7 @@
     SMPP_PDU *pdu;
     double timeout;
     time_t last_response, last_cleanup;
+    long throttling_sleep_time;
 
     io_arg = arg;
     smpp = io_arg->smpp;
@@ -1845,7 +1848,7 @@
                 send_enquire_link(smpp, conn, &last_enquire_sent);
 
                 /* Make sure we send even if we read a lot */
-                if (transmitter && difftime(time(NULL), smpp->throttling_err_time) > SMPP_THROTTLING_SLEEP_TIME) {
+                if (transmitter && difftime(time(NULL), smpp->throttling_err_time) > throttling_sleep_time) {
                     smpp->throttling_err_time = 0;
                     send_messages(smpp, conn, &pending_submits);
                 }
@@ -1873,7 +1876,7 @@
                 last_cleanup = time(NULL);
             }
                                                                     
-            if (transmitter && difftime(time(NULL), smpp->throttling_err_time) > SMPP_THROTTLING_SLEEP_TIME) {
+            if (transmitter && difftime(time(NULL), smpp->throttling_err_time) > throttling_sleep_time) {
                 smpp->throttling_err_time = 0;
                 send_messages(smpp, conn, &pending_submits);
             }
@@ -2015,6 +2018,7 @@
     int transceiver_mode;
     Octstr *smsc_id;
     long enquire_link_interval;
+    long throttling_sleep_time;
     long max_pending_submits;
     long version;
     long priority;
@@ -2063,6 +2067,9 @@
     if (cfg_get_integer(&max_pending_submits, grp, 
                         octstr_imm("max-pending-submits")) == -1)
         max_pending_submits = SMPP_MAX_PENDING_SUBMITS;
+    if (cfg_get_integer(&throttling_sleep_time, grp, 
+                        octstr_imm("throttling-sleep-time")) == -1)
+        throttling_sleep_time = SMPP_THROTTLING_SLEEP_TIME;
  
     /* Check that config is OK */ 
     ok = 1; 
@@ -2162,7 +2169,7 @@
                        dest_addr_npi, enquire_link_interval, 
                        max_pending_submits, version, priority, validity, my_number, 
                        smpp_msg_id_type, autodetect_addr, alt_charset, alt_addr_charset,
-                       service_type, connection_timeout, wait_ack, wait_ack_action); 
+                       service_type, connection_timeout, wait_ack, wait_ack_action, throttling_sleep_time); 
  
     cfg_get_integer(&smpp->bind_addr_ton, grp, octstr_imm("bind-addr-ton"));
     cfg_get_integer(&smpp->bind_addr_npi, grp, octstr_imm("bind-addr-npi"));
Index: gwlib/cfg.def
===================================================================
RCS file: /home/cvs/gateway/gwlib/cfg.def,v
retrieving revision 1.137
diff -u -r1.137 cfg.def
--- gwlib/cfg.def	14 Jan 2009 11:11:47 -0000	1.137
+++ gwlib/cfg.def	4 Feb 2009 17:37:46 -0000
@@ -385,6 +385,7 @@
     OCTSTR(max-sms-octets)
     OCTSTR(login-prompt)
     OCTSTR(password-prompt)
+    OCTSTR(throttling-sleep-time)
 )
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.