aboutsummaryrefslogtreecommitdiff
path: root/src/mm-broadband-modem.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-broadband-modem.c')
-rw-r--r--src/mm-broadband-modem.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index c733d938..d3892456 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -12860,6 +12860,52 @@ mm_broadband_modem_get_current_charset (MMBroadbandModem *self)
/*****************************************************************************/
+static void
+bearer_count_multiplexed_connected (MMBaseBearer *bearer,
+ guint *count)
+{
+ /* The Multiplexed property is only set if connected, so it's enough to check
+ * that one to see if we're connected and multiplexed */
+ if (mm_gdbus_bearer_get_multiplexed (MM_GDBUS_BEARER (bearer)))
+ *count += 1;
+}
+
+gboolean
+mm_broadband_modem_get_active_multiplexed_bearers (MMBroadbandModem *self,
+ guint *out_current,
+ guint *out_max,
+ GError **error)
+{
+ g_autoptr(MMBearerList) list = NULL;
+ guint max;
+ guint count = 0;
+
+ g_object_get (self,
+ MM_IFACE_MODEM_BEARER_LIST, &list,
+ NULL);
+
+ if (!list) {
+ g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "Bearer list unavailable");
+ return FALSE;
+ }
+
+ max = mm_bearer_list_get_max_active_multiplexed (list);
+
+ mm_bearer_list_foreach (list,
+ (MMBearerListForeachFunc)bearer_count_multiplexed_connected,
+ &count);
+ g_assert (!(!max && count));
+
+ if (out_max)
+ *out_max = max;
+ if (out_current)
+ *out_current = count;
+
+ return TRUE;
+}
+
+/*****************************************************************************/
+
gchar *
mm_broadband_modem_create_device_identifier (MMBroadbandModem *self,
const gchar *ati,