aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-04-11 15:37:12 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-04-17 15:19:39 +0200
commitabd22dacfb332c9568d432c4008763e6e8432041 (patch)
treed14741ab78375cfb206aa70806b0377d1d49b8f3
parentb8904b3b5285e3a35e9ec0845f8bbca45568cb34 (diff)
broadband-modem-mbim: don't cache remaining attempts, just requery
There are many more places where we reload remaining attempts, not just after querying initial lock status. So re-query to get the most up to date info.
-rw-r--r--src/mm-broadband-modem-mbim.c119
1 files changed, 64 insertions, 55 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 49b326b2..4c7778ad 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -45,10 +45,6 @@ struct _MMBroadbandModemMbimPrivate {
guint caps_max_sessions;
gchar *caps_device_id;
gchar *caps_firmware_info;
-
- /* Queried and cached lock info */
- MMModemLock current_lock;
- guint current_lock_retries;
};
/*****************************************************************************/
@@ -362,20 +358,6 @@ modem_load_supported_modes (MMIfaceModem *self,
/*****************************************************************************/
/* Unlock required loading (Modem interface) */
-typedef struct {
- MMBroadbandModemMbim *self;
- GSimpleAsyncResult *result;
-} LoadUnlockRequiredContext;
-
-static void
-load_unlock_required_context_complete_and_free (LoadUnlockRequiredContext *ctx)
-{
- g_simple_async_result_complete (ctx->result);
- g_object_unref (ctx->result);
- g_object_unref (ctx->self);
- g_slice_free (LoadUnlockRequiredContext, ctx);
-}
-
static MMModemLock
modem_load_unlock_required_finish (MMIfaceModem *self,
GAsyncResult *res,
@@ -390,13 +372,12 @@ modem_load_unlock_required_finish (MMIfaceModem *self,
static void
pin_query_ready (MbimDevice *device,
GAsyncResult *res,
- LoadUnlockRequiredContext *ctx)
+ GSimpleAsyncResult *simple)
{
MbimMessage *response;
GError *error = NULL;
MbimPinType pin_type;
MbimPinState pin_state;
- guint32 remaining_attempts;
response = mbim_device_command_finish (device, res, &error);
if (response &&
@@ -404,27 +385,24 @@ pin_query_ready (MbimDevice *device,
response,
&pin_type,
&pin_state,
- &remaining_attempts,
+ NULL,
&error)) {
MMModemLock unlock_required;
- /* Gather and store the results we want */
- ctx->self->priv->current_lock = pin_type;
- ctx->self->priv->current_lock_retries = remaining_attempts;
-
if (pin_state == MBIM_PIN_STATE_UNLOCKED)
unlock_required = MM_MODEM_LOCK_NONE;
else
- unlock_required = ctx->self->priv->current_lock;
- g_simple_async_result_set_op_res_gpointer (ctx->result,
+ unlock_required = mm_modem_lock_from_mbim_pin_type (pin_type);
+ g_simple_async_result_set_op_res_gpointer (simple,
GUINT_TO_POINTER (unlock_required),
NULL);
} else
- g_simple_async_result_take_error (ctx->result, error);
+ g_simple_async_result_take_error (simple, error);
if (response)
mbim_message_unref (response);
- load_unlock_required_context_complete_and_free (ctx);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
}
static void
@@ -432,19 +410,17 @@ modem_load_unlock_required (MMIfaceModem *self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- LoadUnlockRequiredContext *ctx;
+ GSimpleAsyncResult *result;
MbimDevice *device;
MbimMessage *message;
if (!peek_device (self, &device, callback, user_data))
return;
- ctx = g_slice_new (LoadUnlockRequiredContext);
- ctx->self = g_object_ref (self);
- ctx->result = g_simple_async_result_new (G_OBJECT (self),
- callback,
- user_data,
- modem_load_unlock_required);
+ result = g_simple_async_result_new (G_OBJECT (self),
+ callback,
+ user_data,
+ modem_load_unlock_required);
mm_dbg ("loading unlock required...");
message = (mbim_message_basic_connect_pin_query_request_new (NULL));
@@ -453,7 +429,7 @@ modem_load_unlock_required (MMIfaceModem *self,
10,
NULL,
(GAsyncReadyCallback)pin_query_ready,
- ctx);
+ result);
mbim_message_unref (message);
}
@@ -465,21 +441,44 @@ modem_load_unlock_retries_finish (MMIfaceModem *self,
GAsyncResult *res,
GError **error)
{
- MMUnlockRetries *retries;
-
- if (MM_BROADBAND_MODEM_MBIM (self)->priv->current_lock == MM_MODEM_LOCK_UNKNOWN) {
- g_set_error (error,
- MM_CORE_ERROR,
- MM_CORE_ERROR_FAILED,
- "Current lock is unknown");
+ if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res), error))
return NULL;
- }
- retries = mm_unlock_retries_new ();
- mm_unlock_retries_set (retries,
- MM_BROADBAND_MODEM_MBIM (self)->priv->current_lock,
- MM_BROADBAND_MODEM_MBIM (self)->priv->current_lock_retries);
- return retries;
+ return MM_UNLOCK_RETRIES (g_object_ref (g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res))));
+}
+
+static void
+pin_query_unlock_retries_ready (MbimDevice *device,
+ GAsyncResult *res,
+ GSimpleAsyncResult *simple)
+{
+ MbimMessage *response;
+ GError *error = NULL;
+ MbimPinType pin_type;
+ guint32 remaining_attempts;
+
+ response = mbim_device_command_finish (device, res, &error);
+ if (response &&
+ mbim_message_basic_connect_pin_query_response_parse (
+ response,
+ &pin_type,
+ NULL,
+ &remaining_attempts,
+ &error)) {
+ MMUnlockRetries *retries;
+
+ retries = mm_unlock_retries_new ();
+ mm_unlock_retries_set (retries,
+ mm_modem_lock_from_mbim_pin_type (pin_type),
+ remaining_attempts);
+ g_simple_async_result_set_op_res_gpointer (simple, retries, g_object_unref);
+ } else
+ g_simple_async_result_take_error (simple, error);
+
+ if (response)
+ mbim_message_unref (response);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
}
static void
@@ -488,14 +487,26 @@ modem_load_unlock_retries (MMIfaceModem *self,
gpointer user_data)
{
GSimpleAsyncResult *result;
+ MbimDevice *device;
+ MbimMessage *message;
+
+ if (!peek_device (self, &device, callback, user_data))
+ return;
- /* Just complete */
result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
modem_load_unlock_retries);
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
+
+ mm_dbg ("loading unlock retries...");
+ message = (mbim_message_basic_connect_pin_query_request_new (NULL));
+ mbim_device_command (device,
+ message,
+ 10,
+ NULL,
+ (GAsyncReadyCallback)pin_query_unlock_retries_ready,
+ result);
+ mbim_message_unref (message);
}
/*****************************************************************************/
@@ -848,8 +859,6 @@ mm_broadband_modem_mbim_init (MMBroadbandModemMbim *self)
self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
MM_TYPE_BROADBAND_MODEM_MBIM,
MMBroadbandModemMbimPrivate);
-
- self->priv->current_lock = MM_MODEM_LOCK_UNKNOWN;
}
static void