aboutsummaryrefslogtreecommitdiff
path: root/libmm-common/mm-common-bearer-properties.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmm-common/mm-common-bearer-properties.c')
-rw-r--r--libmm-common/mm-common-bearer-properties.c143
1 files changed, 89 insertions, 54 deletions
diff --git a/libmm-common/mm-common-bearer-properties.c b/libmm-common/mm-common-bearer-properties.c
index 5f397e21..b70bf492 100644
--- a/libmm-common/mm-common-bearer-properties.c
+++ b/libmm-common/mm-common-bearer-properties.c
@@ -186,6 +186,44 @@ mm_common_bearer_properties_get_dictionary (MMCommonBearerProperties *self)
/*****************************************************************************/
+gboolean
+mm_common_bearer_properties_consume_string (MMCommonBearerProperties *self,
+ const gchar *key,
+ const gchar *value,
+ GError **error)
+{
+ if (g_str_equal (key, PROPERTY_APN))
+ mm_common_bearer_properties_set_apn (self, value);
+ else if (g_str_equal (key, PROPERTY_USER))
+ mm_common_bearer_properties_set_user (self, value);
+ else if (g_str_equal (key, PROPERTY_PASSWORD))
+ mm_common_bearer_properties_set_password (self, value);
+ else if (g_str_equal (key, PROPERTY_IP_TYPE))
+ mm_common_bearer_properties_set_ip_type (self, value);
+ else if (g_str_equal (key, PROPERTY_ALLOW_ROAMING)) {
+ GError *inner_error = NULL;
+ gboolean allow_roaming;
+
+ allow_roaming = mm_common_get_boolean_from_string (value, &inner_error);
+ if (inner_error) {
+ g_propagate_error (error, inner_error);
+ return FALSE;
+ }
+ mm_common_bearer_properties_set_allow_roaming (self, allow_roaming);
+ } else if (g_str_equal (key, PROPERTY_NUMBER))
+ mm_common_bearer_properties_set_number (self, value);
+ else {
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_INVALID_ARGS,
+ "Invalid properties string, unexpected key '%s'",
+ key);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
MMCommonBearerProperties *
mm_common_bearer_properties_new_from_string (const gchar *str,
GError **error)
@@ -220,29 +258,11 @@ mm_common_bearer_properties_new_from_string (const gchar *str,
break;
}
- if (g_str_equal (key, PROPERTY_APN))
- mm_common_bearer_properties_set_apn (properties, value);
- else if (g_str_equal (key, PROPERTY_USER))
- mm_common_bearer_properties_set_user (properties, value);
- else if (g_str_equal (key, PROPERTY_PASSWORD))
- mm_common_bearer_properties_set_password (properties, value);
- else if (g_str_equal (key, PROPERTY_IP_TYPE))
- mm_common_bearer_properties_set_ip_type (properties, value);
- else if (g_str_equal (key, PROPERTY_ALLOW_ROAMING)) {
- gboolean allow_roaming;
-
- allow_roaming = mm_common_get_boolean_from_string (value, &inner_error);
- if (!inner_error)
- mm_common_bearer_properties_set_allow_roaming (properties, allow_roaming);
- } else if (g_str_equal (key, PROPERTY_NUMBER))
- mm_common_bearer_properties_set_number (properties, value);
- else {
- inner_error = g_error_new (MM_CORE_ERROR,
- MM_CORE_ERROR_INVALID_ARGS,
- "Invalid properties string, unexpected key '%s'",
- key);
+ if (!mm_common_bearer_properties_consume_string (properties,
+ key,
+ value,
+ &inner_error))
break;
- }
key = words[++i];
}
@@ -260,6 +280,49 @@ mm_common_bearer_properties_new_from_string (const gchar *str,
/*****************************************************************************/
+gboolean
+mm_common_bearer_properties_consume_variant (MMCommonBearerProperties *properties,
+ const gchar *key,
+ GVariant *value,
+ GError **error)
+{
+ if (g_str_equal (key, PROPERTY_APN))
+ mm_common_bearer_properties_set_apn (
+ properties,
+ g_variant_get_string (value, NULL));
+ else if (g_str_equal (key, PROPERTY_USER))
+ mm_common_bearer_properties_set_user (
+ properties,
+ g_variant_get_string (value, NULL));
+ else if (g_str_equal (key, PROPERTY_PASSWORD))
+ mm_common_bearer_properties_set_password (
+ properties,
+ g_variant_get_string (value, NULL));
+ else if (g_str_equal (key, PROPERTY_IP_TYPE))
+ mm_common_bearer_properties_set_ip_type (
+ properties,
+ g_variant_get_string (value, NULL));
+ else if (g_str_equal (key, PROPERTY_NUMBER))
+ mm_common_bearer_properties_set_number (
+ properties,
+ g_variant_get_string (value, NULL));
+ else if (g_str_equal (key, PROPERTY_ALLOW_ROAMING))
+ mm_common_bearer_properties_set_allow_roaming (
+ properties,
+ g_variant_get_boolean (value));
+ else {
+ /* Set error */
+ g_set_error (error,
+ MM_CORE_ERROR,
+ MM_CORE_ERROR_INVALID_ARGS,
+ "Invalid properties dictionary, unexpected key '%s'",
+ key);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
MMCommonBearerProperties *
mm_common_bearer_properties_new_from_dictionary (GVariant *dictionary,
GError **error)
@@ -277,38 +340,10 @@ mm_common_bearer_properties_new_from_dictionary (GVariant *dictionary,
g_variant_iter_init (&iter, dictionary);
while (!inner_error &&
g_variant_iter_next (&iter, "{sv}", &key, &value)) {
- if (g_str_equal (key, PROPERTY_APN))
- mm_common_bearer_properties_set_apn (
- properties,
- g_variant_get_string (value, NULL));
- else if (g_str_equal (key, PROPERTY_USER))
- mm_common_bearer_properties_set_user (
- properties,
- g_variant_get_string (value, NULL));
- else if (g_str_equal (key, PROPERTY_PASSWORD))
- mm_common_bearer_properties_set_password (
- properties,
- g_variant_get_string (value, NULL));
- else if (g_str_equal (key, PROPERTY_IP_TYPE))
- mm_common_bearer_properties_set_ip_type (
- properties,
- g_variant_get_string (value, NULL));
- else if (g_str_equal (key, PROPERTY_NUMBER))
- mm_common_bearer_properties_set_number (
- properties,
- g_variant_get_string (value, NULL));
- else if (g_str_equal (key, PROPERTY_ALLOW_ROAMING))
- mm_common_bearer_properties_set_allow_roaming (
- properties,
- g_variant_get_boolean (value));
- else {
- /* Set inner error, will stop the loop */
- inner_error = g_error_new (MM_CORE_ERROR,
- MM_CORE_ERROR_INVALID_ARGS,
- "Invalid properties dictionary, unexpected key '%s'",
- key);
- }
-
+ mm_common_bearer_properties_consume_variant (properties,
+ key,
+ value,
+ &inner_error);
g_free (key);
g_variant_unref (value);
}