diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2022-05-20 14:31:49 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2022-05-25 11:14:45 +0200 |
commit | 234f185c3a7731f858dac6c82339711806376472 (patch) | |
tree | 70b31a9ba01fe77d19b7758f58671abba9ecfac4 /src | |
parent | 012303013699bf23fde74a3ecb067c5c3a011554 (diff) |
iface-modem: fail initialization if eSIM without profiles
A modem using an eSIM without profiles should not be allowed to get
enabled, it should be really treated as a modem without a physical
SIM.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem.c | 4 | ||||
-rw-r--r-- | src/mm-iface-modem.c | 19 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 2998b779..5c87caf2 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -12389,6 +12389,10 @@ iface_modem_initialize_ready (MMBroadbandModem *self, MM_MOBILE_EQUIPMENT_ERROR, MM_MOBILE_EQUIPMENT_ERROR_SIM_WRONG)) failed_reason = MM_MODEM_STATE_FAILED_REASON_SIM_MISSING; + else if (g_error_matches (error, + MM_CORE_ERROR, + MM_CORE_ERROR_WRONG_SIM_STATE)) + failed_reason = MM_MODEM_STATE_FAILED_REASON_ESIM_WITHOUT_PROFILES; g_error_free (error); diff --git a/src/mm-iface-modem.c b/src/mm-iface-modem.c index 02849048..41f220b3 100644 --- a/src/mm-iface-modem.c +++ b/src/mm-iface-modem.c @@ -4711,6 +4711,7 @@ typedef enum { INITIALIZATION_STEP_SIM, INITIALIZATION_STEP_SETUP_CARRIER_CONFIG, INITIALIZATION_STEP_OWN_NUMBERS, + INITIALIZATION_STEP_VALIDATE_ESIM_STATUS, INITIALIZATION_STEP_LAST } InitializationStep; @@ -6011,6 +6012,24 @@ interface_initialization_step (GTask *task) ctx->step++; /* fall-through */ + case INITIALIZATION_STEP_VALIDATE_ESIM_STATUS: { + g_autoptr(MMBaseSim) sim = NULL; + + g_object_get (self, + MM_IFACE_MODEM_SIM, &sim, + NULL); + + /* If the current SIM is an eSIM without profiles, we transition to FAILED + * status because the modem is really unusable. */ + if (sim && mm_base_sim_is_esim_without_profiles (sim)) { + g_clear_error (&ctx->fatal_error); + ctx->fatal_error = g_error_new (MM_CORE_ERROR, MM_CORE_ERROR_WRONG_SIM_STATE, + "eSIM without profiles detected"); + } + + ctx->step++; + } /* fall-through */ + case INITIALIZATION_STEP_LAST: /* Setup all method handlers */ g_object_connect (ctx->skeleton, |