aboutsummaryrefslogtreecommitdiff
path: root/libmm-common
diff options
context:
space:
mode:
Diffstat (limited to 'libmm-common')
-rw-r--r--libmm-common/mm-bearer-properties.c36
-rw-r--r--libmm-common/mm-bearer-properties.h4
-rw-r--r--libmm-common/mm-common-helpers.c22
-rw-r--r--libmm-common/mm-common-helpers.h2
-rw-r--r--libmm-common/mm-simple-connect-properties.c6
-rw-r--r--libmm-common/mm-simple-connect-properties.h30
6 files changed, 65 insertions, 35 deletions
diff --git a/libmm-common/mm-bearer-properties.c b/libmm-common/mm-bearer-properties.c
index cb660fe4..ab7d4408 100644
--- a/libmm-common/mm-bearer-properties.c
+++ b/libmm-common/mm-bearer-properties.c
@@ -33,7 +33,7 @@ struct _MMBearerPropertiesPrivate {
/* APN */
gchar *apn;
/* IP type */
- gchar *ip_type;
+ MMBearerIpFamily ip_type;
/* Number */
gchar *number;
/* User */
@@ -81,12 +81,11 @@ mm_bearer_properties_set_password (MMBearerProperties *self,
void
mm_bearer_properties_set_ip_type (MMBearerProperties *self,
- const gchar *ip_type)
+ MMBearerIpFamily ip_type)
{
g_return_if_fail (MM_IS_BEARER_PROPERTIES (self));
- g_free (self->priv->ip_type);
- self->priv->ip_type = g_strdup (ip_type);
+ self->priv->ip_type = ip_type;
}
void
@@ -144,10 +143,10 @@ mm_bearer_properties_get_password (MMBearerProperties *self)
return self->priv->password;
}
-const gchar *
+MMBearerIpFamily
mm_bearer_properties_get_ip_type (MMBearerProperties *self)
{
- g_return_val_if_fail (MM_IS_BEARER_PROPERTIES (self), NULL);
+ g_return_val_if_fail (MM_IS_BEARER_PROPERTIES (self), MM_BEARER_IP_FAMILY_UNKNOWN);
return self->priv->ip_type;
}
@@ -209,11 +208,11 @@ mm_bearer_properties_get_dictionary (MMBearerProperties *self)
PROPERTY_PASSWORD,
g_variant_new_string (self->priv->password));
- if (self->priv->ip_type)
+ if (self->priv->ip_type != MM_BEARER_IP_FAMILY_UNKNOWN)
g_variant_builder_add (&builder,
"{sv}",
PROPERTY_IP_TYPE,
- g_variant_new_string (self->priv->ip_type));
+ g_variant_new_uint32 (self->priv->ip_type));
if (self->priv->number)
g_variant_builder_add (&builder,
@@ -252,9 +251,17 @@ mm_bearer_properties_consume_string (MMBearerProperties *self,
mm_bearer_properties_set_user (self, value);
else if (g_str_equal (key, PROPERTY_PASSWORD))
mm_bearer_properties_set_password (self, value);
- else if (g_str_equal (key, PROPERTY_IP_TYPE))
- mm_bearer_properties_set_ip_type (self, value);
- else if (g_str_equal (key, PROPERTY_ALLOW_ROAMING)) {
+ else if (g_str_equal (key, PROPERTY_IP_TYPE)) {
+ GError *inner_error = NULL;
+ MMBearerIpFamily ip_type;
+
+ ip_type = mm_common_get_ip_type_from_string (value, &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return FALSE;
+ }
+ mm_bearer_properties_set_ip_type (self, ip_type);
+ } else if (g_str_equal (key, PROPERTY_ALLOW_ROAMING)) {
GError *inner_error = NULL;
gboolean allow_roaming;
@@ -352,7 +359,7 @@ mm_bearer_properties_consume_variant (MMBearerProperties *properties,
else if (g_str_equal (key, PROPERTY_IP_TYPE))
mm_bearer_properties_set_ip_type (
properties,
- g_variant_get_string (value, NULL));
+ g_variant_get_uint32 (value));
else if (g_str_equal (key, PROPERTY_NUMBER))
mm_bearer_properties_set_number (
properties,
@@ -445,7 +452,7 @@ mm_bearer_properties_cmp (MMBearerProperties *a,
MMBearerProperties *b)
{
return ((!g_strcmp0 (a->priv->apn, b->priv->apn)) &&
- (!g_strcmp0 (a->priv->ip_type, b->priv->ip_type)) &&
+ (a->priv->ip_type == b->priv->ip_type) &&
(!g_strcmp0 (a->priv->number, b->priv->number)) &&
(!g_strcmp0 (a->priv->user, b->priv->user)) &&
(!g_strcmp0 (a->priv->password, b->priv->password)) &&
@@ -479,7 +486,7 @@ mm_bearer_properties_init (MMBearerProperties *self)
* even better approach would likely be to query which PDP types the
* modem supports (using AT+CGDCONT=?), and set the default accordingly
*/
- self->priv->ip_type = g_strdup ("IPV4");
+ self->priv->ip_type = MM_BEARER_IP_FAMILY_IPV4;
}
static void
@@ -490,7 +497,6 @@ finalize (GObject *object)
g_free (self->priv->apn);
g_free (self->priv->user);
g_free (self->priv->password);
- g_free (self->priv->ip_type);
g_free (self->priv->number);
G_OBJECT_CLASS (mm_bearer_properties_parent_class)->finalize (object);
diff --git a/libmm-common/mm-bearer-properties.h b/libmm-common/mm-bearer-properties.h
index 3288c33f..8272e6b6 100644
--- a/libmm-common/mm-bearer-properties.h
+++ b/libmm-common/mm-bearer-properties.h
@@ -58,7 +58,7 @@ void mm_bearer_properties_set_user (MMBearerProperties *properties,
void mm_bearer_properties_set_password (MMBearerProperties *properties,
const gchar *password);
void mm_bearer_properties_set_ip_type (MMBearerProperties *properties,
- const gchar *ip_type);
+ MMBearerIpFamily ip_type);
void mm_bearer_properties_set_allow_roaming (MMBearerProperties *properties,
gboolean allow_roaming);
void mm_bearer_properties_set_number (MMBearerProperties *properties,
@@ -69,7 +69,7 @@ void mm_bearer_properties_set_rm_protocol (MMBearerProperties *properties,
const gchar *mm_bearer_properties_get_apn (MMBearerProperties *properties);
const gchar *mm_bearer_properties_get_user (MMBearerProperties *properties);
const gchar *mm_bearer_properties_get_password (MMBearerProperties *properties);
-const gchar *mm_bearer_properties_get_ip_type (MMBearerProperties *properties);
+MMBearerIpFamily mm_bearer_properties_get_ip_type (MMBearerProperties *properties);
gboolean mm_bearer_properties_get_allow_roaming (MMBearerProperties *properties);
const gchar *mm_bearer_properties_get_number (MMBearerProperties *properties);
MMModemCdmaRmProtocol mm_bearer_properties_get_rm_protocol (MMBearerProperties *properties);
diff --git a/libmm-common/mm-common-helpers.c b/libmm-common/mm-common-helpers.c
index ca96d752..488c771e 100644
--- a/libmm-common/mm-common-helpers.c
+++ b/libmm-common/mm-common-helpers.c
@@ -334,6 +334,28 @@ mm_common_get_rm_protocol_from_string (const gchar *str,
return MM_MODEM_CDMA_RM_PROTOCOL_UNKNOWN;
}
+MMBearerIpFamily
+mm_common_get_ip_type_from_string (const gchar *str,
+ GError **error)
+{
+ GEnumClass *enum_class;
+ guint i;
+
+ enum_class = G_ENUM_CLASS (g_type_class_ref (MM_TYPE_BEARER_IP_FAMILY));
+
+ for (i = 0; enum_class->values[i].value_nick; i++) {
+ if (!g_ascii_strcasecmp (str, enum_class->values[i].value_nick))
+ return enum_class->values[i].value;
+ }
+
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_INVALID_ARGS,
+ "Couldn't match '%s' with a valid MMBearerIpFamily value",
+ str);
+ return MM_BEARER_IP_FAMILY_UNKNOWN;
+}
+
GVariant *
mm_common_build_bands_unknown (void)
{
diff --git a/libmm-common/mm-common-helpers.h b/libmm-common/mm-common-helpers.h
index 98d97f41..13d5b505 100644
--- a/libmm-common/mm-common-helpers.h
+++ b/libmm-common/mm-common-helpers.h
@@ -36,6 +36,8 @@ gboolean mm_common_get_boolean_from_string (const gchar *value,
GError **error);
MMModemCdmaRmProtocol mm_common_get_rm_protocol_from_string (const gchar *str,
GError **error);
+MMBearerIpFamily mm_common_get_ip_type_from_string (const gchar *str,
+ GError **error);
GArray *mm_common_bands_variant_to_garray (GVariant *variant);
MMModemBand *mm_common_bands_variant_to_array (GVariant *variant,
diff --git a/libmm-common/mm-simple-connect-properties.c b/libmm-common/mm-simple-connect-properties.c
index ba69d42a..a0ef96a7 100644
--- a/libmm-common/mm-simple-connect-properties.c
+++ b/libmm-common/mm-simple-connect-properties.c
@@ -124,7 +124,7 @@ mm_simple_connect_properties_set_password (MMSimpleConnectProperties *self,
void
mm_simple_connect_properties_set_ip_type (MMSimpleConnectProperties *self,
- const gchar *ip_type)
+ MMBearerIpFamily ip_type)
{
g_return_if_fail (MM_IS_SIMPLE_CONNECT_PROPERTIES (self));
@@ -228,10 +228,10 @@ mm_simple_connect_properties_get_password (MMSimpleConnectProperties *self)
return mm_bearer_properties_get_password (self->priv->bearer_properties);
}
-const gchar *
+MMBearerIpFamily
mm_simple_connect_properties_get_ip_type (MMSimpleConnectProperties *self)
{
- g_return_val_if_fail (MM_IS_SIMPLE_CONNECT_PROPERTIES (self), NULL);
+ g_return_val_if_fail (MM_IS_SIMPLE_CONNECT_PROPERTIES (self), MM_BEARER_IP_FAMILY_UNKNOWN);
return mm_bearer_properties_get_ip_type (self->priv->bearer_properties);
}
diff --git a/libmm-common/mm-simple-connect-properties.h b/libmm-common/mm-simple-connect-properties.h
index 84ce7723..04c8d34b 100644
--- a/libmm-common/mm-simple-connect-properties.h
+++ b/libmm-common/mm-simple-connect-properties.h
@@ -68,26 +68,26 @@ void mm_simple_connect_properties_set_user (MMSimpleConnectProperties *
void mm_simple_connect_properties_set_password (MMSimpleConnectProperties *properties,
const gchar *password);
void mm_simple_connect_properties_set_ip_type (MMSimpleConnectProperties *properties,
- const gchar *ip_type);
+ MMBearerIpFamily ip_type);
void mm_simple_connect_properties_set_allow_roaming (MMSimpleConnectProperties *properties,
gboolean allow_roaming);
void mm_simple_connect_properties_set_number (MMSimpleConnectProperties *properties,
const gchar *number);
-const gchar *mm_simple_connect_properties_get_pin (MMSimpleConnectProperties *properties);
-const gchar *mm_simple_connect_properties_get_operator_id (MMSimpleConnectProperties *properties);
-void mm_simple_connect_properties_get_bands (MMSimpleConnectProperties *properties,
- const MMModemBand **bands,
- guint *n_bands);
-void mm_simple_connect_properties_get_allowed_modes (MMSimpleConnectProperties *properties,
- MMModemMode *allowed,
- MMModemMode *preferred);
-const gchar *mm_simple_connect_properties_get_apn (MMSimpleConnectProperties *properties);
-const gchar *mm_simple_connect_properties_get_user (MMSimpleConnectProperties *properties);
-const gchar *mm_simple_connect_properties_get_password (MMSimpleConnectProperties *properties);
-const gchar *mm_simple_connect_properties_get_ip_type (MMSimpleConnectProperties *properties);
-gboolean mm_simple_connect_properties_get_allow_roaming (MMSimpleConnectProperties *properties);
-const gchar *mm_simple_connect_properties_get_number (MMSimpleConnectProperties *properties);
+const gchar *mm_simple_connect_properties_get_pin (MMSimpleConnectProperties *properties);
+const gchar *mm_simple_connect_properties_get_operator_id (MMSimpleConnectProperties *properties);
+void mm_simple_connect_properties_get_bands (MMSimpleConnectProperties *properties,
+ const MMModemBand **bands,
+ guint *n_bands);
+void mm_simple_connect_properties_get_allowed_modes (MMSimpleConnectProperties *properties,
+ MMModemMode *allowed,
+ MMModemMode *preferred);
+const gchar *mm_simple_connect_properties_get_apn (MMSimpleConnectProperties *properties);
+const gchar *mm_simple_connect_properties_get_user (MMSimpleConnectProperties *properties);
+const gchar *mm_simple_connect_properties_get_password (MMSimpleConnectProperties *properties);
+MMBearerIpFamily mm_simple_connect_properties_get_ip_type (MMSimpleConnectProperties *properties);
+gboolean mm_simple_connect_properties_get_allow_roaming (MMSimpleConnectProperties *properties);
+const gchar *mm_simple_connect_properties_get_number (MMSimpleConnectProperties *properties);
MMBearerProperties *mm_simple_connect_properties_get_bearer_properties (MMSimpleConnectProperties *properties);