aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-broadband-modem-mbim.c16
-rw-r--r--src/mm-broadband-modem-qmi.c16
-rw-r--r--src/mm-broadband-modem.c36
-rw-r--r--src/mm-broadband-modem.h7
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,