diff options
Diffstat (limited to 'src/mm-broadband-modem.c')
-rw-r--r-- | src/mm-broadband-modem.c | 148 |
1 files changed, 20 insertions, 128 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index fc006015..2af4db6b 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -31,6 +31,7 @@ #include "mm-iface-modem.h" #include "mm-iface-modem-3gpp.h" #include "mm-bearer.h" +#include "mm-bearer-list.h" #include "mm-sim.h" #include "mm-log.h" #include "mm-modem-helpers.h" @@ -53,6 +54,7 @@ enum { PROP_MODEM_DBUS_SKELETON, PROP_MODEM_3GPP_DBUS_SKELETON, PROP_MODEM_SIM, + PROP_MODEM_BEARER_LIST, PROP_MODEM_STATE, PROP_MODEM_CURRENT_CAPABILITIES, PROP_MODEM_3GPP_REGISTRATION_STATE, @@ -63,10 +65,10 @@ struct _MMBroadbandModemPrivate { GObject *modem_dbus_skeleton; GObject *modem_3gpp_dbus_skeleton; MMSim *modem_sim; + MMBearerList *modem_bearer_list; MMModemState modem_state; MMModemCapability modem_current_capabilities; MMModem3gppRegistrationState modem_3gpp_registration_state; - GList *modem_bearers; /* Modem helpers */ MMModemCharset current_charset; @@ -83,24 +85,20 @@ struct _MMBroadbandModemPrivate { /*****************************************************************************/ /* CREATE BEARER */ -static gchar * +static MMBearer * modem_create_bearer_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - GObject *bearer; - gchar *bearer_path = NULL; + MMBearer *bearer; if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error)) return NULL; bearer = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); - g_object_get (bearer, - MM_BEARER_PATH, &bearer_path, - NULL); + mm_dbg ("New bearer created at DBus path '%s'", mm_bearer_get_path (bearer)); - mm_dbg ("New bearer created at DBus path '%s'", bearer_path); - return bearer_path; + return g_object_ref (bearer); } static void @@ -109,7 +107,6 @@ modem_create_bearer (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data) { - MMBroadbandModem *broadband = MM_BROADBAND_MODEM (self); GSimpleAsyncResult *result; MMBearer *bearer; GError *error = NULL; @@ -129,129 +126,19 @@ modem_create_bearer (MMIfaceModem *self, return; } - /* Store the bearer */ - broadband->priv->modem_bearers = g_list_prepend (broadband->priv->modem_bearers, - bearer); - /* Set a new ref to the bearer object as result */ result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, modem_create_bearer); g_simple_async_result_set_op_res_gpointer (result, - g_object_ref (bearer), + bearer, (GDestroyNotify)g_object_unref); g_simple_async_result_complete_in_idle (result); g_object_unref (result); } /*****************************************************************************/ -/* DELETE BEARER */ - -static gboolean -modem_delete_bearer_finish (MMIfaceModem *self, - GAsyncResult *res, - GError **error) -{ - return !g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error); -} - -static void -modem_delete_bearer (MMIfaceModem *self, - const gchar *path, - GAsyncReadyCallback callback, - gpointer user_data) -{ - MMBroadbandModem *broadband = MM_BROADBAND_MODEM (self); - GList *l; - - if (!g_str_has_prefix (path, MM_DBUS_BEARER_PREFIX)) { - g_simple_async_report_error_in_idle ( - G_OBJECT (self), - callback, - user_data, - MM_CORE_ERROR, - MM_CORE_ERROR_INVALID_ARGS, - "Cannot delete bearer: invalid path '%s'", - path); - return; - } - - for (l = broadband->priv->modem_bearers; l; l = g_list_next (l)) { - if (g_str_equal (path, mm_bearer_get_path (MM_BEARER (l->data)))) { - GSimpleAsyncResult *result; - - g_object_unref (l->data); - broadband->priv->modem_bearers = - g_list_delete_link (broadband->priv->modem_bearers, l); - - /* Complete successfully */ - mm_dbg ("Bearer at '%s' deleted", path); - result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - modem_delete_bearer); - g_simple_async_result_set_op_res_gboolean (result, TRUE); - g_simple_async_result_complete_in_idle (result); - g_object_unref (result); - return; - } - } - - g_simple_async_report_error_in_idle ( - G_OBJECT (self), - callback, - user_data, - MM_CORE_ERROR, - MM_CORE_ERROR_INVALID_ARGS, - "Cannot delete bearer: path '%s' not found", - path); -} - -/*****************************************************************************/ -/* LIST BEARERS */ - -static GStrv -modem_list_bearers_finish (MMIfaceModem *self, - GAsyncResult *res, - GError **error) -{ - MMBroadbandModem *broadband = MM_BROADBAND_MODEM (self); - GStrv path_list = NULL; - GList *l; - guint i; - - path_list = g_new0 (gchar *, - 1 + g_list_length (broadband->priv->modem_bearers)); - - for (i = 0, l = broadband->priv->modem_bearers; l; l = g_list_next (l)) { - path_list[i++] = g_strdup (mm_bearer_get_path (MM_BEARER (l->data))); - } - - return path_list; -} - -static void -modem_list_bearers (MMIfaceModem *self, - GAsyncReadyCallback callback, - gpointer user_data) -{ - - GSimpleAsyncResult *result; - - /* Complete successfully, we'll build the result in finish() */ - result = g_simple_async_result_new (G_OBJECT (self), - callback, - user_data, - modem_list_bearers); - g_simple_async_result_set_op_res_gboolean (result, TRUE); - g_simple_async_result_complete_in_idle (result); - g_object_unref (result); -} - - - -/*****************************************************************************/ /* CAPABILITIES */ typedef struct { @@ -2581,6 +2468,9 @@ set_property (GObject *object, case PROP_MODEM_SIM: self->priv->modem_sim = g_value_dup_object (value); break; + case PROP_MODEM_BEARER_LIST: + self->priv->modem_bearer_list = g_value_dup_object (value); + break; case PROP_MODEM_STATE: self->priv->modem_state = g_value_get_enum (value); break; @@ -2614,6 +2504,9 @@ get_property (GObject *object, case PROP_MODEM_SIM: g_value_set_object (value, self->priv->modem_sim); break; + case PROP_MODEM_BEARER_LIST: + g_value_set_object (value, self->priv->modem_bearer_list); + break; case PROP_MODEM_STATE: g_value_set_enum (value, self->priv->modem_state); break; @@ -2670,9 +2563,8 @@ dispose (GObject *object) if (self->priv->modem_sim) g_clear_object (&self->priv->modem_sim); - g_list_foreach (self->priv->modem_bearers, (GFunc)g_object_unref, NULL); - g_list_free (self->priv->modem_bearers); - self->priv->modem_bearers = NULL; + if (self->priv->modem_bearer_list) + g_clear_object (&self->priv->modem_bearer_list); G_OBJECT_CLASS (mm_broadband_modem_parent_class)->dispose (object); } @@ -2707,10 +2599,6 @@ iface_modem_init (MMIfaceModem *iface) iface->modem_charset_finish = modem_charset_finish; iface->create_bearer = modem_create_bearer; iface->create_bearer_finish = modem_create_bearer_finish; - iface->delete_bearer = modem_delete_bearer; - iface->delete_bearer_finish = modem_delete_bearer_finish; - iface->list_bearers = modem_list_bearers; - iface->list_bearers_finish = modem_list_bearers_finish; } static void @@ -2779,6 +2667,10 @@ mm_broadband_modem_class_init (MMBroadbandModemClass *klass) MM_IFACE_MODEM_SIM); g_object_class_override_property (object_class, + PROP_MODEM_BEARER_LIST, + MM_IFACE_MODEM_BEARER_LIST); + + g_object_class_override_property (object_class, PROP_MODEM_STATE, MM_IFACE_MODEM_STATE); |