Hi
A patch to help resolve the fact that different SMSCs use different
standards for the number base of the msg_id in the submit_sm_resp and
deliver_sm.. they use hex or decimal or a mixture...
Here is a patch lets you set them independently.
The config file works like this.
smpp-msg-id-type;
bit 1 submit_sm_resp
bit 2 deliver_sm
if he bit is set the value is hex
0x00 deliver_sm decimal, submit_sm_resp decimal
0x01 (default) deliver_sm decimal, submit_sm_resp hex
0x02 deliver_sm hex, submit_sm_resp decimal
0x03 deliver_sm hex, submit_sm_resp hex *
nisan
--- cvs/gateway/gw/smsc/smsc_smpp.c Mon Aug 19 20:57:59 2002
+++ ./smsc_smpp.c Mon Aug 19 20:54:30 2002
@@ -97,6 +97,16 @@
int version;
int priority; /* set default priority for messages */
time_t throttling_err_time;
+ int smpp_msg_id_type; /* msg id in hex or decimal..
+ * bit 1 submit_sm_resp bit 2 deliver_sm &
+ * bit set value is hex
+ * 0x00 deliver_sm decimal, submit_sm_resp decimal
+ * 0x01 (default) deliver_sm decimal,
submit_sm_resp hex
+ * 0x02 deliver_sm hex, submit_sm_resp decimal
+ * 0x03 deliver_sm hex, submit_sm_resp hex *
+ */
+
+
SMSCConn *conn;
} SMPP;
@@ -109,7 +119,8 @@
int dest_addr_ton, int dest_addr_npi,
int alt_dcs, int enquire_link_interval,
int max_pending_submits, int reconnect_delay,
- int version, int priority, Octstr *my_number)
+ int version, int priority, Octstr *my_number,
+ int smpp_msg_id_type)
{
SMPP *smpp;
@@ -143,6 +154,7 @@
smpp->priority = priority;
smpp->conn = conn;
smpp->throttling_err_time = 0;
+ smpp->smpp_msg_id_type = smpp_msg_id_type;
return smpp;
}
@@ -657,7 +669,12 @@
if (msgid != NULL) {
Octstr *tmp;
+ if ((smpp->smpp_msg_id_type & 0x02))
+ tmp = octstr_format("%ld",
strtol(octstr_get_cstr(msgid), NULL, 16));
+ else
tmp = octstr_format("%ld",
strtol(octstr_get_cstr(msgid), NULL, 10));
+
+
dlrmsg = dlr_find(octstr_get_cstr(smpp->conn->id),
octstr_get_cstr(tmp), /* smsc
message id */
octstr_get_cstr(pdu->u.deliver_sm.destination_addr),
/* destination */
@@ -773,9 +790,14 @@
} else {
Octstr *tmp;
- /* deliver gives mesg id in decimal, submit_sm in hex.. */
+ if ((smpp->smpp_msg_id_type & 0x01))
tmp = octstr_format("%ld", strtol(
octstr_get_cstr(pdu->u.submit_sm_resp.message_id),
NULL, 16));
+ else
+ tmp = octstr_format("%ld", strtol(
+ octstr_get_cstr(pdu->u.submit_sm_resp.message_id),
NULL, 10));
+
+
/* SMSC ACK.. now we have the message id. */
if (msg->sms.dlr_mask &
(DLR_SMSC_SUCCESS|DLR_SUCCESS|DLR_FAIL|DLR_BUFFERED))
@@ -1089,6 +1111,7 @@
long reconnect_delay;
long version;
long priority;
+ long smpp_msg_id_type;
my_number = NULL;
@@ -1180,13 +1203,16 @@
if (cfg_get_integer(&priority, grp, octstr_imm("priority")) == -1)
priority = SMPP_DEFAULT_PRIORITY;
+ if (cfg_get_integer(&smpp_msg_id_type, grp,
octstr_imm("smpp-msg-id-type")) == -1)
+ smpp_msg_id_type = 0x01; /* default(0x01) deliver_sm decimal,
+
submit_sm_resp hex */
smpp = smpp_create(conn, host, port, receive_port, system_type,
username, password, address_range, our_host,
source_addr_ton, source_addr_npi, dest_addr_ton,
dest_addr_npi, alt_dcs, enquire_link_interval,
max_pending_submits, reconnect_delay,
- version, priority, my_number);
+ version, priority, my_number, smpp_msg_id_type);
conn->data = smpp;
conn->name = octstr_format("SMPP:%S:%d/%d:%S:%S",