--- src/gprs.c | 26 ++++++++++++++++++++++++-- 1 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/src/gprs.c b/src/gprs.c index 04432c3..06d52f3 100644 --- a/src/gprs.c +++ b/src/gprs.c @@ -2863,11 +2863,31 @@ static void provision_contexts(struct ofono_gprs *gprs, const char *mcc, __ofono_gprs_provision_free_settings(settings, count); } +static void ofono_gprs_list_contexts(struct ofono_emulator *em, void *userdata) +{ + struct ofono_gprs *gprs = userdata; + GSList *l; + char buf[256]; + + struct pri_context *ctx; + + for (l = gprs->contexts; l; l = l->next) { + ctx = l->data; + + snprintf(buf, 255, "+CGDCONT: %d,\"%s\",\"%s\"", + ctx->id, gprs_proto_to_string(ctx->context.proto), + ctx->context.apn); + ofono_emulator_send_info(em, buf, FALSE); + } +} + /* Process the usual AT+CGDCONT command */ static void cgdcont_cb(struct ofono_emulator *em, struct ofono_emulator_request *req, void *userdata) { + struct ofono_gprs *gprs = userdata; + struct idmap *cid = gprs->cid_map; struct ofono_error result; char buf[256]; @@ -2876,7 +2896,8 @@ static void cgdcont_cb(struct ofono_emulator *em, switch (ofono_emulator_request_get_type(req)) { case OFONO_EMULATOR_REQUEST_TYPE_SUPPORT: /* TODO: check additionnal parameters */ - snprintf(buf, 255, "+CGDCONT: (1-2),\"IP\",,,(0-2),(0,1,2,3,4)"); + snprintf(buf, 255, "+CGDCONT: (1-%d),\"IP\",,,(0-2),(0,1,2,3,4)", + idmap_get_size(cid)); ofono_emulator_send_info(em, buf, FALSE); result.type = OFONO_ERROR_TYPE_NO_ERROR; ofono_emulator_send_final(em, &result); @@ -2888,7 +2909,8 @@ static void cgdcont_cb(struct ofono_emulator *em, break; case OFONO_EMULATOR_REQUEST_TYPE_QUERY: - result.type = OFONO_ERROR_TYPE_FAILURE; + ofono_gprs_list_contexts(em, gprs); + result.type = OFONO_ERROR_TYPE_NO_ERROR; ofono_emulator_send_final(em, &result); break; case OFONO_EMULATOR_REQUEST_TYPE_SET: -- 1.7.1 _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono