summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denis.kenzior@intel.com>2009-10-23 15:16:56 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-10-23 17:05:56 -0500
commit722204ae6c5cc97d0b08fade3a4893cd31edeca2 (patch)
treef6518405bc6a7956e5c744a70964b8a1d7d546c8
parent7faa34d23541c9a6ac6bfe89921e934cf9ca0135 (diff)
downloadofono-722204ae6c5cc97d0b08fade3a4893cd31edeca2.tar.bz2
Fix: Connect up gprs and gprs_context
-rw-r--r--include/gprs.h3
-rw-r--r--src/gprs.c25
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
}
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))