Re: [Patch] To add timeouts to SMPP connections

Alan McNatty <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <1061241757.2183.5.camel@euterpe>
Hi Alexander,

I prefer Alex's patch as it conforms more closely to spec I believe.

Alex I have added a couple of bits to your patch (cfg.def and
docs/userguide.xml). Please double check this and vote.
Cheers,

Alan



On Tue, 2003-08-19 at 05:10, Alexander Malysh wrote:
> Hi Alex,
> 
> sorry for the long delay...
> 
> I have another patch here, that I would like to commit if nobody has any 
> ojections... Please try it, it works very well on our production systems 
> since 6 months or so...
> 
> On Monday 18 August 2003 17:29, Alex Judd wrote:
> > How about a quick code review and a commit of this?
> >
> > Not to say that discussing the email list isn't important but ...
> >
> > :)
> >
> > Alex
> >
> > ----- Original Message -----
> > From: "Alex Judd" <[email protected]>
> > To: "Alex Judd" <[email protected]>; "Aaron Brady"
> > <[email protected]>; <[email protected]>
> > Sent: Friday, August 15, 2003 2:54 PM
> > Subject: [Patch] To add timeouts to SMPP connections
> >
> > > I've reworked Aaron's patch to be a bit more Kannel standard and allowed
> >
> > for
> >
> > > definition of enquire-link-retry externally to the code and a standard
> >
> > value
> >
> > > of 10 per suggestions.
> > >
> > > It's working for me here but would be good for one of the team to once
> >
> > over.
> >
> > > Alex
> > > Skywire
> > >
> > > ----- Original Message -----
> > > From: "Alex Judd" <[email protected]>
> > > To: "Aaron Brady" <[email protected]>; <[email protected]>
> > > Sent: Friday, August 08, 2003 10:43 AM
> > > Subject: Re: Patch: To add timeouts to SMPP connections
> > >
> > > > Aaron
> > > >
> > > > Seeing as I picked this up in the first place, how about I rework your
> > >
> > > patch
> > >
> > > > to be a bit more flexible and submit it back for testing.
> > > >
> > > > This way we get the best of both worlds?
> > > >
> > > > Alex
> > > >
> > > > ----- Original Message -----
> > > > From: "Aaron Brady" <[email protected]>
> > > > To: <[email protected]>
> > > > Sent: Friday, August 08, 2003 10:25 AM
> > > > Subject: Re: Patch: To add timeouts to SMPP connections
> > > >
> > > > > > Looks good, however I'd potentially make it more configurable so
> >
> > that
> >
> > > > the
> > > >
> > > > > X
> > > > >
> > > > > > x wait is one of the default settings and can be configured should
> >
> > it
> >
> > > > need
> > > >
> > > > > > be.
> > > > >
> > > > > If it's easy enough, then I don't see why not, but I'm not altogether
> > > > > familiar with the internals of Kannel, so other than using your below
> > >
> > > code
> > >
> > > > > as a starting point, I wouldn't know what to do. Personally, I think
> > >
> > > that
> > >
> > > > > given enquire_link_interval is configurable that adds enough
> > >
> > > flexability -
> > >
> > > > > this is similar to how IRC servers do things, with a configurable
> > > >
> > > > ping-time,
> > > >
> > > > > but if you miss two then you're disconnected, but if people think it
> > >
> > > needs
> > >
> > > > > the extra option then I can try and add it.
> > > > >
> > > > > > For example
> > > > > >
> > > > > >
> > > > > >     if (cfg_get_integer(&enquire_link_interval, grp,
> > > > > >                      octstr_imm("enquire-link-retry")) == -1)
> > > > > >         enquire_link_interval = SMPP_ENQUIRE_LINK_RETRY;
> > > > > >
> > > > > > <other bits of code needed to map the parameter to the smpp
> >
> > structure>
> >
> > > > > >            if(date_universal_now() - smpp->last_enquire_received
> > > > > >
> > > > > >               > (smpp->enquire_link_retry *
> > > >
> > > > smpp->enquire_link_interval))
> > > >
> > > > > {
> > > > >
> > > > > > etc.
> > > > > >
> > > > > > Also - would it make sense to send an extra send_enquire_link to
> >
> > make
> >
> > > > sure
> > > >
> > > > > > that the other end is not contacting?
> > > > >
> > > > > I think that if the connection has gotten so far as to miss three
> >
> > pings,
> >
> > > > > it's not likely to recover, and manually sending another enquire_link
> > > >
> > > > would
> > > >
> > > > > complicate the code needlessly, but again, I'm sure there are people
> > >
> > > more
> > >
> > > > > knowledgable about this than me and if they think different, then I
> >
> > can
> >
> > > > try
> > > >
> > > > > and implement it.
> > > > >
> > > > > Aaron
smsc_smpp.c-diff (text/x-patch, 5.4 KB)
Index: doc/userguide/userguide.xml
===================================================================
RCS file: /home/cvs/gateway/doc/userguide/userguide.xml,v
retrieving revision 1.241
diff -u -r1.241 userguide.xml
--- doc/userguide/userguide.xml	11 Aug 2003 20:58:29 -0000	1.241
+++ doc/userguide/userguide.xml	18 Aug 2003 21:11:12 -0000
@@ -2837,6 +2837,13 @@
       active session. The default is 30 seconds.  
      </entry></row>
 
+    <row><entry><literal>enquire-link-retry</literal></entry>
+      <entry><literal>number</literal></entry>
+      <entry valign="bottom">
+      Optional the number of unanswered enquire-links that should be sent 
+      before reconnecting to the SMSC. The default is 10.
+     </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.46
diff -u -r1.46 smsc_smpp.c
--- gw/smsc/smsc_smpp.c	3 Aug 2003 22:36:35 -0000	1.46
+++ gw/smsc/smsc_smpp.c	18 Aug 2003 21:11:16 -0000
@@ -50,6 +50,7 @@
  */
 
 #define SMPP_ENQUIRE_LINK_INTERVAL  30.0
+#define SMPP_ENQUIRE_LINK_RETRY     10
 #define SMPP_MAX_PENDING_SUBMITS    10
 #define SMPP_DEFAULT_VERSION        0x34
 #define SMPP_DEFAULT_PRIORITY       0
@@ -84,6 +85,8 @@
     int receive_port; 
     int quitting; 
     long enquire_link_interval;
+    long enquire_link_retry;
+    long last_enquire_received;
     long max_pending_submits;
     int version;
     int priority;       /* set default priority for messages */    
@@ -101,7 +104,7 @@
     	    	    	 Octstr *address_range,
                          int source_addr_ton, int source_addr_npi,  
                          int dest_addr_ton, int dest_addr_npi, 
-                         int enquire_link_interval,
+			  int enquire_link_interval, int enquire_link_retry, int last_enquire_received,
                          int max_pending_submits, int version, int priority,
                          Octstr *my_number, int smpp_msg_id_type, 
                          int autodetect_addr, Octstr *alt_charset, 
@@ -132,6 +135,8 @@
     smpp->transmit_port = transmit_port; 
     smpp->receive_port = receive_port; 
     smpp->enquire_link_interval = enquire_link_interval;
+    smpp->enquire_link_retry = enquire_link_retry;
+    smpp->last_enquire_received = 0;
     smpp->max_pending_submits = max_pending_submits; 
     smpp->quitting = 0; 
     smpp->version = version;
@@ -931,6 +936,7 @@
             break;
 
         case enquire_link_resp:
+            smpp->last_enquire_received = date_universal_now();
             break;
 
         case submit_sm_resp:
@@ -1171,12 +1177,19 @@
             conn = open_receiver(smpp);
 
         last_enquire_sent = date_universal_now();
+        smpp->last_enquire_received = date_universal_now();
         pending_submits = -1;
         len = 0;
         smpp->throttling_err_time = 0;
         for (;conn != NULL;) {
             timeout = last_enquire_sent + smpp->enquire_link_interval
                         - date_universal_now();
+            if(date_universal_now() - smpp->last_enquire_received
+                            > (smpp->enquire_link_retry * smpp->enquire_link_interval)) {
+                    debug("bb.sms.smpp", 0, "SMSC Timeout");
+                    smpp->conn->status = SMSCCONN_RECONNECTING;
+                    break;
+            }
 
             /* unbind
              * TODO: read so long as unbind_resp received. Otherwise we have
@@ -1366,6 +1379,8 @@
     int transceiver_mode;
     Octstr *smsc_id;
     long enquire_link_interval;
+    long enquire_link_retry;
+    long last_enquire_received;
     long max_pending_submits;
     long version;
     long priority;
@@ -1408,6 +1423,9 @@
     if (cfg_get_integer(&enquire_link_interval, grp, 
                         octstr_imm("enquire-link-interval")) == -1)
         enquire_link_interval = SMPP_ENQUIRE_LINK_INTERVAL;
+    if (cfg_get_integer(&enquire_link_retry, grp,
+			octstr_imm("enquire-link-retry")) == -1)
+	enquire_link_retry = SMPP_ENQUIRE_LINK_RETRY;
     if (cfg_get_integer(&max_pending_submits, grp, 
                         octstr_imm("max-pending-submits")) == -1)
         max_pending_submits = SMPP_MAX_PENDING_SUBMITS;
@@ -1483,7 +1501,7 @@
     smpp = smpp_create(conn, host, port, receive_port, system_type,  
     	    	       username, password, address_range,
                        source_addr_ton, source_addr_npi, dest_addr_ton,  
-                       dest_addr_npi, enquire_link_interval, 
+                       dest_addr_npi, enquire_link_interval,  enquire_link_retry, last_enquire_received,
                        max_pending_submits, version, priority, my_number, 
                        smpp_msg_id_type, autodetect_addr, alt_charset, 
                        service_type); 
Index: gwlib/cfg.def
===================================================================
RCS file: /home/cvs/gateway/gwlib/cfg.def,v
retrieving revision 1.92
diff -u -r1.92 cfg.def
--- gwlib/cfg.def	8 Aug 2003 14:24:38 -0000	1.92
+++ gwlib/cfg.def	18 Aug 2003 21:11:16 -0000
@@ -268,6 +270,7 @@
     OCTSTR(service-type)
     OCTSTR(source-addr-autodetect)
     OCTSTR(enquire-link-interval)
+    OCTSTR(enquire-link-retry)
     OCTSTR(max-pending-submits)
     OCTSTR(reconnect-delay)
     OCTSTR(transceiver-mode)
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.