diff options
Diffstat (limited to 'src/mm-modem-gsm-card.c')
-rw-r--r-- | src/mm-modem-gsm-card.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/mm-modem-gsm-card.c b/src/mm-modem-gsm-card.c index ca8bdcb0..e03b964d 100644 --- a/src/mm-modem-gsm-card.c +++ b/src/mm-modem-gsm-card.c @@ -28,6 +28,9 @@ static void impl_gsm_modem_get_imei (MMModemGsmCard *modem, static void impl_gsm_modem_get_imsi (MMModemGsmCard *modem, DBusGMethodInvocation *context); +static void impl_gsm_modem_get_operator_id (MMModemGsmCard *modem, + DBusGMethodInvocation *context); + static void impl_gsm_modem_send_pin (MMModemGsmCard *modem, const char *pin, DBusGMethodInvocation *context); @@ -159,6 +162,20 @@ void mm_modem_gsm_card_get_unlock_retries (MMModemGsmCard *self, } void +mm_modem_gsm_card_get_operator_id (MMModemGsmCard *self, + MMModemStringFn callback, + gpointer user_data) +{ + g_return_if_fail (MM_IS_MODEM_GSM_CARD (self)); + g_return_if_fail (callback != NULL); + + if (MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_operator_id) + MM_MODEM_GSM_CARD_GET_INTERFACE (self)->get_operator_id (self, callback, user_data); + else + str_call_not_supported (self, callback, user_data); +} + +void mm_modem_gsm_card_send_puk (MMModemGsmCard *self, const char *puk, const char *pin, @@ -303,6 +320,43 @@ impl_gsm_modem_get_imsi (MMModemGsmCard *modem, DBusGMethodInvocation *context) /*****************************************************************************/ +static void +operator_id_auth_cb (MMAuthRequest *req, + GObject *owner, + DBusGMethodInvocation *context, + gpointer user_data) +{ + MMModemGsmCard *self = MM_MODEM_GSM_CARD (owner); + GError *error = NULL; + + /* Return any authorization error, otherwise get the operator id */ + if (!mm_modem_auth_finish (MM_MODEM (self), req, &error)) { + dbus_g_method_return_error (context, error); + g_error_free (error); + } else + mm_modem_gsm_card_get_operator_id (self, str_call_done, context); +} + +static void +impl_gsm_modem_get_operator_id (MMModemGsmCard *modem, DBusGMethodInvocation *context) +{ + GError *error = NULL; + + /* Make sure the caller is authorized to get the operator id */ + if (!mm_modem_auth_request (MM_MODEM (modem), + MM_AUTHORIZATION_DEVICE_INFO, + context, + operator_id_auth_cb, + NULL, + NULL, + &error)) { + dbus_g_method_return_error (context, error); + g_error_free (error); + } +} + +/*****************************************************************************/ + typedef struct { char *puk; char *pin; |