diff options
Diffstat (limited to 'plugins/altair/mm-broadband-modem-altair-lte.c')
-rw-r--r-- | plugins/altair/mm-broadband-modem-altair-lte.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/plugins/altair/mm-broadband-modem-altair-lte.c b/plugins/altair/mm-broadband-modem-altair-lte.c index 77e2137e..8240185c 100644 --- a/plugins/altair/mm-broadband-modem-altair-lte.c +++ b/plugins/altair/mm-broadband-modem-altair-lte.c @@ -59,6 +59,10 @@ struct _MMBroadbandModemAltairLtePrivate { * This indicates that there are no more SIM refreshes and we should * reregister the device.*/ guint sim_refresh_timer_id; + /* Flag indicating that we are detaching from the network to process SIM + * refresh. This is used to prevent connect requests while we're in this + * state.*/ + gboolean sim_refresh_detach_in_progress; /* Regex for bearer related notifications */ GRegex *statcm_regex; /* Regex for PCO notifications */ @@ -639,6 +643,7 @@ altair_reregister_ready (MMBaseModem *self, } else { mm_dbg ("Modem reregistered successfully"); } + MM_BROADBAND_MODEM_ALTAIR_LTE (self)->priv->sim_refresh_detach_in_progress = FALSE; } static void @@ -648,6 +653,7 @@ altair_deregister_ready (MMBaseModem *self, { if (!mm_base_modem_at_command_finish (self, res, NULL)) { mm_dbg ("Deregister modem failed"); + MM_BROADBAND_MODEM_ALTAIR_LTE (self)->priv->sim_refresh_detach_in_progress = FALSE; return; } @@ -681,6 +687,10 @@ altair_load_own_numbers_ready (MMIfaceModem *iface_modem, g_strfreev (str_list); } + /* Set this flag to prevent connect requests from being processed while we + * detach from the network.*/ + self->priv->sim_refresh_detach_in_progress = TRUE; + /* Deregister */ mm_dbg ("Reregistering modem"); mm_base_modem_at_command ( @@ -703,8 +713,8 @@ altair_sim_refresh_timer_expired (MMBroadbandModemAltairLte *self) MM_IFACE_MODEM (self), (GAsyncReadyCallback)altair_load_own_numbers_ready, self); - self->priv->sim_refresh_timer_id = 0; + return FALSE; } @@ -1408,6 +1418,12 @@ mm_broadband_modem_altair_lte_new (const gchar *device, NULL); } +gboolean +mm_broadband_modem_altair_lte_is_sim_refresh_detach_in_progress (MMBroadbandModem *self) +{ + return MM_BROADBAND_MODEM_ALTAIR_LTE (self)->priv->sim_refresh_detach_in_progress; +} + static void mm_broadband_modem_altair_lte_init (MMBroadbandModemAltairLte *self) { @@ -1419,6 +1435,7 @@ mm_broadband_modem_altair_lte_init (MMBroadbandModemAltairLte *self) self->priv->sim_refresh_regex = g_regex_new ("\\r\\n\\%NOTIFYEV:\\s*SIMREFRESH,?(\\d*)\\r+\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); + self->priv->sim_refresh_detach_in_progress = FALSE; self->priv->sim_refresh_timer_id = 0; self->priv->statcm_regex = g_regex_new ("\\r\\n\\%STATCM:\\s*(\\d*),?(\\d*)\\r+\\n", G_REGEX_RAW | G_REGEX_OPTIMIZE, 0, NULL); |