diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 16 | ||||
-rw-r--r-- | src/mm-broadband-modem-qmi.c | 16 | ||||
-rw-r--r-- | src/mm-broadband-modem.c | 36 | ||||
-rw-r--r-- | src/mm-broadband-modem.h | 7 |
4 files changed, 49 insertions, 26 deletions
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c index 8c96545e..85e6501c 100644 --- a/src/mm-broadband-modem-mbim.c +++ b/src/mm-broadband-modem-mbim.c @@ -857,15 +857,19 @@ modem_load_device_identifier (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data) { - gchar *device_identifier; - GTask *task; + gchar *device_identifier; + GTask *task; + GError *error = NULL; + + task = g_task_new (self, NULL, callback, user_data); /* Just use dummy ATI/ATI1 replies, all the other internal info should be * enough for uniqueness */ - device_identifier = mm_broadband_modem_create_device_identifier (MM_BROADBAND_MODEM (self), "", ""); - - task = g_task_new (self, NULL, callback, user_data); - g_task_return_pointer (task, device_identifier, g_free); + device_identifier = mm_broadband_modem_create_device_identifier (MM_BROADBAND_MODEM (self), "", "", &error); + if (!device_identifier) + g_task_return_error (task, error); + else + g_task_return_pointer (task, device_identifier, g_free); g_object_unref (task); } diff --git a/src/mm-broadband-modem-qmi.c b/src/mm-broadband-modem-qmi.c index 12244b05..9b391098 100644 --- a/src/mm-broadband-modem-qmi.c +++ b/src/mm-broadband-modem-qmi.c @@ -679,17 +679,21 @@ modem_load_device_identifier (MMIfaceModem *self, GAsyncReadyCallback callback, gpointer user_data) { - gchar *device_identifier; - GTask *task; + gchar *device_identifier; + GTask *task; + GError *error = NULL; + + task = g_task_new (self, NULL, callback, user_data); mm_obj_dbg (self, "loading device identifier..."); /* Just use dummy ATI/ATI1 replies, all the other internal info should be * enough for uniqueness */ - device_identifier = mm_broadband_modem_create_device_identifier (MM_BROADBAND_MODEM (self), "", ""); - - task = g_task_new (self, NULL, callback, user_data); - g_task_return_pointer (task, device_identifier, g_free); + device_identifier = mm_broadband_modem_create_device_identifier (MM_BROADBAND_MODEM (self), "", "", &error); + if (!device_identifier) + g_task_return_error (task, error); + else + g_task_return_pointer (task, device_identifier, g_free); g_object_unref (task); } diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c index 6e679aef..ee2adfc8 100644 --- a/src/mm-broadband-modem.c +++ b/src/mm-broadband-modem.c @@ -1146,9 +1146,9 @@ modem_load_device_identifier_finish (MMIfaceModem *self, GAsyncResult *res, GError **error) { - GError *inner_error = NULL; - gpointer ctx = NULL; - gchar *device_identifier; + GError *inner_error = NULL; + gpointer ctx = NULL; + gchar *device_identifier; mm_base_modem_at_sequence_finish (MM_BASE_MODEM (self), res, &ctx, &inner_error); if (inner_error) { @@ -1157,10 +1157,16 @@ modem_load_device_identifier_finish (MMIfaceModem *self, } g_assert (ctx != NULL); - device_identifier = (mm_broadband_modem_create_device_identifier ( - MM_BROADBAND_MODEM (self), - ((DeviceIdentifierContext *)ctx)->ati, - ((DeviceIdentifierContext *)ctx)->ati1)); + device_identifier = mm_broadband_modem_create_device_identifier ( + MM_BROADBAND_MODEM (self), + ((DeviceIdentifierContext *)ctx)->ati, + ((DeviceIdentifierContext *)ctx)->ati1, + &inner_error); + if (!device_identifier) { + g_propagate_error (error, inner_error); + return NULL; + } + mm_obj_dbg (self, "loaded device identifier: %s", device_identifier); return device_identifier; } @@ -12521,10 +12527,18 @@ mm_broadband_modem_get_current_charset (MMBroadbandModem *self) /*****************************************************************************/ gchar * -mm_broadband_modem_create_device_identifier (MMBroadbandModem *self, - const gchar *ati, - const gchar *ati1) -{ +mm_broadband_modem_create_device_identifier (MMBroadbandModem *self, + const gchar *ati, + const gchar *ati1, + GError **error) +{ + /* do nothing if device has gone already */ + if (!self->priv->modem_dbus_skeleton) { + g_set_error (error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, + "Modem interface skeleton unavailable"); + return NULL; + } + return (mm_create_device_identifier ( mm_base_modem_get_vendor_id (MM_BASE_MODEM (self)), mm_base_modem_get_product_id (MM_BASE_MODEM (self)), diff --git a/src/mm-broadband-modem.h b/src/mm-broadband-modem.h index 1f5acac3..2ba05799 100644 --- a/src/mm-broadband-modem.h +++ b/src/mm-broadband-modem.h @@ -104,9 +104,10 @@ MMModemCharset mm_broadband_modem_get_current_charset (MMBroadbandModem *self); /* Create a unique device identifier string using the ATI and ATI1 replies and some * additional internal info */ -gchar *mm_broadband_modem_create_device_identifier (MMBroadbandModem *self, - const gchar *ati, - const gchar *ati1); +gchar *mm_broadband_modem_create_device_identifier (MMBroadbandModem *self, + const gchar *ati, + const gchar *ati1, + GError **error); /* Locking/unlocking SMS storages */ void mm_broadband_modem_lock_sms_storages (MMBroadbandModem *self, |