I have two changes to the CIMD2 module;
1. Turn off REPLY_PATH as default. This avoids some phones (at least Ericsson T68i) asking the user if he want to reply to every message.
2. Support for alphanumeric sender. This was the itch that needed
scratching ;-)
I am a very novice C programmer, but the patch appears to work fine so
far. Please include the patch if ypu find it useful and safe.
Any feedback or questions would be most welcome.
--
Yours sincerely,
Eurobate ASA
Arne K. Haaje
Senior Network Engineer
--------------------------------------------------------------------
Eurobate ASA - Postboks 4589 Nydalen - 0404 Oslo - Norway
Phone: +47 23 22 73 73 - Fax: +47 23 22 73 74 - Mob: +47 92 88 44 66
http://www.eurobate.com/
--- smsc_cimd2.c.org 2003-01-24 13:16:58.000000000 +0100
+++ smsc_cimd2.c 2003-01-24 12:55:02.000000000 +0100
@@ -76,6 +76,7 @@
P_DESTINATION_ADDRESS = 21,
P_ORIGINATING_ADDRESS = 23,
P_ORIGINATING_IMSI = 26,
+ P_ALPHANUMERIC_ORIGINATING_ADDRESS = 27,
P_ORIGINATED_VISITED_MSC = 28,
P_DATA_CODING_SCHEME = 30,
P_USER_DATA_HEADER = 32,
@@ -133,6 +134,7 @@
{ "originating address", P_ORIGINATING_ADDRESS, 20, P_ADDRESS },
/* IMSI is International Mobile Subscriber Identity number */
{ "originating IMSI", P_ORIGINATING_IMSI, 20, P_ADDRESS },
+ { "alphanumeric originating address", P_ALPHANUMERIC_ORIGINATING_ADDRESS, 11,
+P_STRING },
{ "originated visited MSC", P_ORIGINATED_VISITED_MSC, 20, P_ADDRESS },
{ "data coding scheme", P_DATA_CODING_SCHEME, 3, P_INT, 0, 255 },
{ "user data header", P_USER_DATA_HEADER, 280, P_HEX },
@@ -1223,13 +1225,6 @@
return NULL;
}
- if (!parm_valid_address(msg->sms.sender)) {
- warning(0, "cimd2_submit_msg: non-digits in "
- "originating phone number '%s', discarded",
- octstr_get_cstr(msg->sms.sender));
- return NULL;
- }
-
packet = packet_create(SUBMIT_MESSAGE, BOGUS_SEQUENCE);
packet_add_address_parm(packet, P_DESTINATION_ADDRESS, msg->sms.receiver);
@@ -1239,22 +1234,32 @@
* fill in "600" as the sender number, the user sees "400600").
* Since we have no way to ask what this number is, it has to
* be configured. */
- if (octstr_len(sender_prefix) == 0) { /* Speed up the default case */
- packet_add_address_parm(packet, P_ORIGINATING_ADDRESS,
- msg->sms.sender);
- } else if (octstr_compare(sender_prefix, octstr_imm("never")) != 0) {
- if (octstr_ncompare(sender_prefix, msg->sms.sender,
- octstr_len(sender_prefix)) == 0) {
- Octstr *sender;
- sender = octstr_copy(msg->sms.sender,
- octstr_len(sender_prefix), octstr_len(msg->sms.sender));
- packet_add_address_parm(packet, P_ORIGINATING_ADDRESS, sender);
- octstr_destroy(sender);
- } else {
- warning(0, "CIMD2: Sending message with originating address <%s>, "
- "which does not start with the sender-prefix.",
- octstr_get_cstr(msg->sms.sender));
+
+ /* Quick and dirty check to see if we are using alphanumeric sender */
+ if (parm_valid_address(msg->sms.sender)) {
+ /* We are not, so send in the usual way */
+ /* Speed up the default case */
+ if (octstr_len(sender_prefix) == 0) {
+ packet_add_address_parm(packet, P_ORIGINATING_ADDRESS,msg->sms.sender);
}
+ else if (octstr_compare(sender_prefix, octstr_imm("never")) != 0) {
+ if (octstr_ncompare(sender_prefix, msg->sms.sender,
+ octstr_len(sender_prefix)) == 0) {
+ Octstr *sender;
+ sender = octstr_copy(msg->sms.sender,
+ octstr_len(sender_prefix),
+octstr_len(msg->sms.sender));
+ packet_add_address_parm(packet, P_ORIGINATING_ADDRESS, sender);
+ octstr_destroy(sender);
+ } else {
+ warning(0, "CIMD2: Sending message with originating address <%s>, "
+ "which does not start with the sender-prefix.",
+ octstr_get_cstr(msg->sms.sender));
+ }
+ }
+ }
+ else {
+ /* The test above to check if sender was all digits failed, so assume we want
+alphanumeric sender */
+ packet_add_string_parm(packet,
+P_ALPHANUMERIC_ORIGINATING_ADDRESS,msg->sms.sender);
}
/* Explicitly ask not to get status reports.
@@ -1265,10 +1270,16 @@
if (msg->sms.dlr_mask & 0x03)
{
- packet_add_int_parm(packet, P_STATUS_REPORT_REQUEST, 14);
+ packet_add_int_parm(packet, P_STATUS_REPORT_REQUEST, 14);
}
else
- packet_add_int_parm(packet, P_STATUS_REPORT_REQUEST, 0);
+ packet_add_int_parm(packet, P_STATUS_REPORT_REQUEST, 0);
+
+ /* Turn off reply path as default.
+ * This avoids phones automatically asking for a reply
+ * However, it is a nice feature and could be enabled through a parameter
+ */
+ packet_add_int_parm(packet, P_REPLY_PATH, 0);
truncated = 0;
