[PATCH] Some modifs on EMI UCP

Colin Pitrat <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Organization Bull
Message-ID <[email protected]>
Hi,
here are some modifications I made to EMI UCP. The patch should be 
applied only if the previous patches I sent are applied before. This 
patch just adds a skeleton for the answer to 02, 03, 57 and 58 ot and 
move the code that produce the SM field for the answer to 0x ot in a 
function.

I'm currently running some conformity tests on kannel for EMI UCP, and 
I'd like to add the missing functionalities, but it seems like there's 
not a lot of commit on CVS for a long time. Will all the patches that 
have been sent for the last months be applied ?

Regards,
-- 
Colin Pitrat (Bull Services Telco)
Bull,  Architect of an Open World (TM)
Tél : +33 (0)  1 30 80 72 93
www.bull.com
emi_modifs.patch (text/plain, 5.2 KB)
diff -ur gateway/gw/smsc/emimsg.c gateway-new/gw/smsc/emimsg.c
--- gateway/gw/smsc/emimsg.c	2005-02-11 16:35:48.000000000 +0100
+++ gateway-new/gw/smsc/emimsg.c	2006-08-23 15:26:57.000000000 +0200
@@ -113,11 +113,17 @@
     switch (ot) {
     case 01:
 	return SZ01;
+    case 02:
+	return SZ02;
+    case 03:
+	return SZ03;
     case 31:
 	return 2;
     case 51:
     case 52:
     case 53:
+    case 57:
+    case 58:
 	return SZ50;
     case 60:
 	return SZ60;
@@ -133,12 +139,16 @@
 {
     switch(ot) {
     case 01:
+    case 02:
+    case 03:
 	return posit ? 2 : 3;
     case 31:
 	return posit ? 2 : 3;
     case 51:
     case 52:
     case 53:
+    case 57:
+    case 58:
 	return 3;
     case 60:
 	return posit ? 2 : 3;
diff -ur gateway/gw/smsc/emimsg.h gateway-new/gw/smsc/emimsg.h
--- gateway/gw/smsc/emimsg.h	2005-02-11 16:35:48.000000000 +0100
+++ gateway-new/gw/smsc/emimsg.h	2006-08-23 15:26:22.000000000 +0200
@@ -81,6 +81,13 @@
     E01_ADC, E01_OADC, E01_AC, E01_MT, E01_AMSG, SZ01
 };
 
+enum {
+    E02_NPL, E02_RAD, E02_OADC, E02_AC, E02_MT, E02_AMSG, SZ02
+};
+
+enum {
+    E03_RAD, E03_OADC, E03_AC, E03_NPL, E03_RP, E03_PR, E03_LPR, E03_UR, E03_LUR, E03_RC, E03_LRC, E03_DD, E03_DDT, E03_MT, E03_AMSG, SZ03
+};
 
 /* All the 50-series messages have the same number of fields */
 enum {
diff -ur gateway/gw/smsc/smsc_emi.c gateway-new/gw/smsc/smsc_emi.c
--- gateway/gw/smsc/smsc_emi.c	2006-08-18 15:53:59.000000000 +0200
+++ gateway-new/gw/smsc/smsc_emi.c	2006-08-23 15:31:35.000000000 +0200
@@ -159,6 +159,35 @@
  (PRIVDATA(conn)->keepalive > 0) &&							\
  (time(NULL) > (PRIVDATA(conn)->last_activity_time + PRIVDATA(conn)->keepalive)))
 
+/* 
+ * Create the SM field for operation 0x :
+ * an Octstr * of the form "Adc:SCTS" with : 
+ * AdC = Address code recipient, max 16 digits
+ * SCTS = Service center time stamp DDMMYYhhmmss
+ */
+Octstr *create_0x_SM_field(Octstr *AdC)
+{
+    time_t t_time;
+    struct tm tm_time;
+    // 13 because the timestamp format is DDMMYYhhmmss
+    char timestamp[13];
+    Octstr *separator;
+    Octstr *tmpstr;
+    Octstr *tmpstr2;
+    Octstr *result;
+
+    separator = octstr_create(":");
+    tmpstr = octstr_cat(AdC, separator);
+    time(&t_time);
+    gw_strftime(timestamp, sizeof(timestamp), "%d%m%y%H%M%S", localtime_r(&t_time, &tm_time));
+    tmpstr2 = octstr_create(timestamp);
+    result = octstr_cat(tmpstr, tmpstr2);
+    octstr_destroy(tmpstr);
+    octstr_destroy(tmpstr2);
+    octstr_destroy(separator);
+    return result;
+}
+
 /*
  * Send an EMI message and update the last_activity_time field.
  */
@@ -596,6 +625,10 @@
 	switch(octstr_get_char(emimsg->fields[E01_MT], 0))
 	{
 	    case '2':
+		/* 
+		 * Bull, Colin Pitrat, 18/08/2006 :
+		 * Not handling MT=2 (Numeric message)
+		 */
 		if (emimsg->fields[E01_AMSG] == NULL)
 		    emimsg->fields[E01_AMSG] = octstr_create("");
 		msg->sms.msgdata = emimsg->fields[E01_AMSG];
@@ -653,29 +686,7 @@
 	msg->sms.smsc_id = octstr_duplicate(conn->id);
 	bb_smscconn_receive(conn, msg);
 	reply = emimsg_create_reply(01, emimsg->trn, 1, privdata->name);
-	/* 
-	 * Reply should contain SM as field 2 which is AdC:SCTS with :
-	 * AdC = Address code recipient, max 16 digits
-	 * SCTS = Service center time stamp DDMMYYhhmmss
-	 */
-	{
-	    time_t t_time;
-	    struct tm tm_time;
-	    // 13 because the timestamp format is DDMMYYhhmmss
-	    char timestamp[13];
-	    Octstr *tmpstr;
-	    Octstr *tmpstr2;
-
-	    time(&t_time);
-	    tmpstr = octstr_create(":");
-	    tmpstr2 = octstr_cat(emimsg->fields[E01_ADC], tmpstr);
-	    octstr_destroy(tmpstr); 
-	    gw_strftime(timestamp, sizeof(timestamp), "%d%m%y%H%M%S", localtime_r(&t_time, &tm_time));
-	    tmpstr = octstr_create(timestamp);
-	    reply->fields[1] = octstr_cat(tmpstr2, tmpstr);
-	    octstr_destroy(tmpstr);
-	    octstr_destroy(tmpstr2);
-	}
+	reply->fields[1] = create_0x_SM_field(emimsg->fields[E01_ADC]);
 
 	if (emi2_emimsg_send(conn, server, reply) < 0) {
 	    emimsg_destroy(reply);
@@ -927,6 +938,38 @@
         emimsg_destroy(reply);
         return (st_code < 0 ? -1 : 1);
 
+    /*
+     * Handle OP/02 multiple address call input operation. This is the MO side 
+     * of the protocol implementation.
+     */
+    case 02:
+    /*
+     * Handle OP/03 call input with suplementary services operation. This is 
+     * the MO side of the protocol implementation. 
+     */
+    case 03:
+    /*
+     * Handle OP/57 response inquiry message operation. This is the MO side 
+     * of the protocol implementation.
+     */
+    case 57:
+    /*
+     * Handle OP/58 response delete message operation. This is 
+     * the MO side of the protocol implementation. 
+     */
+    case 58:
+	/*
+	 * These operations aren't implemented yet, return a NACK with error code
+	 * 03 : Operation not supported by system
+	 */
+	error(0, "EMI2[%s]: Operation type %d not implemented yet",
+		octstr_get_cstr(privdata->name), emimsg->ot);
+	reply = emimsg_create_reply(emimsg->ot, emimsg->trn, 0, privdata->name);
+	reply->fields[1] = octstr_create("03");
+	st_code = emi2_emimsg_send(conn, server, reply);
+	emimsg_destroy(reply);
+	return (st_code < 0 ? -1 : 1);
+
     default:
 	error(0, "EMI2[%s]: I don't know how to handle operation type %d", 
 	      octstr_get_cstr(privdata->name), emimsg->ot);
colin.pitrat.vcf (text/x-vcard, 247 B)
begin:vcard
fn:Colin Pitrat
n:Pitrat;Colin
org:Bull;Telco
adr:;;rue Jean Jaures;Les Clayes sous Bois;;78340;France
email;internet:[email protected]
tel;work:+33 1 30 80 72 93
x-mozilla-html:FALSE
url:http://www.bull.com
version:2.1
end:vcard
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.