Maybe you could just attach whole patch as a .diff? Would be handy for developers :)
Thanks 2013/7/8 Porter, Kelvin <[email protected]> > Hi, > > Included below is the diff with the documentation update. > > Please let me know if you have any questions or comments. > > Regards, > > Kelvin R. Porter > > Index: doc/userguide.xml > =================================================================== > --- doc/userguide.xml (revision 72) > +++ doc/userguide.xml (working copy) > @@ -954,6 +954,18 @@ > originating from the smsbox A, B or C will > be assigned a smsc id "mysmsc". > </para> > > + <para>Yet another example: > + > + <programlisting> > +group = smsc-route > +smsc-id = mysmsc > +receiver-shortcode = "+18887778888;+18887779999;+18886665555" > + </programlisting> > + > + Which means all outbound messages with > receiver number +18887778888, +18887779999, +18886665555 > + will be assigned a smsc id "mysmsc". > + </para> > + > <para> > If none of the rules have been defined or > none match the criteria, the > default smsc route defined in > route-to-smsc configuration variable > @@ -1024,6 +1036,21 @@ > smsboxes are matched against the shortcode list. > </entry> > </row> > + <row> > + <entry> > + <literal>receiver-shortcode (o)</literal> > + </entry> > + <entry> > + <literal>number-list</literal> > + </entry> > + <entry valign="bottom"> > + If set, specifies which receiver numbers for outbound > + messages should be routed to this smsc. List contains > + numbers separated by semicolon (";"). > + This option takes higher precedence than smsbox-id and > + shortcode; it supercedes these options. > + </entry> > + </row> > </tbody> > </tgroup> > </table> > Index: gw/opensmppbox-cfg.def > =================================================================== > --- gw/opensmppbox-cfg.def (revision 72) > +++ gw/opensmppbox-cfg.def (working copy) > @@ -86,4 +86,5 @@ > OCTSTR(smsc-id) > OCTSTR(smsbox-id) > OCTSTR(shortcode) > + OCTSTR(receiver-shortcode) > ) > Index: gw/opensmppbox.c > =================================================================== > --- gw/opensmppbox.c (revision 72) > +++ gw/opensmppbox.c (working copy) > @@ -116,6 +116,7 @@ > static long smpp_dest_addr_ton = -1; > static long smpp_dest_addr_npi = -1; > > +static Dict *smsc_by_receiver = NULL; > static Dict *smsc_by_smsbox_id = NULL; > static Dict *smsc_by_sender = NULL; > static Dict *smsc_by_sender_smsbox_id = NULL; > @@ -1784,10 +1785,17 @@ > if (msg->sms.smsc_id != NULL) > return msg->sms.smsc_id; > > - os = octstr_format("%s:%s", octstr_get_cstr(msg->sms.sender), > - octstr_get_cstr(box->boxc_id)); > + char *receiver = octstr_get_cstr(msg->sms.receiver); > + if ( (receiver) && (strlen(receiver) > 0) ) { > + smsc_id = dict_get(smsc_by_receiver, msg->sms.receiver); > + os = octstr_format("receiver:%s", receiver); > + }; > > - smsc_id = dict_get(smsc_by_sender_smsbox_id, os); > + if (!smsc_id) { > + os = octstr_format("%s:%s", > octstr_get_cstr(msg->sms.sender), > + octstr_get_cstr(box->boxc_id)); > + smsc_id = dict_get(smsc_by_sender_smsbox_id, os); > + }; > if (!smsc_id) > smsc_id = dict_get(smsc_by_sender, msg->sms.sender); > if (!smsc_id) > @@ -2251,14 +2259,15 @@ > { > CfgGroup *grp; > List *list, *items; > - Octstr *smsc_id, *boxc_ids, *shortcodes; > + Octstr *smsc_id, *boxc_ids, *shortcodes, *receiver_shortcodes; > int i, j; > > + smsc_by_receiver = dict_create(1000, (void(*)(void *)) > octstr_destroy); > smsc_by_smsbox_id = dict_create(30, (void(*)(void *)) octstr_destroy); > smsc_by_sender = dict_create(50, (void(*)(void *)) octstr_destroy); > smsc_by_sender_smsbox_id = dict_create(50, (void(*)(void *)) > octstr_destroy); > > - smsc_id = boxc_ids = shortcodes = NULL; > + smsc_id = boxc_ids = shortcodes = receiver_shortcodes = NULL; > list = items = NULL; > > list = cfg_get_multi_group(cfg, octstr_imm("smsc-route")); > @@ -2281,7 +2290,26 @@ > */ > boxc_ids = cfg_get(grp, octstr_imm("smsbox-id")); > shortcodes = cfg_get(grp, octstr_imm("shortcode")); > + receiver_shortcodes = cfg_get(grp, > octstr_imm("receiver-shortcode")); > > + /* Consider the receiver options: receiver-shortcode. */ > + { > + /* receiver-shortcode applies to all MTs from all smscs */ > + items = octstr_split(receiver_shortcodes, octstr_imm(";")); > + for (i = 0; i < gwlist_len(items); i++) { > + Octstr *item = gwlist_get(items, i); > + octstr_strip_blanks(item); > + > + debug("opensmppbox",0,"Adding smsc routing to id <%s> for > receiver no <%s>", > + octstr_get_cstr(smsc_id), octstr_get_cstr(item)); > + > + if (!dict_put_once(smsc_by_receiver, item, > octstr_duplicate(smsc_id))) > + panic(0, "Routing for receiver no <%s> already > exists!", > + octstr_get_cstr(item)); > + } > + gwlist_destroy(items, octstr_destroy_item); > + }; > + > /* consider now the 3 possibilities: */ > if (boxc_ids && !shortcodes) { > /* smsbox-id only, so all MT traffic */ > @@ -2311,7 +2339,7 @@ > octstr_get_cstr(smsc_id), octstr_get_cstr(item)); > > if (!dict_put_once(smsc_by_sender, item, > octstr_duplicate(smsc_id))) > - panic(0, "Routing for receiver no <%s> already > exists!", > + panic(0, "Routing for sender no <%s> already exists!", > octstr_get_cstr(item)); > } > gwlist_destroy(items, octstr_destroy_item); > @@ -2354,6 +2382,9 @@ > > static void destroy_smsc_routes(void) > { > + dict_destroy(smsc_by_receiver); > + smsc_by_receiver = NULL; > + > dict_destroy(smsc_by_smsbox_id); > smsc_by_smsbox_id = NULL; > > > -----Original Message----- > From: Porter, Kelvin > Sent: Wednesday, July 03, 2013 9:05 AM > To: [email protected] > Cc: [email protected]; Porter, Kelvin > Subject: Re: Add receiver based smsc-route to opensmppbox > > Hi, > > I will add the documentation next week. I am on vacation the remainder of > this week. > > Regards, > > Kelvin R. Porter > > Sent from my iPhone > > On Jul 3, 2013, at 5:44 AM, "[email protected]" < > [email protected]> wrote: > > > Hi Kevin, > > > > Yes there is interest for this patch please provide the documentation > > to enable it to be submitted. > > We hope the Kannel maintainers will include this useful patch. > > > > thanks > > > > ---------------------------------------------------------------------- > > > > Date: Tue, 2 Jul 2013 13:27:44 -0500 > > From: "Porter, Kelvin" <[email protected]> > > To: "[email protected]" <[email protected]> > > Subject: Add receiver based smsc-route to opensmppbox > > Message-ID: > > > > <73e6bc00a0e3dc4fb8b924269261d52d2e042b8...@mail1.hypercube-llc.com> > > Content-Type: text/plain; charset="us-ascii" > > > > Hi, > > > > I am faced with a need to do receiver-based routing to different SMSC > > connections within a opensmppbox and bearerbox configuration. I have > > a large number of numbers that need to be routed and they do not share > > a common prefix. I have not seen a way to do this using existing > > functionality. > > > > I have developed the following enhancement to opensmppbox. I have > > added "receiver-shortcode" to the group "smsc-route". > "receiver-shortcode" > > enables the user to specify that a message should be assigned to a > > smsc-id based upon the _receiver_ of a message; not the _sender_. The > > receiver-based routing takes higher precedence than the sender > "shortcode" > > or "smsbox-id" or combination. I did not implement a combination > > logic; although I could consider it, if it was desired.... > > > > I have included the patch below. If there is interest in > > incorporating it, then I can develop a patch for the documentation, as > well. > > > > Please share any feedback. > > > > Thank you. > > > > Regards, > > > > Kelvin R. Porter > > > > Index: gw/opensmppbox-cfg.def > > =================================================================== > > --- gw/opensmppbox-cfg.def (revision 72) > > +++ gw/opensmppbox-cfg.def (working copy) > > @@ -86,4 +86,5 @@ > > OCTSTR(smsc-id) > > OCTSTR(smsbox-id) > > OCTSTR(shortcode) > > + OCTSTR(receiver-shortcode) > > ) > > Index: gw/opensmppbox.c > > =================================================================== > > --- gw/opensmppbox.c (revision 72) > > +++ gw/opensmppbox.c (working copy) > > @@ -116,6 +116,7 @@ > > static long smpp_dest_addr_ton = -1; > > static long smpp_dest_addr_npi = -1; > > +static Dict *smsc_by_receiver = NULL; > > static Dict *smsc_by_smsbox_id = NULL; static Dict *smsc_by_sender = > > NULL; static Dict *smsc_by_sender_smsbox_id = NULL; @@ -1784,10 > > +1785,17 @@ > > if (msg->sms.smsc_id != NULL) > > return msg->sms.smsc_id; > > - os = octstr_format("%s:%s", > octstr_get_cstr(msg->sms.sender), > > - octstr_get_cstr(box->boxc_id)); > > + char *receiver = octstr_get_cstr(msg->sms.receiver); > > + if ( (receiver) && (strlen(receiver) > 0) ) { > > + smsc_id = dict_get(smsc_by_receiver, msg->sms.receiver); > > + os = octstr_format("receiver:%s", receiver); > > + }; > > - smsc_id = dict_get(smsc_by_sender_smsbox_id, os); > > + if (!smsc_id) { > > + os = octstr_format("%s:%s", > > octstr_get_cstr(msg->sms.sender), > > + octstr_get_cstr(box->boxc_id)); > > + smsc_id = dict_get(smsc_by_sender_smsbox_id, os); > > + }; > > if (!smsc_id) > > smsc_id = dict_get(smsc_by_sender, > > msg->sms.sender); > > if (!smsc_id) > > @@ -2251,14 +2259,15 @@ > > { > > CfgGroup *grp; > > List *list, *items; > > - Octstr *smsc_id, *boxc_ids, *shortcodes; > > + Octstr *smsc_id, *boxc_ids, *shortcodes, *receiver_shortcodes; > > int i, j; > > + smsc_by_receiver = dict_create(1000, (void(*)(void *)) > > + octstr_destroy); > > smsc_by_smsbox_id = dict_create(30, (void(*)(void *)) > octstr_destroy); > > smsc_by_sender = dict_create(50, (void(*)(void *)) octstr_destroy); > > smsc_by_sender_smsbox_id = dict_create(50, (void(*)(void *)) > > octstr_destroy); > > - smsc_id = boxc_ids = shortcodes = NULL; > > + smsc_id = boxc_ids = shortcodes = receiver_shortcodes = NULL; > > list = items = NULL; > > list = cfg_get_multi_group(cfg, octstr_imm("smsc-route")); @@ > > -2281,7 > > +2290,26 @@ > > */ > > boxc_ids = cfg_get(grp, octstr_imm("smsbox-id")); > > shortcodes = cfg_get(grp, octstr_imm("shortcode")); > > + receiver_shortcodes = cfg_get(grp, > > octstr_imm("receiver-shortcode")); > > + /* Consider the receiver options: receiver-shortcode. */ > > + { > > + /* receiver-shortcode applies to all MTs from all smscs */ > > + items = octstr_split(receiver_shortcodes, octstr_imm(";")); > > + for (i = 0; i < gwlist_len(items); i++) { > > + Octstr *item = gwlist_get(items, i); > > + octstr_strip_blanks(item); > > + > > + debug("opensmppbox",0,"Adding smsc routing to id <%s> > > + for > > receiver no <%s>", > > + octstr_get_cstr(smsc_id), > > + octstr_get_cstr(item)); > > + > > + if (!dict_put_once(smsc_by_receiver, item, > > octstr_duplicate(smsc_id))) > > + panic(0, "Routing for receiver no <%s> already > > exists!", > > + octstr_get_cstr(item)); > > + } > > + gwlist_destroy(items, octstr_destroy_item); > > + }; > > + > > /* consider now the 3 possibilities: */ > > if (boxc_ids && !shortcodes) { > > /* smsbox-id only, so all MT traffic */ @@ -2311,7 +2339,7 @@ > > octstr_get_cstr(smsc_id), octstr_get_cstr(item)); > > if (!dict_put_once(smsc_by_sender, item, > > octstr_duplicate(smsc_id))) > > - panic(0, "Routing for receiver no <%s> already > > exists!", > > + panic(0, "Routing for sender no <%s> already > > + exists!", > > octstr_get_cstr(item)); > > } > > gwlist_destroy(items, octstr_destroy_item); @@ -2354,6 > > +2382,9 @@ static void destroy_smsc_routes(void) { > > + dict_destroy(smsc_by_receiver); > > + smsc_by_receiver = NULL; > > + > > dict_destroy(smsc_by_smsbox_id); > > smsc_by_smsbox_id = NULL; > > > > > >
