diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-11-01 15:44:18 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-11-01 15:50:12 +0100 |
commit | 1b3114a0f9ca28273e1446535b73d5b83c54c6cf (patch) | |
tree | 65de3b859136c0ec27f3ff0501665aac6e025053 | |
parent | 04b52d590f9c47316e8eca9eeccb8084991f2f55 (diff) | |
download | ModemManager-1b3114a0f9ca28273e1446535b73d5b83c54c6cf.tar.gz |
modem-helpers: handle +CGDCONT=? replies with single context
https://bugzilla.gnome.org/show_bug.cgi?id=708983
-rw-r--r-- | src/mm-modem-helpers.c | 21 | ||||
-rw-r--r-- | src/tests/test-modem-helpers.c | 15 |
2 files changed, 25 insertions, 11 deletions
diff --git a/src/mm-modem-helpers.c b/src/mm-modem-helpers.c index 9c86ebc25..a295dc3e1 100644 --- a/src/mm-modem-helpers.c +++ b/src/mm-modem-helpers.c @@ -764,7 +764,7 @@ mm_3gpp_parse_cgdcont_test_response (const gchar *response, return NULL; } - r = g_regex_new ("\\+CGDCONT:\\s*\\((\\d+)-(\\d+)\\),\\(?\"(\\S+)\"", + r = g_regex_new ("\\+CGDCONT:\\s*\\((\\d+)-?(\\d+)?\\),\\(?\"(\\S+)\"", G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, 0, &inner_error); g_assert (r != NULL); @@ -786,19 +786,18 @@ mm_3gpp_parse_cgdcont_test_response (const gchar *response, if (!mm_get_uint_from_match_info (match_info, 1, &min_cid)) mm_warn ("Invalid min CID in CGDCONT=? reply for PDP type '%s'", pdp_type_str); else { - /* Read max CID */ + MM3gppPdpContextFormat *format; + + /* Read max CID: Optional! If no value given, we default to min CID */ if (!mm_get_uint_from_match_info (match_info, 2, &max_cid)) - mm_warn ("Invalid max CID in CGDCONT=? reply for PDP type '%s'", pdp_type_str); - else { - MM3gppPdpContextFormat *format; + max_cid = min_cid; - format = g_slice_new (MM3gppPdpContextFormat); - format->pdp_type = pdp_type; - format->min_cid = min_cid; - format->max_cid = max_cid; + format = g_slice_new (MM3gppPdpContextFormat); + format->pdp_type = pdp_type; + format->min_cid = min_cid; + format->max_cid = max_cid; - list = g_list_prepend (list, format); - } + list = g_list_prepend (list, format); } } diff --git a/src/tests/test-modem-helpers.c b/src/tests/test-modem-helpers.c index 69987872e..b4ff8a2bb 100644 --- a/src/tests/test-modem-helpers.c +++ b/src/tests/test-modem-helpers.c @@ -1707,6 +1707,20 @@ test_cgdcont_test_response_multiple_and_ignore (void *f, gpointer d) test_cgdcont_test_results ("Multiple and Ignore", reply, &expected[0], G_N_ELEMENTS (expected)); } +static void +test_cgdcont_test_response_single_context (void *f, gpointer d) +{ + const gchar *reply = + "+CGDCONT: (1),\"IP\",,,(0),(0)\r\n" + "+CGDCONT: (1),\"IPV6\",,,(0),(0)\r\n"; + static MM3gppPdpContextFormat expected[] = { + { 1, 1, MM_BEARER_IP_FAMILY_IPV4 }, + { 1, 1, MM_BEARER_IP_FAMILY_IPV6 } + }; + + test_cgdcont_test_results ("Single Context", reply, &expected[0], G_N_ELEMENTS (expected)); +} + /*****************************************************************************/ /* Test CGDCONT read responses */ @@ -2443,6 +2457,7 @@ int main (int argc, char **argv) g_test_suite_add (suite, TESTCASE (test_cgdcont_test_response_single, NULL)); g_test_suite_add (suite, TESTCASE (test_cgdcont_test_response_multiple, NULL)); g_test_suite_add (suite, TESTCASE (test_cgdcont_test_response_multiple_and_ignore, NULL)); + g_test_suite_add (suite, TESTCASE (test_cgdcont_test_response_single_context, NULL)); g_test_suite_add (suite, TESTCASE (test_cgdcont_read_response_nokia, NULL)); g_test_suite_add (suite, TESTCASE (test_cgdcont_read_response_samsung, NULL)); |