diff -urN ModemManager-1.4.6/src/mm-iface-modem-3gpp.c ModemManager-1.4.6-x/src/mm-iface-modem-3gpp.c --- ModemManager-1.4.6/src/mm-iface-modem-3gpp.c 2015-03-23 11:10:27.000000000 +0100 +++ ModemManager-1.4.6-x/src/mm-iface-modem-3gpp.c 2015-06-17 01:08:02.249519695 +0200 @@ -383,8 +383,8 @@ else { /* If the modem is already registered and the last time it was asked * automatic registration, we're done */ - if (current_operator_code && - !registration_state_context->manual_registration) { + if (1 || (current_operator_code && + !registration_state_context->manual_registration)) { mm_dbg ("Already registered in network '%s'," " automatic registration not launched...", current_operator_code); diff -urN ModemManager-1.4.6/src/mm-modem-helpers.c ModemManager-1.4.6-x/src/mm-modem-helpers.c --- ModemManager-1.4.6/src/mm-modem-helpers.c 2015-02-07 20:28:58.000000000 +0100 +++ ModemManager-1.4.6-x/src/mm-modem-helpers.c 2015-06-17 00:24:38.233365251 +0200 @@ -331,6 +331,8 @@ /* +CREG: ,, (GSM 07.07 CREG=2 unsolicited) */ #define CREG3 "\\+(CREG|CGREG|CEREG):\\s*0*([0-9]),\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)" +#define CREG11 "\\+(CREG|CGREG|CEREG):\\s*0*([0-9]),\\s*(\"[^\"\\s]*\")\\s*,\\s*(\"[^\"\\s]*\")" + /* +CREG: ,,, (GSM 07.07 solicited and some CREG=2 unsolicited) */ #define CREG4 "\\+(CREG|CGREG|CEREG):\\s*([0-9]),\\s*([0-9])\\s*,\\s*([^,]*)\\s*,\\s*([^,\\s]*)" @@ -350,6 +352,7 @@ /* +CREG: ,,,, (ETSI 27.007 v9.20 CREG=2 unsolicited with RAC) */ #define CREG10 "\\+(CREG|CGREG):\\s*0*([0-9])\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*0*([0-9])\\s*,\\s*([^,\\s]*)" + /* +CEREG: ,,,, (ETSI 27.007 v8.6 CREG=2 unsolicited with RAC) */ #define CEREG1 "\\+(CEREG):\\s*0*([0-9])\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*([^,\\s]*)\\s*,\\s*0*([0-9])" @@ -386,6 +389,14 @@ g_assert (regex); g_ptr_array_add (array, regex); + /* #11 */ + if (solicited) + regex = g_regex_new (CREG11 "$", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + else + regex = g_regex_new ("\\r\\n" CREG11 "\\r\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + g_assert (regex); + g_ptr_array_add (array, regex); + /* #4 */ if (solicited) regex = g_regex_new (CREG4 "$", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); @@ -775,7 +775,7 @@ return NULL; } - r = g_regex_new ("\\+CGDCONT:\\s*\\((\\d+)-?(\\d+)?\\),\\(?\"(\\S+)\"", + r = g_regex_new ("\\+CGDCONT:\\s*\\(\\s*(\\d+)\\s*-?\\s*(\\d+)?\\s*\\)\\s*,\\s*\\(?\"(\\S+)\"", G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, 0, &inner_error); g_assert (r != NULL); @@ -863,7 +863,7 @@ return NULL; list = NULL; - r = g_regex_new ("\\+CGDCONT:\\s*(\\d+)\\s*,([^,\\)]*),([^,\\)]*),([^,\\)]*)", + r = g_regex_new ("\\+CGDCONT:\\s*(\\d+)\\s*,([^, \\)]*)\\s*,([^, \\)]*)\\s*,([^, \\)]*)", G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW, 0, &inner_error); if (r) {