summaryrefslogtreecommitdiff
path: root/src/gprs.c
diff options
context:
space:
mode:
authorDragos Tatulea <dragos@endocode.com>2016-03-17 18:02:17 +0100
committerDenis Kenzior <denkenz@gmail.com>2016-03-17 12:27:17 -0500
commit02dcc2f36e7e54ea7f6fef1f86b7ca19d4ead938 (patch)
treedc36339353b0fe9a30e76272873d7657dcd8fa56 /src/gprs.c
parent6504e7090e788fd79c07f7fa03405270e2f7249c (diff)
downloadofono-02dcc2f36e7e54ea7f6fef1f86b7ca19d4ead938.tar.gz
gprs: custom cid for assign_context
It's optional though. If 0 a cid is picked up automatically from the allowed range.
Diffstat (limited to 'src/gprs.c')
-rw-r--r--src/gprs.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/gprs.c b/src/gprs.c
index 9192e683..99f829f2 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -283,12 +283,17 @@ static unsigned int gprs_cid_alloc(struct ofono_gprs *gprs)
return idmap_alloc(gprs->cid_map);
}
+static void gprs_cid_take(struct ofono_gprs *gprs, unsigned int id)
+{
+ idmap_take(gprs->cid_map, id);
+}
+
static void gprs_cid_release(struct ofono_gprs *gprs, unsigned int id)
{
idmap_put(gprs->cid_map, id);
}
-static gboolean assign_context(struct pri_context *ctx)
+static gboolean assign_context(struct pri_context *ctx, int use_cid)
{
struct idmap *cidmap = ctx->gprs->cid_map;
GSList *l;
@@ -296,7 +301,12 @@ static gboolean assign_context(struct pri_context *ctx)
if (cidmap == NULL)
return FALSE;
- ctx->context.cid = gprs_cid_alloc(ctx->gprs);
+ if (use_cid > 0) {
+ gprs_cid_take(ctx->gprs, use_cid);
+ ctx->context.cid = use_cid;
+ } else
+ ctx->context.cid = gprs_cid_alloc(ctx->gprs);
+
if (ctx->context.cid == 0)
return FALSE;
@@ -1245,7 +1255,7 @@ static DBusMessage *pri_set_property(DBusConnection *conn,
if (ctx->gprs->flags & GPRS_FLAG_ATTACHING)
return __ofono_error_attach_in_progress(msg);
- if (value && assign_context(ctx) == FALSE)
+ if (value && assign_context(ctx, 0) == FALSE)
return __ofono_error_not_implemented(msg);
gc = ctx->context_driver;