r4245 - trunk/src/target/gsm/src/gsmd
erin_yueh at sita.openmoko.org
erin_yueh at sita.openmoko.org
Tue Mar 25 11:33:48 CET 2008
Author: erin_yueh
Date: 2008-03-25 11:33:45 +0100 (Tue, 25 Mar 2008)
New Revision: 4245
Modified:
trunk/src/target/gsm/src/gsmd/unsolicited.c
Log:
gsmd: fix clip & colp parser problem (Erin Yueh)
Modified: trunk/src/target/gsm/src/gsmd/unsolicited.c
===================================================================
--- trunk/src/target/gsm/src/gsmd/unsolicited.c 2008-03-25 08:53:27 UTC (rev 4244)
+++ trunk/src/target/gsm/src/gsmd/unsolicited.c 2008-03-25 10:33:45 UTC (rev 4245)
@@ -348,24 +348,32 @@
struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_IN_CLIP,
sizeof(struct gsmd_evt_auxdata));
struct gsmd_evt_auxdata *aux;
- const char *comma = strchr(param, ',');
+ struct gsm_extrsp *er;
- if (!ucmd)
+ if (!ucmd)
return -ENOMEM;
aux = (struct gsmd_evt_auxdata *) ucmd->buf;
- if (!comma)
- return -EINVAL;
+ er = extrsp_parse(gsmd_tallocs, param);
-
- if (comma - param > GSMD_ADDR_MAXLEN)
+ if ( !er )
+ return -ENOMEM;
+
+ if ( er->num_tokens >= 2 &&
+ er->tokens[0].type == GSMD_ECMD_RTT_STRING &&
+ er->tokens[1].type == GSMD_ECMD_RTT_NUMERIC ) {
+ /*
+ * <number>,<type>[,<subaddr>,<satype>[,[<alpha>][,<CLI validity>]]]
+ */
+
+ strcpy(aux->u.clip.addr.number, er->tokens[0].u.string);
+ aux->u.clip.addr.type = er->tokens[1].u.numeric;
+ } else {
+ DEBUGP("Invalid Input : Parse error\n");
return -EINVAL;
+ }
- aux->u.clip.addr.number[0] = '\0';
- strncat(aux->u.clip.addr.number, param, comma-param);
- /* FIXME: parse of subaddr, etc. */
-
return usock_evt_send(gsmd, ucmd, GSMD_EVT_IN_CLIP);
}
@@ -376,23 +384,32 @@
struct gsmd_ucmd *ucmd = usock_build_event(GSMD_MSG_EVENT, GSMD_EVT_OUT_COLP,
sizeof(struct gsmd_evt_auxdata));
struct gsmd_evt_auxdata *aux;
- const char *comma = strchr(param, ',');
+ struct gsm_extrsp *er;
if (!ucmd)
return -ENOMEM;
aux = (struct gsmd_evt_auxdata *) ucmd->buf;
- if (!comma)
+ er = extrsp_parse(gsmd_tallocs, param);
+
+ if ( !er )
+ return -ENOMEM;
+
+ if ( er->num_tokens >= 2 &&
+ er->tokens[0].type == GSMD_ECMD_RTT_STRING &&
+ er->tokens[1].type == GSMD_ECMD_RTT_NUMERIC ) {
+ /*
+ * <number>,<type>[,<subaddr>,<satype> [,<alpha>]]
+ */
+
+ strcpy(aux->u.colp.addr.number, er->tokens[0].u.string);
+ aux->u.colp.addr.type = er->tokens[1].u.numeric;
+ } else {
+ DEBUGP("Invalid Input : Parse error\n");
return -EINVAL;
+ }
- if (comma - param > GSMD_ADDR_MAXLEN)
- return -EINVAL;
-
- aux->u.colp.addr.number[0] = '\0';
- strncat(aux->u.colp.addr.number, param, comma-param);
- /* FIXME: parse of subaddr, etc. */
-
return usock_evt_send(gsmd, ucmd, GSMD_EVT_OUT_COLP);
}
More information about the commitlog
mailing list