libmm-glib,common-helpers: Add multiple apn-type management
Fixes #676 Signed-off-by: Frederic Martinsons <frederic.martinsons@gmail.com>
This commit is contained in:

committed by
Aleksander Morgado

parent
511f712160
commit
02aafa2948
@@ -211,26 +211,37 @@ _flags_from_string (GType type,
|
|||||||
guint error_value,
|
guint error_value,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
g_auto(GStrv) flags_strings = NULL;
|
||||||
g_autoptr(GFlagsClass) flags_class = NULL;
|
g_autoptr(GFlagsClass) flags_class = NULL;
|
||||||
guint value;
|
guint value = 0;
|
||||||
guint i;
|
guint i;
|
||||||
|
|
||||||
flags_class = G_FLAGS_CLASS (g_type_class_ref (type));
|
flags_class = G_FLAGS_CLASS (g_type_class_ref (type));
|
||||||
|
flags_strings = g_strsplit (str, "|", -1);
|
||||||
|
|
||||||
for (i = 0; flags_class->values[i].value_nick; i++) {
|
for (i = 0; flags_strings[i]; i++) {
|
||||||
if (!g_ascii_strcasecmp (str, flags_class->values[i].value_nick)) {
|
guint j;
|
||||||
value = flags_class->values[i].value;
|
gboolean found = FALSE;
|
||||||
return value;
|
|
||||||
|
for (j = 0; flags_class->values[j].value_nick; j++) {
|
||||||
|
if (!g_ascii_strcasecmp (flags_strings[i], flags_class->values[j].value_nick)) {
|
||||||
|
value |= flags_class->values[j].value;
|
||||||
|
found = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
MM_CORE_ERROR,
|
MM_CORE_ERROR,
|
||||||
MM_CORE_ERROR_INVALID_ARGS,
|
MM_CORE_ERROR_INVALID_ARGS,
|
||||||
"Couldn't match '%s' with a valid %s value",
|
"Couldn't match '%s' with a valid %s value",
|
||||||
str,
|
flags_strings[i],
|
||||||
g_type_name (type));
|
g_type_name (type));
|
||||||
return error_value;
|
return error_value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
MMModemCapability
|
MMModemCapability
|
||||||
|
@@ -915,6 +915,15 @@ ip_type_from_string (void)
|
|||||||
ip_type = mm_common_get_ip_type_from_string ("ipv4v6", &error);
|
ip_type = mm_common_get_ip_type_from_string ("ipv4v6", &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (ip_type == MM_BEARER_IP_FAMILY_IPV4V6);
|
g_assert (ip_type == MM_BEARER_IP_FAMILY_IPV4V6);
|
||||||
|
|
||||||
|
ip_type = mm_common_get_ip_type_from_string ("ipv4v6|type-unknown", &error);
|
||||||
|
g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS);
|
||||||
|
g_assert (ip_type == MM_BEARER_IP_FAMILY_NONE);
|
||||||
|
g_clear_error (&error);
|
||||||
|
|
||||||
|
ip_type = mm_common_get_ip_type_from_string ("ipv4|ipv6", &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert (ip_type == (MM_BEARER_IP_FAMILY_IPV4 | MM_BEARER_IP_FAMILY_IPV6));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1150,6 +1159,15 @@ apn_type_from_string (void)
|
|||||||
apn_type = mm_common_get_apn_type_from_string ("emergency", &error);
|
apn_type = mm_common_get_apn_type_from_string ("emergency", &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (apn_type == MM_BEARER_APN_TYPE_EMERGENCY);
|
g_assert (apn_type == MM_BEARER_APN_TYPE_EMERGENCY);
|
||||||
|
|
||||||
|
apn_type = mm_common_get_apn_type_from_string ("emergency|type-unknown", &error);
|
||||||
|
g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS);
|
||||||
|
g_assert (apn_type == MM_BEARER_APN_TYPE_NONE);
|
||||||
|
g_clear_error (&error);
|
||||||
|
|
||||||
|
apn_type = mm_common_get_apn_type_from_string ("emergency|local", &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert (apn_type == (MM_BEARER_APN_TYPE_EMERGENCY | MM_BEARER_APN_TYPE_LOCAL));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1166,6 +1184,15 @@ _3gpp_facility_from_string (void)
|
|||||||
facility = mm_common_get_3gpp_facility_from_string ("ph-sim", &error);
|
facility = mm_common_get_3gpp_facility_from_string ("ph-sim", &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
g_assert (facility == MM_MODEM_3GPP_FACILITY_PH_SIM);
|
g_assert (facility == MM_MODEM_3GPP_FACILITY_PH_SIM);
|
||||||
|
|
||||||
|
facility = mm_common_get_3gpp_facility_from_string ("ph-sim|type-unknown", &error);
|
||||||
|
g_assert_error (error, MM_CORE_ERROR, MM_CORE_ERROR_INVALID_ARGS);
|
||||||
|
g_assert (facility == MM_MODEM_3GPP_FACILITY_NONE);
|
||||||
|
g_clear_error (&error);
|
||||||
|
|
||||||
|
facility = mm_common_get_3gpp_facility_from_string ("ph-fsim|provider-pers", &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
g_assert (facility == (MM_MODEM_3GPP_FACILITY_PH_FSIM | MM_MODEM_3GPP_FACILITY_PROVIDER_PERS));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Reference in New Issue
Block a user