diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-16 15:52:36 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2012-03-16 15:52:36 +0100 |
commit | 3046059affaee447923bb8b3e70d06ec02ac9d96 (patch) | |
tree | a9c83e67f933a3fbc63dc71e15eedf703573d066 | |
parent | 6bb90d92e47fb432b4916f0cb6521f541ffa0647 (diff) |
iface-modem-3gpp: if already registered as requested, don't try to register from scratch
-rw-r--r-- | src/mm-iface-modem-3gpp.c | 32 |
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 { |