[PATCH] allow setting service-type for SMPP SMSC
David Holland <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Please find below a patch to allow an SMPP SMSC group to contain a
service-type definition. Previously Kannel would always send NULL, i.e.
"use default service-type". I've tested this patch and it works against
Xwireless/Mblox SMPP server. If no-one objects I'll commit it to CVS and
update the userguide.
Many thanks to Nick Clarey for writing this when I realised what the
missing functionality was.
Dave
--
:: David Holland :: Systems Manager :: 3G Lab :: +44 01223 478900 ::
"Standards ought to be less whimsical than, say, Microsoft APIs."
-- Graham Nelson
Index: gw/smsc/smsc_smpp.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_smpp.c,v
retrieving revision 1.23
diff -u -r1.23 smsc_smpp.c
--- gw/smsc/smsc_smpp.c 14 Feb 2003 10:44:39 -0000 1.23
+++ gw/smsc/smsc_smpp.c 18 Feb 2003 13:34:11 -0000
@@ -89,6 +89,7 @@
Octstr *address_range;
Octstr *our_host;
Octstr *my_number;
+ Octstr *service_type;
int source_addr_ton;
int source_addr_npi;
int dest_addr_ton;
@@ -120,7 +121,7 @@
int max_pending_submits, int reconnect_delay,
int version, int priority, Octstr *my_number,
int smpp_msg_id_type, int autodetect_addr,
- Octstr *alt_charset)
+ Octstr *alt_charset, Octstr *service_type)
{
SMPP *smpp;
@@ -144,6 +145,7 @@
smpp->alt_dcs = alt_dcs;
smpp->our_host = octstr_duplicate(our_host);
smpp->my_number = octstr_duplicate(my_number);
+ smpp->service_type = octstr_duplicate(service_type);
smpp->transmit_port = transmit_port;
smpp->receive_port = receive_port;
smpp->enquire_link_interval = enquire_link_interval;
@@ -173,6 +175,7 @@
octstr_destroy(smpp->username);
octstr_destroy(smpp->password);
octstr_destroy(smpp->system_type);
+ octstr_destroy(smpp->service_type);
octstr_destroy(smpp->address_range);
octstr_destroy(smpp->our_host);
octstr_destroy(smpp->my_number);
@@ -326,6 +329,9 @@
pdu->u.submit_sm.source_addr = octstr_duplicate(msg->sms.sender);
pdu->u.submit_sm.destination_addr = octstr_duplicate(msg->sms.receiver);
+
+ /* Set the service type of the outgoing message */
+ pdu->u.submit_sm.service_type = octstr_duplicate(smpp->service_type);
/* Check for manual override of source ton and npi values */
if(smpp->source_addr_ton > -1 && smpp->source_addr_npi > -1) {
@@ -1252,6 +1258,7 @@
long dest_addr_npi;
Octstr *our_host;
Octstr *my_number;
+ Octstr *service_type;
SMPP *smpp;
int ok;
int transceiver_mode;
@@ -1284,6 +1291,7 @@
address_range = cfg_get(grp, octstr_imm("address-range"));
our_host = cfg_get(grp, octstr_imm("our-host"));
my_number = cfg_get(grp, octstr_imm("my-number"));
+ service_type = cfg_get(grp, octstr_imm("service-type"));
system_id = cfg_get(grp, octstr_imm("system-id"));
if (system_id != NULL) {
@@ -1328,6 +1336,11 @@
error(0, "SMPP: Configuration file doesn't specify system-type.");
ok = 0;
}
+ if (octstr_len(service_type) > 6) {
+ error(0, "SMPP: Service type must be 6 characters or less.");
+ ok = 0;
+ }
+
if (!ok)
return -1;
@@ -1379,7 +1392,7 @@
dest_addr_npi, alt_dcs, enquire_link_interval,
max_pending_submits, reconnect_delay,
version, priority, my_number, smpp_msg_id_type,
- autodetect_addr, alt_charset);
+ autodetect_addr, alt_charset, service_type);
conn->data = smpp;
conn->name = octstr_format("SMPP:%S:%d/%d:%S:%S",
@@ -1401,6 +1414,7 @@
octstr_destroy(my_number);
octstr_destroy(smsc_id);
octstr_destroy(alt_charset);
+ octstr_destroy(service_type);
conn->status = SMSCCONN_CONNECTING;
Index: gwlib/cfg.def
===================================================================
RCS file: /home/cvs/gateway/gwlib/cfg.def,v
retrieving revision 1.81
diff -u -r1.81 cfg.def
--- gwlib/cfg.def 14 Feb 2003 10:55:37 -0000 1.81
+++ gwlib/cfg.def 18 Feb 2003 13:34:11 -0000
@@ -232,6 +232,7 @@
OCTSTR(source-addr-npi)
OCTSTR(dest-addr-ton)
OCTSTR(dest-addr-npi)
+ OCTSTR(service-type)
OCTSTR(source-addr-autodetect)
OCTSTR(enquire-link-interval)
OCTSTR(max-pending-submits)