diff options
Diffstat (limited to 'src/mm-serial-parsers.c')
-rw-r--r-- | src/mm-serial-parsers.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/mm-serial-parsers.c b/src/mm-serial-parsers.c index f6798314..1528a59b 100644 --- a/src/mm-serial-parsers.c +++ b/src/mm-serial-parsers.c @@ -202,6 +202,7 @@ typedef struct { GRegex *regex_custom_successful; /* Regular expressions for error replies */ GRegex *regex_cme_error; + GRegex *regex_cms_error; GRegex *regex_cme_error_str; GRegex *regex_ezx_error; GRegex *regex_unknown_error; @@ -220,6 +221,7 @@ mm_serial_parser_v1_new (void) parser->regex_ok = g_regex_new ("\\r\\nOK(\\r\\n)+$", flags, 0, NULL); parser->regex_connect = g_regex_new ("\\r\\nCONNECT.*\\r\\n", flags, 0, NULL); parser->regex_cme_error = g_regex_new ("\\r\\n\\+CME ERROR: (\\d+)\\r\\n$", flags, 0, NULL); + parser->regex_cms_error = g_regex_new ("\\r\\n\\+CMS ERROR: (\\d+)\\r\\n$", flags, 0, NULL); parser->regex_cme_error_str = g_regex_new ("\\r\\n\\+CME ERROR: ([^\\n\\r]+)\\r\\n$", flags, 0, NULL); parser->regex_ezx_error = g_regex_new ("\\r\\n\\MODEM ERROR: (\\d+)\\r\\n$", flags, 0, NULL); parser->regex_unknown_error = g_regex_new ("\\r\\n(ERROR)|(COMMAND NOT SUPPORT)\\r\\n$", flags, 0, NULL); @@ -322,6 +324,23 @@ mm_serial_parser_v1_parse (gpointer data, goto done; } + /* Numeric CMS errors */ + /* Todo + * One should probably add message service + * errors explicitly in mm-errors.h/c + */ + found = g_regex_match_full (parser->regex_cms_error, + response->str, response->len, + 0, 0, &match_info, NULL); + if (found) { + str = g_match_info_fetch (match_info, 1); + g_assert (str); + local_error = mm_mobile_error_for_code (atoi (str)); + g_free (str); + g_match_info_free (match_info); + goto done; + } + /* String CME errors */ found = g_regex_match_full (parser->regex_cme_error_str, response->str, response->len, |