aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-04-05 18:08:46 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-04-05 19:11:24 +0200
commit3b6b049e51a5be5d099a8ac3c27973b91b8a5be9 (patch)
treed9543315b18df0a9a80fa51c440cdd445e1a29e7
parenta294800c7f6290b49ee5011e0a4e99831a070161 (diff)
serial-parser: detect 'NA' as a mobile equipment error
Just treat 'NA' as MM_MOBILE_EQUIPMENT_ERROR_NOT_ALLOWED error. https://bugzilla.gnome.org/show_bug.cgi?id=697368
-rw-r--r--src/mm-serial-parsers.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/mm-serial-parsers.c b/src/mm-serial-parsers.c
index a267d046..e5aa9a0d 100644
--- a/src/mm-serial-parsers.c
+++ b/src/mm-serial-parsers.c
@@ -93,6 +93,7 @@ typedef struct {
GRegex *regex_ezx_error;
GRegex *regex_unknown_error;
GRegex *regex_connect_failed;
+ GRegex *regex_na;
GRegex *regex_custom_error;
/* User-provided parser filter */
mm_serial_parser_v1_filter_fn filter_callback;
@@ -117,6 +118,8 @@ mm_serial_parser_v1_new (void)
parser->regex_ezx_error = g_regex_new ("\\r\\n\\MODEM ERROR:\\s*(\\d+)\\r\\n$", flags, 0, NULL);
parser->regex_unknown_error = g_regex_new ("\\r\\n(ERROR)|(COMMAND NOT SUPPORT)\\r\\n$", flags, 0, NULL);
parser->regex_connect_failed = g_regex_new ("\\r\\n(NO CARRIER)|(BUSY)|(NO ANSWER)|(NO DIALTONE)\\r\\n$", flags, 0, NULL);
+ /* Samsung Z810 may reply "NA" to report a not-available error */
+ parser->regex_na = g_regex_new ("\\r\\nNA\\r\\n", flags, 0, NULL);
parser->regex_custom_successful = NULL;
parser->regex_custom_error = NULL;
@@ -335,6 +338,19 @@ mm_serial_parser_v1_parse (gpointer data,
}
local_error = mm_connection_error_for_code (code);
+ goto done;
+ }
+
+ /* NA error */
+ found = g_regex_match_full (parser->regex_na,
+ response->str, response->len,
+ 0, 0, &match_info, NULL);
+ if (found) {
+ /* Assume NA means 'Not Allowed' :) */
+ local_error = g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
+ MM_MOBILE_EQUIPMENT_ERROR_NOT_ALLOWED,
+ "Not Allowed");
+ goto done;
}
done:
@@ -378,6 +394,7 @@ mm_serial_parser_v1_destroy (gpointer data)
g_regex_unref (parser->regex_ezx_error);
g_regex_unref (parser->regex_unknown_error);
g_regex_unref (parser->regex_connect_failed);
+ g_regex_unref (parser->regex_na);
if (parser->regex_custom_successful)
g_regex_unref (parser->regex_custom_successful);