r3200 - in trunk/src/target/gsm/src: gsmd util

jserv at sita.openmoko.org jserv at sita.openmoko.org
Wed Oct 17 08:10:30 CEST 2007


Author: jserv
Date: 2007-10-17 08:10:26 +0200 (Wed, 17 Oct 2007)
New Revision: 3200

Modified:
   trunk/src/target/gsm/src/gsmd/sms_pdu.c
   trunk/src/target/gsm/src/util/event.c
Log:
SMS status report

From: Erin Yueh <erin_yueh at openmoko.com>
Subject: [PATCH] SMS status report

I made a patch for SMS status report. It can change SMS-Submit messages
and ask for a status report. When  the destination address receives our
message, the service center will send a SMS-STATUS-REPORT to us. We can
tell what messages we sent by TP-MR (message reference number) value and
can know the sending result by TP-ST (Status) value from status report
messages.


Modified: trunk/src/target/gsm/src/gsmd/sms_pdu.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/sms_pdu.c	2007-10-17 04:30:24 UTC (rev 3199)
+++ trunk/src/target/gsm/src/gsmd/sms_pdu.c	2007-10-17 06:10:26 UTC (rev 3200)
@@ -139,6 +139,17 @@
 		/* Skip TP-PID */
 		len -= 9;
 		src += 9;
+
+		/* TP-UDL */
+		dst->payload.length = src[0];
+		i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
+
+		/* TP-UD */
+		if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
+			return 1;
+		memcpy(dst->payload.data, src + 1, i);
+		dst->payload.data[i] = 0;
+
 		break;
 	case GSMD_SMS_TP_MTI_SUBMIT:
 		if (len < 4)
@@ -179,24 +190,45 @@
 		src += vpf ? 3 : 2;
 
 		memset(dst->time_stamp, 0, 7);
+
+		/* TP-UDL */
+		dst->payload.length = src[0];
+		i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
+
+		/* TP-UD */
+		if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
+			return 1;
+		memcpy(dst->payload.data, src + 1, i);
+		dst->payload.data[i] = 0;
 		break;
 	case GSMD_SMS_TP_MTI_STATUS_REPORT:
-		/* TODO */
+		if (len < 3)
+			return 1;
+
+		/* TP-MR set it gsmd_sms_list.index*/
+		dst->index = (int) src[1];
+		/* TP-STATUS set it to coding_scheme */
+		dst->payload.coding_scheme = (int) src[len-1];
+		/* TP-RA */
+		i = sms_number_bytelen(src[3], src[2]);
+		if (len < 13 + i)
+			return 1;
+		if (sms_address2ascii(&dst->addr, src + 2))
+			return 1;
+		len -= 4 + i;
+		src += 4 + i;
+		/* TP-SCTS */
+		memcpy(dst->time_stamp, src, 7);
+		/* TP-UD  */
+		dst->payload.length = 0;
+		dst->payload.data[0] = 0;
+		break;
 	default:
 		/* Unknown PDU type */
 		return 1;
 	}
 
-	/* TP-UDL */
-	dst->payload.length = src[0];
-	i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
 
-	/* TP-UD */
-	if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
-		return 1;
-	memcpy(dst->payload.data, src + 1, i);
-	dst->payload.data[i] = 0;
-
 	return 0;
 }
 
@@ -215,7 +247,7 @@
 		GSMD_SMS_TP_MTI_SUBMIT |
 		(0 << 2) |		/* Reject Duplicates: 0 */
 		GSMD_SMS_TP_VPF_NOT_PRESENT |
-		GSMD_SMS_TP_SRR_NOT_REQUEST |
+		GSMD_SMS_TP_SRR_STATUS_REQUEST |
 		(src->payload.has_header ? GSMD_SMS_TP_UDHI_WITH_HEADER :
 		 GSMD_SMS_TP_UDHI_NO_HEADER) |
 		GSMD_SMS_TP_RP_NOT_SET;

Modified: trunk/src/target/gsm/src/util/event.c
===================================================================
--- trunk/src/target/gsm/src/util/event.c	2007-10-17 04:30:24 UTC (rev 3199)
+++ trunk/src/target/gsm/src/util/event.c	2007-10-17 06:10:26 UTC (rev 3200)
@@ -128,8 +128,12 @@
 static int inds_handler(struct lgsm_handle *lh, int evt,
 		struct gsmd_evt_auxdata *aux)
 {
-	if (aux->u.ds.inlined)
+	if (aux->u.ds.inlined) {
+		struct gsmd_sms_list *sms;
+		sms = (struct gsmd_sms_list *) aux->data;
 		printf("EVENT: Incoming Status Report\n");
+		printf("message ref = %d, status = %d\n", sms->index,sms->payload.coding_scheme);
+	}
 	else
 		printf("EVENT: Incoming Status Report stored at location %i\n",
 				aux->u.ds.index);





More information about the commitlog mailing list