From 722204ae6c5cc97d0b08fade3a4893cd31edeca2 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 23 Oct 2009 15:16:56 -0500 Subject: [PATCH] Fix: Connect up gprs and gprs_context --- include/gprs.h | 3 +++ src/gprs.c | 25 +++++++++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/include/gprs.h b/include/gprs.h index 200d47ba..65c34347 100644 --- a/include/gprs.h +++ b/include/gprs.h @@ -29,6 +29,7 @@ extern "C" { #include struct ofono_gprs; +struct ofono_gprs_context; typedef void (*ofono_gprs_status_cb_t)(const struct ofono_error *error, int status, int lac, int ci, @@ -65,6 +66,8 @@ void ofono_gprs_set_data(struct ofono_gprs *gprs, void *data); void *ofono_gprs_get_data(struct ofono_gprs *gprs); void ofono_gprs_set_cid_range(struct ofono_gprs *gprs, int min, int max); +void ofono_gprs_add_context(struct ofono_gprs *gprs, + struct ofono_gprs_context *gc); #ifdef __cplusplus } diff --git a/src/gprs.c b/src/gprs.c index ac656d30..fb08d9a7 100644 --- a/src/gprs.c +++ b/src/gprs.c @@ -358,6 +358,8 @@ static DBusMessage *pri_set_property(DBusConnection *conn, gc->pending = dbus_message_ref(msg); ctx->pending_active = value; + /* TODO: Find lowest unused CID */ + ctx->context.cid = 1; if (value) gc->driver->activate_primary(gc, &ctx->context, @@ -970,6 +972,24 @@ void ofono_gprs_set_cid_range(struct ofono_gprs *gprs, int min, int max) gprs->cid_max = max; } +static void gprs_context_unregister(struct ofono_atom *atom) +{ + struct ofono_gprs_context *gc = __ofono_atom_get_data(atom); + + if (gc->gprs) + gc->gprs->context_driver = NULL; + + gc->gprs = NULL; +} + +void ofono_gprs_add_context(struct ofono_gprs *gprs, + struct ofono_gprs_context *gc) +{ + gprs->context_driver = gc; + + __ofono_atom_register(gc->atom, gprs_context_unregister); +} + void ofono_gprs_context_deactivated(struct ofono_gprs_context *gc, unsigned cid) { DBusConnection *conn = ofono_dbus_get_connection(); @@ -1027,9 +1047,6 @@ static void gprs_context_remove(struct ofono_atom *atom) if (gc->driver && gc->driver->remove) gc->driver->remove(gc); - if (gc->gprs) - gc->gprs->context_driver = NULL; - g_free(gc); } @@ -1051,7 +1068,7 @@ struct ofono_gprs_context *ofono_gprs_context_create(struct ofono_modem *modem, gc->atom = __ofono_modem_add_atom(modem, OFONO_ATOM_TYPE_GPRS_CONTEXT, gprs_context_remove, gc); - for (l = g_drivers; l; l = l->next) { + for (l = g_context_drivers; l; l = l->next) { const struct ofono_gprs_context_driver *drv = l->data; if (g_strcmp0(drv->name, driver))