diff options
Diffstat (limited to 'drivers/atmodem/sim.c')
-rw-r--r-- | drivers/atmodem/sim.c | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c index f3a204d0..6cb37fe7 100644 --- a/drivers/atmodem/sim.c +++ b/drivers/atmodem/sim.c @@ -234,9 +234,9 @@ static void at_cnum_cb(gboolean ok, GAtResult *result, gpointer user_data) { struct cb_data *cbd = user_data; GAtResultIter iter; - ofono_numbers_cb_t cb = cbd->cb; + ofono_own_numbers_cb_t cb = cbd->cb; struct ofono_error error; - struct ofono_phone_number *numbers; + struct ofono_own_number *numbers; int count; const char *str; @@ -253,7 +253,7 @@ static void at_cnum_cb(gboolean ok, GAtResult *result, gpointer user_data) for (count = 0; g_at_result_iter_next(&iter, "+CNUM:"); count++); ofono_debug("Got %i elements", count); - numbers = g_try_new0(struct ofono_phone_number, count); + numbers = g_try_new0(struct ofono_own_number, count); if (!numbers) { DECLARE_FAILURE(e); cb(&e, 0, NULL, cbd->data); @@ -262,16 +262,30 @@ static void at_cnum_cb(gboolean ok, GAtResult *result, gpointer user_data) g_at_result_iter_init(&iter, result); - for (count = 0; g_at_result_iter_next(&iter, "+CNUM:"); count++) { + count = 0; + while (g_at_result_iter_next(&iter, "+CNUM")) { + /* Skip alnum */ g_at_result_iter_skip_next(&iter); if (!g_at_result_iter_next_string(&iter, &str)) continue; - g_strlcpy(numbers[count].number, str, + g_strlcpy(numbers[count].phone_number.number, + str[0] == '+' ? str+1 : str, OFONO_MAX_PHONE_NUMBER_LENGTH); - g_at_result_iter_next_number(&iter, &numbers[count].type); + g_at_result_iter_next_number(&iter, + &numbers[count].phone_number.type); + + numbers[count].speed = -1; + numbers[count].service = -1; + numbers[count].itc = -1; + + g_at_result_iter_skip_next(&iter); + g_at_result_iter_next_number(&iter, &numbers[count].service); + g_at_result_iter_next_number(&iter, &numbers[count].itc); + + count++; } cb(&error, count, numbers, cbd->data); @@ -279,8 +293,8 @@ static void at_cnum_cb(gboolean ok, GAtResult *result, gpointer user_data) g_free(numbers); } -static void at_read_msisdn(struct ofono_modem *modem, ofono_numbers_cb_t cb, - void *data) +static void at_read_msisdn(struct ofono_modem *modem, ofono_own_numbers_cb_t cb, + void *data) { struct at_data *at = ofono_modem_userdata(modem); struct cb_data *cbd = cb_data_new(modem, cb, data); |