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