aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmm-glib/mm-bearer.c175
-rw-r--r--libmm-glib/mm-bearer.h24
2 files changed, 199 insertions, 0 deletions
diff --git a/libmm-glib/mm-bearer.c b/libmm-glib/mm-bearer.c
index 702fe7c1..28808584 100644
--- a/libmm-glib/mm-bearer.c
+++ b/libmm-glib/mm-bearer.c
@@ -22,6 +22,7 @@
#include "mm-helpers.h"
#include "mm-bearer.h"
+#include "mm-modem.h"
/**
* mm_bearer_get_path:
@@ -372,6 +373,180 @@ mm_bearer_dup_ipv6_config (MMBearer *self)
return config;
}
+struct _MMBearerProperties {
+ gchar *apn;
+ gchar *ip_type;
+ gboolean allow_roaming;
+ gchar *user;
+ gchar *password;
+ gchar *number;
+};
+
+void
+mm_bearer_properties_free (MMBearerProperties *properties)
+{
+ if (!properties)
+ return;
+
+ g_free (properties->apn);
+ g_free (properties->ip_type);
+ g_free (properties->user);
+ g_free (properties->password);
+ g_free (properties->number);
+ g_slice_free (MMBearerProperties, properties);
+}
+
+static MMBearerProperties *
+create_properties_struct (GVariant *variant)
+{
+ GVariantIter iter;
+ const gchar *key;
+ GVariant *value;
+ MMBearerProperties *c;
+
+ c = g_slice_new0 (MMBearerProperties);
+
+ g_variant_iter_init (&iter, variant);
+ while (g_variant_iter_loop (&iter, "{sv}", &key, &value)) {
+ if (g_str_equal (key, MM_BEARER_PROPERTY_APN)) {
+ g_warn_if_fail (c->apn == NULL);
+ c->apn = g_variant_dup_string (value, NULL);
+ } else if (g_str_equal (key, MM_BEARER_PROPERTY_IP_TYPE)) {
+ g_warn_if_fail (c->ip_type == NULL);
+ c->ip_type = g_variant_dup_string (value, NULL);
+ } else if (g_str_equal (key, MM_BEARER_PROPERTY_ALLOW_ROAMING)) {
+ c->allow_roaming = g_variant_get_boolean (value);
+ } else if (g_str_equal (key, MM_BEARER_PROPERTY_USER)) {
+ g_warn_if_fail (c->user == NULL);
+ c->user = g_variant_dup_string (value, NULL);
+ } else if (g_str_equal (key, MM_BEARER_PROPERTY_PASSWORD)) {
+ g_warn_if_fail (c->password == NULL);
+ c->password = g_variant_dup_string (value, NULL);
+ } else if (g_str_equal (key, MM_BEARER_PROPERTY_NUMBER)) {
+ g_warn_if_fail (c->number == NULL);
+ c->number = g_variant_dup_string (value, NULL);
+ } else
+ g_warning ("Unexpected property '%s' found in Bearer properties", key);
+ }
+
+ return c;
+}
+
+const gchar *
+mm_bearer_properties_get_apn (const MMBearerProperties *properties)
+{
+ return properties->apn;
+}
+
+gchar *
+mm_bearer_properties_dup_apn (const MMBearerProperties *properties)
+{
+ return g_strdup (properties->apn);
+}
+
+const gchar *
+mm_bearer_properties_get_ip_type (const MMBearerProperties *properties)
+{
+ return properties->ip_type;
+}
+
+gchar *
+mm_bearer_properties_dup_ip_type (const MMBearerProperties *properties)
+{
+ return g_strdup (properties->ip_type);
+}
+
+const gchar *
+mm_bearer_properties_get_user (const MMBearerProperties *properties)
+{
+ return properties->user;
+}
+
+gchar *
+mm_bearer_properties_dup_user (const MMBearerProperties *properties)
+{
+ return g_strdup (properties->user);
+}
+
+const gchar *
+mm_bearer_properties_get_password (const MMBearerProperties *properties)
+{
+ return properties->password;
+}
+
+gchar *
+mm_bearer_properties_dup_password (const MMBearerProperties *properties)
+{
+ return g_strdup (properties->password);
+}
+
+const gchar *
+mm_bearer_properties_get_number (const MMBearerProperties *properties)
+{
+ return properties->number;
+}
+
+gchar *
+mm_bearer_properties_dup_number (const MMBearerProperties *properties)
+{
+ return g_strdup (properties->number);
+}
+
+gboolean
+mm_bearer_properties_get_allow_roaming (const MMBearerProperties *properties)
+{
+ return properties->allow_roaming;
+}
+
+#define MM_BEARER_PROPERTIES_DATA "bearer-properties"
+
+static void
+properties_changed (MMBearer *self)
+{
+ g_object_set_data (G_OBJECT (self), MM_BEARER_PROPERTIES_DATA, NULL);
+}
+
+const MMBearerProperties *
+mm_bearer_get_properties (MMBearer *self)
+{
+ MMBearerProperties *properties;
+
+ g_return_val_if_fail (MM_IS_BEARER (self), NULL);
+
+ properties = g_object_get_data (G_OBJECT (self),
+ MM_BEARER_PROPERTIES_DATA);
+ if (!properties) {
+ properties = create_properties_struct (
+ mm_gdbus_bearer_get_properties (MM_GDBUS_BEARER (self)));
+
+ g_object_set_data_full (G_OBJECT (self),
+ MM_BEARER_PROPERTIES_DATA,
+ properties,
+ (GDestroyNotify)mm_bearer_properties_free);
+ g_signal_connect (self,
+ "notify::properties",
+ G_CALLBACK (properties_changed),
+ NULL);
+ }
+
+ return properties;
+}
+
+MMBearerProperties *
+mm_bearer_dup_properties (MMBearer *self)
+{
+ MMBearerProperties *properties;
+ GVariant *variant;
+
+ g_return_val_if_fail (MM_IS_BEARER (self), NULL);
+
+ variant = mm_gdbus_bearer_dup_properties (MM_GDBUS_BEARER (self));
+ properties = create_properties_struct (variant);
+ g_variant_unref (variant);
+
+ return properties;
+}
+
/**
* mm_bearer_connect:
* @self: A #MMBearer.
diff --git a/libmm-glib/mm-bearer.h b/libmm-glib/mm-bearer.h
index 988cc8d5..89c3345d 100644
--- a/libmm-glib/mm-bearer.h
+++ b/libmm-glib/mm-bearer.h
@@ -36,6 +36,14 @@ G_BEGIN_DECLS
*/
typedef struct _MMBearerIpConfig MMBearerIpConfig;
+/**
+ * MMBearerProperties:
+ *
+ * Addressing details for assignment to the data interface.
+ * This is an opaque struct.
+ */
+typedef struct _MMBearerProperties MMBearerProperties;
+
typedef MmGdbusBearer MMBearer;
#define MM_TYPE_BEARER(o) MM_GDBUS_TYPE_BEARER (o)
#define MM_BEARER(o) MM_GDBUS_BEARER(o)
@@ -72,6 +80,22 @@ gboolean mm_bearer_disconnect_sync (MMBearer *self,
GCancellable *cancellable,
GError **error);
+const MMBearerProperties *mm_bearer_get_properties (MMBearer *self);
+MMBearerProperties *mm_bearer_dup_properties (MMBearer *self);
+
+const gchar *mm_bearer_properties_get_apn (const MMBearerProperties *properties);
+gchar *mm_bearer_properties_dup_apn (const MMBearerProperties *properties);
+const gchar *mm_bearer_properties_get_ip_type (const MMBearerProperties *properties);
+gchar *mm_bearer_properties_dup_ip_type (const MMBearerProperties *properties);
+const gchar *mm_bearer_properties_get_user (const MMBearerProperties *properties);
+gchar *mm_bearer_properties_dup_user (const MMBearerProperties *properties);
+const gchar *mm_bearer_properties_get_password (const MMBearerProperties *properties);
+gchar *mm_bearer_properties_dup_password (const MMBearerProperties *properties);
+const gchar *mm_bearer_properties_get_number (const MMBearerProperties *properties);
+gchar *mm_bearer_properties_dup_number (const MMBearerProperties *properties);
+gboolean mm_bearer_properties_get_allow_roaming (const MMBearerProperties *properties);
+void mm_bearer_properties_free (MMBearerProperties *properties);
+
const MMBearerIpConfig *mm_bearer_get_ipv4_config (MMBearer *self);
MMBearerIpConfig *mm_bearer_dup_ipv4_config (MMBearer *self);
const MMBearerIpConfig *mm_bearer_get_ipv6_config (MMBearer *self);