Make primary context ids persistent
authorDenis Kenzior <denkenz@gmail.com>
Thu, 7 Jan 2010 20:43:21 +0000 (14:43 -0600)
committerDenis Kenzior <denkenz@gmail.com>
Thu, 7 Jan 2010 20:43:21 +0000 (14:43 -0600)
src/gprs.c

index 801984c..4e2f6ac 100644 (file)
@@ -1740,6 +1740,13 @@ static gboolean load_context(struct ofono_gprs *gprs, const char *group)
        gboolean ret = FALSE;
        struct pri_context *context;
        enum gprs_context_type type;
+       unsigned int id;
+
+       if (sscanf(group, "primarycontext%d", &id) != 1)
+               goto error;
+
+       if (id < 1 || id > MAX_CONTEXTS)
+               goto error;
 
        if ((name = g_key_file_get_string(gprs->settings, group,
                                        "Name", NULL)) == NULL)
@@ -1787,6 +1794,8 @@ static gboolean load_context(struct ofono_gprs *gprs, const char *group)
        if ((context = pri_context_create(gprs, name, type)) == NULL)
                goto error;
 
+       idmap_take(gprs->pid_map, id);
+       context->id = id;
        strcpy(context->context.username, username);
        strcpy(context->context.password, password);
        strcpy(context->context.apn, apn);
@@ -1794,6 +1803,8 @@ static gboolean load_context(struct ofono_gprs *gprs, const char *group)
        if (context_dbus_register(context) == FALSE)
                goto error;
 
+       gprs->last_context_id = id;
+
        gprs->contexts = g_slist_append(gprs->contexts, context);
        ret = TRUE;