diff options
Diffstat (limited to 'src/mm-broadband-modem-mbim.c')
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 90 |
1 files changed, 13 insertions, 77 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index a578aba1..baae397b 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -1962,93 +1962,29 @@ modem_reset (MMIfaceModem *_self, /* Create Bearer (Modem interface) */ static MMBaseBearer * -modem_create_bearer_finish (MMIfaceModem *self, - GAsyncResult *res, - GError **error) +modem_create_bearer_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error) { return g_task_propagate_pointer (G_TASK (res), error); } -typedef struct { - guint32 session_id; - gboolean found; -} FindSessionId; - static void -bearer_list_session_id_foreach (MMBaseBearer *bearer, - gpointer user_data) +modem_create_bearer (MMIfaceModem *self, + MMBearerProperties *properties, + GAsyncReadyCallback callback, + gpointer user_data) { - FindSessionId *ctx = user_data; - - if (!ctx->found && - MM_IS_BEARER_MBIM (bearer) && - mm_bearer_mbim_get_session_id (MM_BEARER_MBIM (bearer)) == ctx->session_id) - ctx->found = TRUE; -} - -static gint -find_next_bearer_session_id (MMBroadbandModemMbim *self) -{ - MMBearerList *bearer_list; - guint i; - - g_object_get (self, - MM_IFACE_MODEM_BEARER_LIST, &bearer_list, - NULL); - - if (!bearer_list) - return 0; - - for (i = 0; i <= 255; i++) { - FindSessionId ctx; - - ctx.session_id = i; - ctx.found = FALSE; - - mm_bearer_list_foreach (bearer_list, - bearer_list_session_id_foreach, - &ctx); - - if (!ctx.found) { - g_object_unref (bearer_list); - return (gint)i; - } - } - - /* no valid session id found */ - g_object_unref (bearer_list); - return -1; -} - -static void -modem_create_bearer (MMIfaceModem *_self, - MMBearerProperties *properties, - GAsyncReadyCallback callback, - gpointer user_data) -{ - MMBroadbandModemMbim *self = MM_BROADBAND_MODEM_MBIM (_self); MMBaseBearer *bearer; - GTask *task; - gint session_id; - - task = g_task_new (self, NULL, callback, user_data); + GTask *task; - /* Find a new session ID */ - session_id = find_next_bearer_session_id (self); - if (session_id < 0) { - g_task_return_new_error (task, - MM_CORE_ERROR, - MM_CORE_ERROR_FAILED, - "Not enough session IDs"); - g_object_unref (task); - return; - } + /* Note: the session id to be used by the bearer will always be 0 + * for non-multiplexed sessions, bound to the non-VLAN-tagged traffic + * managed by the master network interface */ - /* We just create a MMBearerMbim */ + task = g_task_new (self, NULL, callback, user_data); mm_obj_dbg (self, "creating MBIM bearer in MBIM modem"); - bearer = mm_bearer_mbim_new (self, - properties, - (guint)session_id); + bearer = mm_bearer_mbim_new (MM_BROADBAND_MODEM_MBIM (self), properties); g_task_return_pointer (task, bearer, g_object_unref); g_object_unref (task); } |