diff options
author | Denis Kenzior <denis.kenzior@intel.com> | 2009-10-23 15:16:56 -0500 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2009-10-23 17:05:56 -0500 |
commit | 722204ae6c5cc97d0b08fade3a4893cd31edeca2 (patch) | |
tree | f6518405bc6a7956e5c744a70964b8a1d7d546c8 | |
parent | 7faa34d23541c9a6ac6bfe89921e934cf9ca0135 (diff) | |
download | ofono-722204ae6c5cc97d0b08fade3a4893cd31edeca2.tar.bz2 |
Fix: Connect up gprs and gprs_context
-rw-r--r-- | include/gprs.h | 3 | ||||
-rw-r--r-- | 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 <ofono/types.h> 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 } @@ -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)) |