base-bearer: normalize connection error exposed in DBus

The connection error exposed in the DBus interface should be an error
defined in the ModemManager API, and therefore it should be normalized
before being exposed.

This was already being done by limiting the exposure to MM specific
errors, but now we also try to normalize QMI or MBIM errors into MM
specific ones.
This commit is contained in:
Aleksander Morgado
2023-10-27 07:33:44 +00:00
parent 2de0763ac8
commit 9569b99f41
+4 -35
View File
@@ -251,6 +251,8 @@ bearer_update_connection_error (MMBaseBearer *self,
g_autoptr(GVariant) tuple = NULL;
if (connection_error) {
g_autoptr(GError) normalized_error = NULL;
/* Never overwrite a connection error if it's already set */
tuple = mm_gdbus_bearer_dup_connection_error (MM_GDBUS_BEARER (self));
if (tuple)
@@ -259,42 +261,9 @@ bearer_update_connection_error (MMBaseBearer *self,
/*
* Limit the type of errors we can expose in the interface;
* e.g. we don't want QMI or MBIM specific errors reported.
*
* G_IO_ERROR_CANCELLED is an exception, because we map it to
* MM_CORE_ERROR_CANCELLED implicitly when building the DBus error name.
*/
if ((connection_error->domain != MM_CORE_ERROR) &&
(connection_error->domain != MM_MOBILE_EQUIPMENT_ERROR) &&
(connection_error->domain != MM_CONNECTION_ERROR) &&
(connection_error->domain != MM_SERIAL_ERROR) &&
(connection_error->domain != MM_CDMA_ACTIVATION_ERROR) &&
(!g_error_matches (connection_error, G_IO_ERROR, G_IO_ERROR_CANCELLED))) {
g_autoptr(GError) default_connection_error = NULL;
#if defined WITH_QMI
if (connection_error->domain == QMI_CORE_ERROR)
mm_obj_dbg (self, "cannot set QMI core error as connection error: %s", connection_error->message);
else if (connection_error->domain == QMI_PROTOCOL_ERROR)
mm_obj_dbg (self, "cannot set QMI protocol error as connection error: %s", connection_error->message);
else
#endif
#if defined WITH_MBIM
if (connection_error->domain == MBIM_CORE_ERROR)
mm_obj_dbg (self, "cannot set MBIM core error as connection error: %s", connection_error->message);
else if (connection_error->domain == MBIM_PROTOCOL_ERROR)
mm_obj_dbg (self, "cannot set MBIM protocol error as connection error: %s", connection_error->message);
else if (connection_error->domain == MBIM_STATUS_ERROR)
mm_obj_dbg (self, "cannot set MBIM status error as connection error: %s", connection_error->message);
else
#endif
mm_obj_dbg (self, "cannot set unhandled domain error as connection error: %s", connection_error->message);
default_connection_error = g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN,
"%s", connection_error->message);
tuple = mm_common_error_to_tuple (default_connection_error);
} else
tuple = mm_common_error_to_tuple (connection_error);
normalized_error = mm_normalize_error (connection_error);
tuple = mm_common_error_to_tuple (normalized_error);
}
mm_gdbus_bearer_set_connection_error (MM_GDBUS_BEARER (self), tuple);
}