Tighter check when checking for potential echo

This commit is contained in:
Pierre Pronchery 2010-05-11 13:06:12 +00:00
parent 8cac2bbdd7
commit 3931a523d3

View File

@ -921,7 +921,7 @@ static int _gsm_parse_line(GSM * gsm, char const * line, gboolean * answered)
GSMCommand * gsmc; GSMCommand * gsmc;
GSMCommandCallback callback; GSMCommandCallback callback;
GSMError error = GSM_ERROR_UNKNOWN; GSMError error = GSM_ERROR_UNKNOWN;
char const * cmd; char const * cmd = NULL;
size_t j; size_t j;
int c; int c;
@ -930,7 +930,9 @@ static int _gsm_parse_line(GSM * gsm, char const * line, gboolean * answered)
#endif #endif
if(answered != NULL) if(answered != NULL)
*answered = FALSE; *answered = FALSE;
if(strncmp(line, "AT", 2) == 0) /* ignore echo (tighter check?) */ if((gsmc = g_slist_nth_data(gsm->queue, 0)) != NULL)
cmd = gsm_command_get_command(gsmc);
if(strcmp(line, cmd) == 0) /* ignore echo */
return 0; return 0;
if(strcmp(line, "RING") == 0) if(strcmp(line, "RING") == 0)
{ {
@ -938,7 +940,6 @@ static int _gsm_parse_line(GSM * gsm, char const * line, gboolean * answered)
GSM_CALL_TYPE_UNKNOWN); GSM_CALL_TYPE_UNKNOWN);
return 0; return 0;
} }
gsmc = g_slist_nth_data(gsm->queue, 0);
if(strcmp(line, "OK") == 0) if(strcmp(line, "OK") == 0)
{ {
/* XXX the trigger may not have been called (if any) */ /* XXX the trigger may not have been called (if any) */
@ -966,8 +967,7 @@ static int _gsm_parse_line(GSM * gsm, char const * line, gboolean * answered)
return 0; return 0;
} }
/* XXX look for a potential trigger */ /* XXX look for a potential trigger */
if(gsmc != NULL && (cmd = gsm_command_get_command(gsmc)) != NULL if(cmd != NULL && strncmp(cmd, "AT+", 3) == 0 && isupper((c = cmd[3])))
&& strncmp(cmd, "AT+", 3) == 0 && isupper((c = cmd[3])))
{ {
for(cmd += 2, j = 2; cmd[j] != '\0' && isupper((c = cmd[j])); for(cmd += 2, j = 2; cmd[j] != '\0' && isupper((c = cmd[j]));
j++); j++);