aboutsummaryrefslogtreecommitdiff
path: root/src/mm-sim-qmi.c
diff options
context:
space:
mode:
authorMichal Mazur <michamazur@google.com>2024-09-19 19:29:40 +0000
committerAleksander Morgado <aleksander@aleksander.es>2024-09-25 12:08:40 +0000
commita030eaef7639e491f085cdd0ee52a217b8b7bea9 (patch)
tree97a94697cbfdcca96fabc97264d93b08b3190a10 /src/mm-sim-qmi.c
parent257839c66ee6982eee9108b6661a5816b85ad885 (diff)
sim: add common helpers to parse operator name and mnc length
Diffstat (limited to 'src/mm-sim-qmi.c')
-rw-r--r--src/mm-sim-qmi.c45
1 files changed, 5 insertions, 40 deletions
diff --git a/src/mm-sim-qmi.c b/src/mm-sim-qmi.c
index 1d24c23b..e408ab7e 100644
--- a/src/mm-sim-qmi.c
+++ b/src/mm-sim-qmi.c
@@ -679,20 +679,11 @@ uim_read_efad_ready (QmiClientUim *client,
return;
}
- if (read_result->len < 4) {
- g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
- "Unexpected response length reading EFad: %u", read_result->len);
- g_object_unref (task);
- return;
- }
-
- /* MNC length is byte 4 of this SIM file */
- mnc_length = read_result->data[3];
- if (mnc_length == 2 || mnc_length == 3) {
- g_task_return_pointer (task, g_strndup (self->priv->imsi, 3 + mnc_length), g_free);
+ mnc_length = mm_sim_validate_mnc_length ((const guint8 *) read_result->data, read_result->len, &error);
+ if (!mnc_length) {
+ g_task_return_error (task, error);
} else {
- g_task_return_new_error (task, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
- "SIM returned invalid MNC length %d (should be either 2 or 3)", mnc_length);
+ g_task_return_pointer (task, g_strndup (self->priv->imsi, 3 + mnc_length), g_free);
}
g_object_unref (task);
}
@@ -738,31 +729,6 @@ load_operator_name_finish (MMBaseSim *self,
return g_task_propagate_pointer (G_TASK (res), error);
}
-static gchar *
-parse_spn (const guint8 *bin,
- gsize len,
- GError **error)
-{
- g_autoptr(GByteArray) bin_array = NULL;
- gsize binlen;
-
- /* Remove the FF filler at the end */
- binlen = len;
- while (binlen > 1 && bin[binlen - 1] == 0xff)
- binlen--;
- if (binlen <= 1) {
- g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, "SIM returned empty spn");
- return NULL;
- }
-
- /* Setup as bytearray.
- * First byte is metadata; remainder is GSM-7 unpacked into octets; convert to UTF8 */
- bin_array = g_byte_array_sized_new (binlen - 1);
- g_byte_array_append (bin_array, bin + 1, binlen - 1);
-
- return mm_modem_charset_bytearray_to_utf8 (bin_array, MM_MODEM_CHARSET_GSM, FALSE, error);
-}
-
static void
uim_read_efspn_ready (QmiClientUim *client,
GAsyncResult *res,
@@ -779,8 +745,7 @@ uim_read_efspn_ready (QmiClientUim *client,
return;
}
- spn = parse_spn ((const guint8 *) read_result->data, read_result->len, &error);
-
+ spn = mm_sim_convert_spn_to_utf8 ((const guint8 *) read_result->data, read_result->len, &error);
if (!spn) {
g_task_return_error (task, error);
} else {