diff options
author | Dragos Tatulea <dragos@endocode.com> | 2016-03-17 18:02:17 +0100 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2016-03-17 12:27:17 -0500 |
commit | 02dcc2f36e7e54ea7f6fef1f86b7ca19d4ead938 (patch) | |
tree | dc36339353b0fe9a30e76272873d7657dcd8fa56 /src | |
parent | 6504e7090e788fd79c07f7fa03405270e2f7249c (diff) | |
download | android_external_ofono-02dcc2f36e7e54ea7f6fef1f86b7ca19d4ead938.tar.gz android_external_ofono-02dcc2f36e7e54ea7f6fef1f86b7ca19d4ead938.tar.bz2 android_external_ofono-02dcc2f36e7e54ea7f6fef1f86b7ca19d4ead938.zip |
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')
-rw-r--r-- | src/gprs.c | 16 |
1 files changed, 13 insertions, 3 deletions
@@ -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; |