patch attached.

Votes / comments, etc?

On Wed, 2011-08-03 at 09:39 +1200, Alan McNatty wrote:
> Thanks Nikos/Alex for the feedback - I will work on config patch.
> 
> On Tue, 2011-08-02 at 23:10 +0300, Nikos Balkanas wrote:
> > Hi Alan,
> > 
> > Just to clarify on what Alex says. Some other modes that the SMSc may 
> > support in default mode, are:
> > 
> > Datagram: UDP based, immediate best effort high throughput transmition with 
> > no retried, validity period or storage. Similar to UDP.
> > Forward: Single transaction based, for real-time applications, i.e. parking 
> > tickets, without storage, where result is returned in response.
> > 
> > Kannel doesn't support those, only reliable store and forward. Therefore 
> > the 
> > default mode wouldn't be appropriate.
> > Configuration would be fine for those buggy SMScs, that do store and 
> > forward, but do not accept it as an option.
> > 
> > BR,
> > Nikos
> > 
> > ----- Original Message ----- 
> > From: "Alexander Malysh" <amal...@kannel.org>
> > To: "Alan McNatty" <a...@catalyst.net.nz>
> > Cc: "Nikos Balkanas" <nbalka...@gmail.com>; <de...@vm1.kannel.org>
> > Sent: Tuesday, August 02, 2011 12:29 PM
> > Subject: Re: Making SMPP esm_class configurable?
> > 
> > 
> > Hi,
> > 
> > please don't change default because we want that SMSC _store_ and _forward_ 
> > our message that
> > is what we also tell SMSC. This works in 99% cases but sometimes buggy 
> > SMSCs 
> > don't accept this
> > and rejects messages.
> > 
> > Please keep default as is and make config option for buggy SMSCs.
> > 
> > Thanks,
> > Alex
> > 
> > Am 02.08.2011 um 06:11 schrieb Alan McNatty:
> > 
> > > Sorry that should be ESM_CLASS_SUBMIT_DEFAULT_SMSC_MODE.
> > >
> > > Index: gw/smsc/smsc_smpp.c
> > > ===================================================================
> > > --- gw/smsc/smsc_smpp.c (revision 4913)
> > > +++ gw/smsc/smsc_smpp.c (working copy)
> > > @@ -876,7 +876,7 @@
> > >      * set the esm_class field
> > >      * default is store and forward, plus udh and rpi if requested
> > >      */
> > > -    pdu->u.submit_sm.esm_class =
> > > ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE;
> > > +    pdu->u.submit_sm.esm_class = ESM_CLASS_SUBMIT_DEFAULT_SMSC_MODE;
> > >     if (octstr_len(msg->sms.udhdata))
> > >         pdu->u.submit_sm.esm_class = pdu->u.submit_sm.esm_class |
> > >             ESM_CLASS_SUBMIT_UDH_INDICATOR;
> > >
> > > On Tue, 2011-08-02 at 15:59 +1200, Alan McNatty wrote:
> > >> Hi Nikos,
> > >>
> > >> You mean simply change the default:
> > >>
> > >> Index: gw/smsc/smsc_smpp.c
> > >> ===================================================================
> > >> --- gw/smsc/smsc_smpp.c (revision 4913)
> > >> +++ gw/smsc/smsc_smpp.c (working copy)
> > >> @@ -876,7 +876,7 @@
> > >>      * set the esm_class field
> > >>      * default is store and forward, plus udh and rpi if requested
> > >>      */
> > >> -    pdu->u.submit_sm.esm_class =
> > >> ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE;
> > >> +    pdu->u.submit_sm.esm_class = ESM_CLASS_DEFAULT_SMSC_MODE;
> > >>     if (octstr_len(msg->sms.udhdata))
> > >>         pdu->u.submit_sm.esm_class = pdu->u.submit_sm.esm_class |
> > >>             ESM_CLASS_SUBMIT_UDH_INDICATOR;
> > >>
> > >> Anyone think we should have a config option? Or just happy to run with
> > >> he above. I need to test myself but is this likely to be a compatibility
> > >> breaker for anyone?
> > >>
> > >> Cheers,
> > >> Alan
> > >>
> > >> On Mon, 2011-08-01 at 07:13 +0300, Nikos Balkanas wrote:
> > >>> Hi Alan,
> > >>>
> > >>> According to the spec SMPP 5.0, p 125, 
> > >>> ESM_CLASS_SUBMIT_DEFAULT_SMSC_MODE is
> > >>> the default esm class. That part should be patched in. As far as making 
> > >>> it
> > >>> configurable, I have no objections to it. A few people over the years 
> > >>> have
> > >>> had to manually patch it in.
> > >>>
> > >>> BR,
> > >>> Nikos
> > >>> ----- Original Message ----- 
> > >>> From: "Alan McNatty" <a...@catalyst.net.nz>
> > >>> To: <devel@kannel.org>
> > >>> Sent: Monday, August 01, 2011 6:21 AM
> > >>> Subject: Making SMPP esm_class configurable?
> > >>>
> > >>>
> > >>>> Hi All,
> > >>>>
> > >>>> I found a thread on this from back in Feb 2005 (having received a query
> > >>>> from provided now myself) .. last word by Alejandro and a lukewarm 
> > >>>> (+0 -
> > >>>> +1) comment from Stipe about committing if patch provided. I would
> > >>>> provide a config patch if anyone would vote in it's favour?
> > >>>>
> > >>>> Consider:
> > >>>>
> > >>>> gw/smsc/smsc_smpp.c
> > >>>> 875     /*
> > >>>> 876      * set the esm_class field
> > >>>> 877      * default is store and forward, plus udh and rpi if requested
> > >>>> 878      */
> > >>>> 879     pdu->u.submit_sm.esm_class =
> > >>>> ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE;
> > >>>>
> > >>>> But the 'default' is surely ESM_CLASS_SUBMIT_DEFAULT_SMSC_MODE, no?
> > >>>>
> > >>>> Cheers,
> > >>>> Alan
> > >>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>
> > >>
> > >>
> > >>
> > >
> > >
> > >
> > 
> 
> 
> 

Index: doc/userguide/userguide.xml
===================================================================
--- doc/userguide/userguide.xml	(revision 4916)
+++ doc/userguide/userguide.xml	(working copy)
@@ -3573,6 +3573,16 @@
      	 try to send the message to the recipient. Defined in minutes.
      </entry></row>
 
+   <row><entry><literal>esm-class</literal></entry>
+     <entry><literal>number</literal></entry>
+     <entry valign="bottom">
+       Change the "esm_class" parameter sent from Kannel to
+       a value other 'Store and Forward mode' 0x03 (for SMPP v3.4). the value 
+       entered here should be the hexadecimal representation of the esm_class
+       parameter. for example, the default (if not set) is "03" which stands
+       for 0x03, for 'Default SMSC Mode' set to "00".
+     </entry></row>
+
    </tbody></tgroup></informaltable>
 
 </sect2>
Index: gw/smsc/smsc_smpp.c
===================================================================
--- gw/smsc/smsc_smpp.c	(revision 4916)
+++ gw/smsc/smsc_smpp.c	(working copy)
@@ -169,6 +169,7 @@
     long connection_timeout;
     long wait_ack;
     int wait_ack_action;
+    int esm_class;
     Load *load;
     SMSCConn *conn;
 } SMPP;
@@ -222,7 +223,7 @@
                          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 esm_class)
 {
     SMPP *smpp;
 
@@ -269,6 +270,7 @@
     smpp->ssl_client_certkey_file = NULL;
     smpp->load = load_create_real(0);
     load_add_interval(smpp->load, 1);
+    smpp->esm_class = esm_class;
 
     return smpp;
 }
@@ -876,7 +878,7 @@
      * set the esm_class field
      * default is store and forward, plus udh and rpi if requested
      */
-    pdu->u.submit_sm.esm_class = ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE;
+    pdu->u.submit_sm.esm_class = smpp->esm_class;
     if (octstr_len(msg->sms.udhdata))
         pdu->u.submit_sm.esm_class = pdu->u.submit_sm.esm_class |
             ESM_CLASS_SUBMIT_UDH_INDICATOR;
@@ -2204,6 +2206,7 @@
     Octstr *alt_charset;
     Octstr *alt_addr_charset;
     long connection_timeout, wait_ack, wait_ack_action;
+    long esm_class;
 
     my_number = alt_addr_charset = alt_charset = NULL;
     transceiver_mode = 0;
@@ -2336,17 +2339,21 @@
 
     if (cfg_get_integer(&wait_ack_action, grp, octstr_imm("wait-ack-expire")) == -1)
         wait_ack_action = SMPP_WAITACK_REQUEUE;
-
-    if (wait_ack_action > 0x03 || wait_ack_action < 0)
+    else if (wait_ack_action > 0x03 || wait_ack_action < 0)
         panic(0, "SMPP: Invalid wait-ack-expire directive in configuration.");
 
+    if (cfg_get_integer(&esm_class, grp, octstr_imm("esm-class")) == -1)
+        esm_class = ESM_CLASS_SUBMIT_STORE_AND_FORWARD_MODE;
+    else if (esm_class > 0x03 || esm_class < 0)
+        panic(0, "SMPP: Invalid esm_class directive in configuration.");
+
     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,
                        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, esm_class);
 
     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"));

Reply via email to