aboutsummaryrefslogtreecommitdiff
path: root/src/mm-sim-mbim.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mm-sim-mbim.c')
-rw-r--r--src/mm-sim-mbim.c43
1 files changed, 11 insertions, 32 deletions
diff --git a/src/mm-sim-mbim.c b/src/mm-sim-mbim.c
index 6655ff13..525b3296 100644
--- a/src/mm-sim-mbim.c
+++ b/src/mm-sim-mbim.c
@@ -1067,20 +1067,15 @@ common_read_binary_operator_id_ready (MMSimMbim *self,
GByteArray *value;
value = common_read_binary_finish (self, res, &error);
- if (!value) {
- mm_obj_dbg (self, "failed reading operator ID using MBIM: %s", error->message);
- } else if (value->len != 4) {
- mm_obj_dbg (self, "failed reading operator ID using MBIM: unexpected field size");
- } else {
- guint mnc_len = value->data[3];
-
- if (mnc_len == 2 || mnc_len == 3) {
+ if (value) {
+ guint mnc_len = mm_sim_validate_mnc_length (value->data, value->len, &error);;
+ if (mnc_len) {
g_task_return_pointer (task, g_strndup (self->priv->imsi, 3 + mnc_len), g_free);
g_object_unref (task);
return;
}
- mm_obj_dbg (self, "failed reading operator ID using MBIM: unexpected MNC length: %u", mnc_len);
}
+ mm_obj_dbg (self, "failed reading operator ID using MBIM: %s", error->message);
/* Fallback to parent implementation if possible */
MM_BASE_SIM_CLASS (mm_sim_mbim_parent_class)->load_operator_identifier (MM_BASE_SIM (self),
@@ -1145,31 +1140,15 @@ common_read_binary_operator_name_ready (MMSimMbim *self,
GByteArray *value;
value = common_read_binary_finish (self, res, &error);
- if (!value) {
- mm_obj_dbg (self, "failed reading operator name using MBIM: %s", error->message);
- } else {
- gsize len = value->len;
-
- while (len > 1 && value->data[len - 1] == 0xff)
- len--;
- if (len <= 1) {
- mm_obj_dbg (self, "failed reading operator name using MBIM: value is empty");
- } else {
- g_autoptr(GByteArray) array = NULL;
- gchar *name;
-
- /* Remove the first metadata byte and convert remainder to UTF8 string */
- array = g_byte_array_sized_new (len - 1);
- g_byte_array_append (array, value->data + 1, len - 1);
- name = mm_modem_charset_bytearray_to_utf8 (array, MM_MODEM_CHARSET_GSM, FALSE, &error);
- if (name) {
- g_task_return_pointer (task, name, g_free);
- g_object_unref (task);
- return;
- }
- mm_obj_dbg (self, "failed reading operator name using MBIM: %s", error->message);
+ if (value) {
+ gchar *name = mm_sim_convert_spn_to_utf8 (value->data, value->len, &error);
+ if (name) {
+ g_task_return_pointer (task, name, g_free);
+ g_object_unref (task);
+ return;
}
}
+ mm_obj_dbg (self, "failed reading operator name using MBIM: %s", error->message);
/* Fallback to parent implementation if possible */
MM_BASE_SIM_CLASS (mm_sim_mbim_parent_class)->load_operator_name (MM_BASE_SIM (self),