aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-03-16 15:52:36 +0100
committerAleksander Morgado <aleksander@lanedo.com>2012-03-16 15:52:36 +0100
commit3046059affaee447923bb8b3e70d06ec02ac9d96 (patch)
treea9c83e67f933a3fbc63dc71e15eedf703573d066
parent6bb90d92e47fb432b4916f0cb6521f541ffa0647 (diff)
iface-modem-3gpp: if already registered as requested, don't try to register from scratch
-rw-r--r--src/mm-iface-modem-3gpp.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
index 222d8836..054f9c5f 100644
--- a/src/mm-iface-modem-3gpp.c
+++ b/src/mm-iface-modem-3gpp.c
@@ -100,17 +100,37 @@ mm_iface_modem_3gpp_register_in_network (MMIfaceModem3gpp *self,
gpointer user_data)
{
GSimpleAsyncResult *result;
+ MmGdbusModem3gpp *skeleton;
+ const gchar *current_operator_code;
result = g_simple_async_result_new (G_OBJECT (self),
callback,
user_data,
mm_iface_modem_3gpp_register_in_network);
- MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->register_in_network (
- self,
- operator_id,
- max_registration_time,
- (GAsyncReadyCallback)register_in_network_ready,
- result);
+
+ /* If no operator ID given, or if we're already registered with the requested one,
+ * then we're done */
+ g_object_get (self,
+ MM_IFACE_MODEM_3GPP_DBUS_SKELETON, &skeleton,
+ NULL);
+ current_operator_code = mm_gdbus_modem3gpp_get_operator_code (skeleton);
+ if (current_operator_code &&
+ (!operator_id || g_str_equal (current_operator_code, operator_id))) {
+ /* Already registered, no need to request it again */
+ mm_dbg ("Already registered in network '%s'...", current_operator_code);
+ g_simple_async_result_set_op_res_gboolean (result, TRUE);
+ g_simple_async_result_complete_in_idle (result);
+ g_object_unref (result);
+ } else {
+ MM_IFACE_MODEM_3GPP_GET_INTERFACE (self)->register_in_network (
+ self,
+ operator_id,
+ max_registration_time,
+ (GAsyncReadyCallback)register_in_network_ready,
+ result);
+ }
+
+ g_object_unref (skeleton);
}
typedef struct {