r3861 - in trunk/src/target/gsm: include/gsmd src/gsmd src/util

erin_yueh at sita.openmoko.org erin_yueh at sita.openmoko.org
Thu Jan 17 09:35:58 CET 2008


Author: erin_yueh
Date: 2008-01-17 09:35:53 +0100 (Thu, 17 Jan 2008)
New Revision: 3861

Modified:
   trunk/src/target/gsm/include/gsmd/usock.h
   trunk/src/target/gsm/src/gsmd/sms_cb.c
   trunk/src/target/gsm/src/util/event.c
Log:
gsmd: fix CMT_parse comma error (Sean Chiang)


Modified: trunk/src/target/gsm/include/gsmd/usock.h
===================================================================
--- trunk/src/target/gsm/include/gsmd/usock.h	2008-01-17 04:48:25 UTC (rev 3860)
+++ trunk/src/target/gsm/include/gsmd/usock.h	2008-01-17 08:35:53 UTC (rev 3861)
@@ -386,6 +386,8 @@
 	struct gsmd_addr addr;
 } __attribute__ ((packed));
 
+#define GSMD_ALPHA_MAXLEN	20
+
 /* call status from 3GPP TS 07.07 clause 07.17 */
 struct gsmd_call_status {
 	int8_t idx;
@@ -395,7 +397,7 @@
 	u_int8_t mpty;
 	char number[GSMD_ADDR_MAXLEN+1];	
 	u_int8_t type;
-	char alpha[8+1];
+	char alpha[GSMD_ALPHA_MAXLEN+1];
 	int is_last;	
 } __attribute__ ((packed));
 
@@ -441,6 +443,7 @@
 			struct gsmd_addr addr;
 		} colp;
 		struct {
+			char alpha[GSMD_ALPHA_MAXLEN+1];
 			int inlined;
 			u_int8_t memtype;
 			int index;
@@ -490,7 +493,7 @@
 		struct {
 			struct gsmd_addr addr;
 			u_int8_t classx;
-			char	alpha[16];
+			char	alpha[GSMD_ALPHA_MAXLEN+1];
 			u_int8_t cli; 
 		} ccwa;
 	} u;

Modified: trunk/src/target/gsm/src/gsmd/sms_cb.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/sms_cb.c	2008-01-17 04:48:25 UTC (rev 3860)
+++ trunk/src/target/gsm/src/gsmd/sms_cb.c	2008-01-17 08:35:53 UTC (rev 3861)
@@ -39,6 +39,7 @@
 #include <gsmd/unsolicited.h>
 #include <gsmd/sms.h>
 #include <gsmd/talloc.h>
+#include <gsmd/extrsp.h>
 
 static const char *ts0705_memtype_name[] = {
 	[GSM0705_MEMTYPE_NONE]		= "NONE",
@@ -431,9 +432,10 @@
 {
 	/* TODO: TEXT mode */
 	u_int8_t pdu[SMS_MAX_PDU_SIZE];
-	const char *comma = strchr(param, ',');
-	char *cr;
+	const char *cr = NULL;
 	int i;
+	char tmp[64];
+	struct gsm_extrsp *er;
 	struct gsmd_evt_auxdata *aux;
 	struct gsmd_sms_list *msg;
 	struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT,
@@ -446,16 +448,45 @@
 	aux = (struct gsmd_evt_auxdata *) ucmd->buf;
 	msg = (struct gsmd_sms_list *) aux->data;
 
-	if (!comma) {
+	cr = strchr(param, '\n');
+
+	if (!cr) {
 		talloc_free(ucmd);
-		return -EINVAL;
+		return -EAGAIN;
 	}
-	len = strtoul(comma + 1, &cr, 10);
-	if (cr[0] != '\n') {
+
+	strncpy(tmp, param, (cr-param));
+	tmp[(cr-param)] = '\0';
+
+	er = extrsp_parse(gsmd_tallocs, tmp);
+
+	if ( !er ) {
 		talloc_free(ucmd);
-		return -EAGAIN;
+		return -ENOMEM;
 	}
 
+	//extrsp_dump(er);	
+
+	if ( er->num_tokens == 2 && 
+			er->tokens[0].type == GSMD_ECMD_RTT_EMPTY &&
+			er->tokens[1].type == GSMD_ECMD_RTT_NUMERIC ) {
+
+		aux->u.sms.alpha[0] = '\0';
+		len = er->tokens[1].u.numeric; 
+	}
+	else if ( er->num_tokens == 2 && 
+			er->tokens[0].type == GSMD_ECMD_RTT_STRING &&
+			er->tokens[1].type == GSMD_ECMD_RTT_NUMERIC ) {
+
+		strcpy(aux->u.sms.alpha, er->tokens[0].u.string);
+		len = er->tokens[1].u.numeric; 
+	}
+	else {
+		talloc_free(ucmd);
+		talloc_free(er);
+		return -EINVAL;
+	}
+
 	cr ++;
 	for (i = 0; cr[0] >= '0' && cr[1] >= '0' && i < SMS_MAX_PDU_SIZE;
 			i ++) {

Modified: trunk/src/target/gsm/src/util/event.c
===================================================================
--- trunk/src/target/gsm/src/util/event.c	2008-01-17 04:48:25 UTC (rev 3860)
+++ trunk/src/target/gsm/src/util/event.c	2008-01-17 08:35:53 UTC (rev 3861)
@@ -64,6 +64,8 @@
 				(sms->time_stamp[6] & 8) ? '-' : '+',
 				(((sms->time_stamp[6] << 4) |
 				  (sms->time_stamp[6] >> 4)) & 0x3f) >> 2);
+		if ( strlen(aux->u.sms.alpha) )		  
+			printf("From %s\n", aux->u.sms.alpha);
 		if (sms->payload.coding_scheme == ALPHABET_DEFAULT) {
 			unpacking_7bit_character(&sms->payload, payload);
 			printf("\"%s\"\n", payload);





More information about the commitlog mailing list