Re: Making SMPP esm_class configurable?
Alan McNatty <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Organization | Catalyst IT Limited |
| Message-ID | <1312765363.3499.28.camel@eos> |
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" <[email protected]> > > To: "Alan McNatty" <[email protected]> > > Cc: "Nikos Balkanas" <[email protected]>; <[email protected]> > > 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" <[email protected]> > > >>> To: <[email protected]> > > >>> 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 > > >>>> > > >>>> > > >>>> > > >>>> > > >>> > > >> > > >> > > >> > > > > > > > > > > > > > >
esm_class.patch
(text/x-patch, 3.8 KB)
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"));