libmm-glib: allow getting properties used when the bearer was created
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#include "mm-helpers.h"
|
#include "mm-helpers.h"
|
||||||
#include "mm-bearer.h"
|
#include "mm-bearer.h"
|
||||||
|
#include "mm-modem.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mm_bearer_get_path:
|
* mm_bearer_get_path:
|
||||||
@@ -372,6 +373,180 @@ mm_bearer_dup_ipv6_config (MMBearer *self)
|
|||||||
return config;
|
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:
|
* mm_bearer_connect:
|
||||||
* @self: A #MMBearer.
|
* @self: A #MMBearer.
|
||||||
|
@@ -36,6 +36,14 @@ G_BEGIN_DECLS
|
|||||||
*/
|
*/
|
||||||
typedef struct _MMBearerIpConfig MMBearerIpConfig;
|
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;
|
typedef MmGdbusBearer MMBearer;
|
||||||
#define MM_TYPE_BEARER(o) MM_GDBUS_TYPE_BEARER (o)
|
#define MM_TYPE_BEARER(o) MM_GDBUS_TYPE_BEARER (o)
|
||||||
#define MM_BEARER(o) MM_GDBUS_BEARER(o)
|
#define MM_BEARER(o) MM_GDBUS_BEARER(o)
|
||||||
@@ -72,6 +80,22 @@ gboolean mm_bearer_disconnect_sync (MMBearer *self,
|
|||||||
GCancellable *cancellable,
|
GCancellable *cancellable,
|
||||||
GError **error);
|
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);
|
const MMBearerIpConfig *mm_bearer_get_ipv4_config (MMBearer *self);
|
||||||
MMBearerIpConfig *mm_bearer_dup_ipv4_config (MMBearer *self);
|
MMBearerIpConfig *mm_bearer_dup_ipv4_config (MMBearer *self);
|
||||||
const MMBearerIpConfig *mm_bearer_get_ipv6_config (MMBearer *self);
|
const MMBearerIpConfig *mm_bearer_get_ipv6_config (MMBearer *self);
|
||||||
|
Reference in New Issue
Block a user