iface-modem: return a MMBearer reference when creating a new bearer
Not just the bearer path.
This commit is contained in:
@@ -124,19 +124,19 @@ bearer_status_changed (MMBearer *bearer,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gchar *
|
MMBearer *
|
||||||
mm_iface_modem_create_bearer_finish (MMIfaceModem *self,
|
mm_iface_modem_create_bearer_finish (MMIfaceModem *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
const gchar *path;
|
MMBearer *bearer;
|
||||||
|
|
||||||
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
|
if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
path = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
|
bearer = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
|
||||||
|
|
||||||
return g_strdup (path);
|
return g_object_ref (bearer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -168,11 +168,9 @@ create_bearer_ready (MMIfaceModem *self,
|
|||||||
"notify::" MM_BEARER_STATUS,
|
"notify::" MM_BEARER_STATUS,
|
||||||
(GCallback)bearer_status_changed,
|
(GCallback)bearer_status_changed,
|
||||||
self);
|
self);
|
||||||
/* It is safe to set the static path here because we're not completing
|
|
||||||
* in idle */
|
|
||||||
g_simple_async_result_set_op_res_gpointer (simple,
|
g_simple_async_result_set_op_res_gpointer (simple,
|
||||||
(gchar *)mm_bearer_get_path (bearer),
|
g_object_ref (bearer),
|
||||||
NULL);
|
g_object_unref);
|
||||||
}
|
}
|
||||||
g_object_unref (bearer);
|
g_object_unref (bearer);
|
||||||
g_object_unref (list);
|
g_object_unref (list);
|
||||||
@@ -184,6 +182,7 @@ create_bearer_ready (MMIfaceModem *self,
|
|||||||
|
|
||||||
void
|
void
|
||||||
mm_iface_modem_create_bearer (MMIfaceModem *self,
|
mm_iface_modem_create_bearer (MMIfaceModem *self,
|
||||||
|
gboolean force,
|
||||||
MMCommonBearerProperties *properties,
|
MMCommonBearerProperties *properties,
|
||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
@@ -195,6 +194,7 @@ mm_iface_modem_create_bearer (MMIfaceModem *self,
|
|||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (mm_bearer_list_get_count (list) == mm_bearer_list_get_max (list)) {
|
if (mm_bearer_list_get_count (list) == mm_bearer_list_get_max (list)) {
|
||||||
|
if (!force) {
|
||||||
g_simple_async_report_error_in_idle (
|
g_simple_async_report_error_in_idle (
|
||||||
G_OBJECT (self),
|
G_OBJECT (self),
|
||||||
callback,
|
callback,
|
||||||
@@ -203,7 +203,15 @@ mm_iface_modem_create_bearer (MMIfaceModem *self,
|
|||||||
MM_CORE_ERROR_TOO_MANY,
|
MM_CORE_ERROR_TOO_MANY,
|
||||||
"Cannot add new bearer: already reached maximum (%u)",
|
"Cannot add new bearer: already reached maximum (%u)",
|
||||||
mm_bearer_list_get_count (list));
|
mm_bearer_list_get_count (list));
|
||||||
} else {
|
g_object_unref (list);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We are told to force the creation of the new bearer.
|
||||||
|
* We'll remove all existing bearers, and then go on creating the new one */
|
||||||
|
mm_bearer_list_delete_all_bearers (list);
|
||||||
|
}
|
||||||
|
|
||||||
MM_IFACE_MODEM_GET_INTERFACE (self)->create_bearer (
|
MM_IFACE_MODEM_GET_INTERFACE (self)->create_bearer (
|
||||||
self,
|
self,
|
||||||
properties,
|
properties,
|
||||||
@@ -212,8 +220,6 @@ mm_iface_modem_create_bearer (MMIfaceModem *self,
|
|||||||
callback,
|
callback,
|
||||||
user_data,
|
user_data,
|
||||||
mm_iface_modem_create_bearer));
|
mm_iface_modem_create_bearer));
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (list);
|
g_object_unref (list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,17 +228,17 @@ handle_create_bearer_ready (MMIfaceModem *self,
|
|||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
DbusCallContext *ctx)
|
DbusCallContext *ctx)
|
||||||
{
|
{
|
||||||
gchar *bearer_path;
|
MMBearer *bearer;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
bearer_path = mm_iface_modem_create_bearer_finish (self, res, &error);
|
bearer = mm_iface_modem_create_bearer_finish (self, res, &error);
|
||||||
if (!bearer_path)
|
if (!bearer)
|
||||||
g_dbus_method_invocation_take_error (ctx->invocation, error);
|
g_dbus_method_invocation_take_error (ctx->invocation, error);
|
||||||
else {
|
else {
|
||||||
mm_gdbus_modem_complete_create_bearer (ctx->skeleton,
|
mm_gdbus_modem_complete_create_bearer (ctx->skeleton,
|
||||||
ctx->invocation,
|
ctx->invocation,
|
||||||
bearer_path);
|
mm_bearer_get_path (bearer));
|
||||||
g_free (bearer_path);
|
g_object_unref (bearer);
|
||||||
}
|
}
|
||||||
dbus_call_context_free (ctx);
|
dbus_call_context_free (ctx);
|
||||||
}
|
}
|
||||||
@@ -252,6 +258,7 @@ handle_create_bearer (MmGdbusModem *skeleton,
|
|||||||
} else {
|
} else {
|
||||||
mm_iface_modem_create_bearer (
|
mm_iface_modem_create_bearer (
|
||||||
self,
|
self,
|
||||||
|
FALSE, /* don't force when request comes from DBus */
|
||||||
properties,
|
properties,
|
||||||
(GAsyncReadyCallback)handle_create_bearer_ready,
|
(GAsyncReadyCallback)handle_create_bearer_ready,
|
||||||
dbus_call_context_new (skeleton,
|
dbus_call_context_new (skeleton,
|
||||||
|
@@ -325,10 +325,11 @@ gboolean mm_iface_modem_set_allowed_bands_finish (MMIfaceModem *self,
|
|||||||
|
|
||||||
/* Allow creating bearers */
|
/* Allow creating bearers */
|
||||||
void mm_iface_modem_create_bearer (MMIfaceModem *self,
|
void mm_iface_modem_create_bearer (MMIfaceModem *self,
|
||||||
|
gboolean force,
|
||||||
MMCommonBearerProperties *properties,
|
MMCommonBearerProperties *properties,
|
||||||
GAsyncReadyCallback callback,
|
GAsyncReadyCallback callback,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
gchar *mm_iface_modem_create_bearer_finish (MMIfaceModem *self,
|
MMBearer *mm_iface_modem_create_bearer_finish (MMIfaceModem *self,
|
||||||
GAsyncResult *res,
|
GAsyncResult *res,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user