---
 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

Reply via email to