aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-bearer-mbim.c23
-rw-r--r--src/mm-broadband-modem-mbim.c33
-rw-r--r--src/mm-broadband-modem-mbim.h5
3 files changed, 47 insertions, 14 deletions
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index bb0b80d5..33a1b8f1 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -927,6 +927,7 @@ connect_set_ready (MbimDevice *device,
error = g_steal_pointer (&inner_error);
} else {
/* Report the IP type we asked for and the one returned by the modem */
+ nw_error = mm_broadband_modem_mbim_normalize_nw_error (ctx->modem, nw_error);
mm_obj_dbg (self, "session ID '%u': %s (requested IP type: %s, activated IP type: %s, nw error: %s)",
session_id,
mbim_activation_state_get_string (activation_state),
@@ -1604,15 +1605,17 @@ typedef enum {
} DisconnectStep;
typedef struct {
- MMPortMbim *mbim;
- guint session_id;
- DisconnectStep step;
+ MMPortMbim *mbim;
+ MMBroadbandModemMbim *modem;
+ guint session_id;
+ DisconnectStep step;
} DisconnectContext;
static void
disconnect_context_free (DisconnectContext *ctx)
{
g_object_unref (ctx->mbim);
+ g_object_unref (ctx->modem);
g_slice_free (DisconnectContext, ctx);
}
@@ -1732,6 +1735,7 @@ disconnect_set_ready (MbimDevice *device,
goto out;
}
+ nw_error = mm_broadband_modem_mbim_normalize_nw_error (ctx->modem, nw_error);
if (g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE) && parsed_result && nw_error != 0) {
g_assert (!inner_error);
g_error_free (error);
@@ -1801,9 +1805,10 @@ disconnect (MMBaseBearer *_self,
GAsyncReadyCallback callback,
gpointer user_data)
{
- MMBearerMbim *self = MM_BEARER_MBIM (_self);
- DisconnectContext *ctx;
- GTask *task;
+ MMBearerMbim *self = MM_BEARER_MBIM (_self);
+ DisconnectContext *ctx;
+ GTask *task;
+ g_autoptr(MMBaseModem) modem = NULL;
task = g_task_new (self, NULL, callback, user_data);
@@ -1815,11 +1820,17 @@ disconnect (MMBaseBearer *_self,
return;
}
+ g_object_get (self,
+ MM_BASE_BEARER_MODEM, &modem,
+ NULL);
+ g_assert (modem);
+
mm_obj_dbg (self, "launching disconnection on data port (%s/%s)",
mm_port_subsys_get_string (mm_port_get_subsys (self->priv->data)),
mm_port_get_device (self->priv->data));
ctx = g_slice_new0 (DisconnectContext);
+ ctx->modem = MM_BROADBAND_MODEM_MBIM (g_object_ref (modem));
ctx->mbim = g_object_ref (self->priv->mbim);
ctx->session_id = self->priv->session_id;
ctx->step = DISCONNECT_STEP_FIRST;
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 2a1f8e6e..0f2f8491 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -401,6 +401,18 @@ mm_broadband_modem_mbim_peek_port_mbim_for_data (MMBroadbandModemMbim *self,
/*****************************************************************************/
+guint32
+mm_broadband_modem_mbim_normalize_nw_error (MMBroadbandModemMbim *self,
+ guint32 nw_error)
+{
+ if (MM_BROADBAND_MODEM_MBIM_GET_CLASS (self)->normalize_nw_error)
+ return MM_BROADBAND_MODEM_MBIM_GET_CLASS (self)->normalize_nw_error (self, nw_error);
+
+ return nw_error;
+}
+
+/*****************************************************************************/
+
gboolean
mm_broadband_modem_mbim_is_context_type_ext_supported (MMBroadbandModemMbim *self)
{
@@ -4020,6 +4032,7 @@ lte_attach_info_query_ready (MbimDevice *device,
if (nw_error) {
const gchar *nw_error_str;
+ nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
nw_error_str = mbim_nw_error_get_string (nw_error);
if (nw_error_str)
mm_obj_dbg (self, "LTE attach info network error reported: %s", nw_error_str);
@@ -4975,6 +4988,7 @@ common_process_register_state (MMBroadbandModemMbim *self,
}
}
+ nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
nw_error_str = mbim_nw_error_get_string (nw_error);
available_data_classes_str = mbim_data_class_build_string_from_mask (available_data_classes);
preferred_data_classes_str = mbim_data_class_build_string_from_mask (preferred_data_classes);
@@ -5091,6 +5105,7 @@ basic_connect_notification_connect (MMBroadbandModemMbim *self,
ReportDisconnectedStatusContext ctx;
g_autoptr(GError) connection_error = NULL;
+ nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
connection_error = mm_error_from_mbim_nw_error (nw_error, self);
mm_obj_dbg (self, "session ID '%u' was deactivated: %s", session_id, connection_error->message);
@@ -5418,6 +5433,7 @@ common_process_packet_service (MMBroadbandModemMbim *self,
}
frequency_range_str = mbim_frequency_range_build_string_from_mask (frequency_range);
+ nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
nw_error_str = mbim_nw_error_get_string (nw_error);
mm_obj_dbg (self, "packet service update:");
@@ -5750,6 +5766,7 @@ ms_basic_connect_extensions_notification_lte_attach_info (MMBroadbandModemMbim *
if (nw_error) {
const gchar *nw_error_str;
+ nw_error = mm_broadband_modem_mbim_normalize_nw_error (self, nw_error);
nw_error_str = mbim_nw_error_get_string (nw_error);
if (nw_error_str)
mm_obj_dbg (self, "LTE attach info network error reported: %s", nw_error_str);
@@ -6834,9 +6851,9 @@ register_state_set_ready (MbimDevice *device,
(mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error) ||
g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE))) {
g_autoptr(GError) inner_error = NULL;
- MbimNwError nw_error = 0;
+ MbimNwError normalized_nw_error = 0;
- if (!common_process_register_state (self, device, response, &nw_error, &inner_error)) {
+ if (!common_process_register_state (self, device, response, &normalized_nw_error, &inner_error)) {
mm_obj_warn (self, "%s", inner_error->message);
/* Prefer the error from the result to the parsing error */
if (!error)
@@ -6852,9 +6869,9 @@ register_state_set_ready (MbimDevice *device,
* that is the case, log about it and ignore the error; we are anyway
* reloading the registration info after the set, so it should not be
* a big issue. */
- if (nw_error) {
+ if (normalized_nw_error) {
g_clear_error (&error);
- error = mm_error_from_mbim_nw_error (nw_error, self);
+ error = mm_error_from_mbim_nw_error (normalized_nw_error, self);
}
}
}
@@ -9787,12 +9804,12 @@ packet_service_set_ready (MbimDevice *device,
(mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error) ||
g_error_matches (error, MBIM_STATUS_ERROR, MBIM_STATUS_ERROR_FAILURE))) {
g_autoptr(GError) inner_error = NULL;
- guint32 nw_error = 0;
+ guint32 normalized_nw_error = 0;
if (!common_process_packet_service (self,
device,
response,
- &nw_error,
+ &normalized_nw_error,
&packet_service_state,
&inner_error)) {
mm_obj_warn (self, "%s", inner_error->message);
@@ -9801,9 +9818,9 @@ packet_service_set_ready (MbimDevice *device,
error = g_steal_pointer (&inner_error);
} else {
/* Prefer the NW error if available */
- if (nw_error) {
+ if (normalized_nw_error) {
g_clear_error (&error);
- error = mm_error_from_mbim_nw_error (nw_error, self);
+ error = mm_error_from_mbim_nw_error (normalized_nw_error, self);
}
}
}
diff --git a/src/mm-broadband-modem-mbim.h b/src/mm-broadband-modem-mbim.h
index 8953ef8a..968a5764 100644
--- a/src/mm-broadband-modem-mbim.h
+++ b/src/mm-broadband-modem-mbim.h
@@ -43,6 +43,8 @@ struct _MMBroadbandModemMbimClass{
MMPortMbim * (* peek_port_mbim_for_data) (MMBroadbandModemMbim *self,
MMPort *data,
GError **error);
+ guint32 (* normalize_nw_error) (MMBroadbandModemMbim *self,
+ guint32 nw_error);
};
GType mm_broadband_modem_mbim_get_type (void);
@@ -64,6 +66,9 @@ MMPortMbim *mm_broadband_modem_mbim_get_port_mbim_for_data (MMBroadbandModemMbi
MMPort *data,
GError **error);
+guint32 mm_broadband_modem_mbim_normalize_nw_error (MMBroadbandModemMbim *self,
+ guint32 nw_error);
+
void mm_broadband_modem_mbim_set_unlock_retries (MMBroadbandModemMbim *self,
MMModemLock lock_type,
guint32 remaining_attempts);