diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2010-10-27 14:43:32 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2010-10-27 14:43:32 +0200 |
commit | c409dacbc8744269b6a92a12ece88e4fa43df2e8 (patch) | |
tree | 9c951d35be533bd9e790cbaf4effbc391f793b1d /src | |
parent | a46fbe493eac2769a9d7ba98c7a8e078b346c8e0 (diff) | |
download | ofono-c409dacbc8744269b6a92a12ece88e4fa43df2e8.tar.bz2 |
gprs: Add support for selecting GPRS context drivers based on types
Diffstat (limited to 'src')
-rw-r--r-- | src/gprs.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -780,6 +780,7 @@ static gboolean assign_context(struct pri_context *ctx) { struct idmap *cidmap = ctx->gprs->cid_map; unsigned int cid_min; + GSList *l; if (cidmap == NULL) return FALSE; @@ -790,12 +791,21 @@ static gboolean assign_context(struct pri_context *ctx) if (ctx->context.cid == 0) return FALSE; - ctx->context_driver = g_slist_nth_data(ctx->gprs->context_drivers, - ctx->context.cid - cid_min); + for (l = ctx->gprs->context_drivers; l; l = l->next) { + struct ofono_gprs_context *gc = l->data; - ctx->context_driver->inuse = TRUE; + if (gc->inuse == TRUE) + continue; - return TRUE; + if (gc->type == OFONO_GPRS_CONTEXT_TYPE_INVALID || + gc->type == ctx->type) { + ctx->context_driver = gc; + ctx->context_driver->inuse = TRUE; + return TRUE; + } + } + + return FALSE; } static DBusMessage *pri_set_property(DBusConnection *conn, |