aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mm-bearer-mbim.c6
-rw-r--r--src/mm-broadband-modem-mbim.c9
-rw-r--r--src/mm-modem-helpers-mbim.c255
-rw-r--r--src/mm-modem-helpers-mbim.h3
4 files changed, 79 insertions, 194 deletions
diff --git a/src/mm-bearer-mbim.c b/src/mm-bearer-mbim.c
index e7747f32..ae4573ae 100644
--- a/src/mm-bearer-mbim.c
+++ b/src/mm-bearer-mbim.c
@@ -636,7 +636,7 @@ connect_set_ready (MbimDevice *device,
activation_state != MBIM_ACTIVATION_STATE_ACTIVATING) {
if (nw_error) {
g_clear_error (&error);
- error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error);
+ error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error, self);
} else if (!error) {
error = g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
MM_MOBILE_EQUIPMENT_ERROR_GPRS_UNKNOWN,
@@ -843,7 +843,7 @@ packet_service_set_ready (MbimDevice *device,
&inner_error)) {
if (nw_error) {
g_clear_error (&error);
- error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error);
+ error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error, self);
} else {
g_autofree gchar *str = NULL;
@@ -1402,7 +1402,7 @@ disconnect_set_ready (MbimDevice *device,
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);
- error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error);
+ error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error, self);
/* error out with nw_error error */
goto out;
}
diff --git a/src/mm-broadband-modem-mbim.c b/src/mm-broadband-modem-mbim.c
index 06b757ac..90c7d53f 100644
--- a/src/mm-broadband-modem-mbim.c
+++ b/src/mm-broadband-modem-mbim.c
@@ -4473,8 +4473,11 @@ register_state_set_ready (MbimDevice *device,
GAsyncResult *res,
GTask *task)
{
- MbimMessage *response;
- GError *error = NULL;
+ MMBroadbandModemMbim *self;
+ MbimMessage *response;
+ GError *error = NULL;
+
+ self = g_task_get_source_object (task);
response = mbim_device_command_finish (device, res, &error);
/* According to Mobile Broadband Interface Model specification 1.0,
@@ -4510,7 +4513,7 @@ register_state_set_ready (MbimDevice *device,
NULL, /* roaming_text */
NULL, /* registration_flag */
&error))
- error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error);
+ error = mm_mobile_equipment_error_from_mbim_nw_error (nw_error, self);
}
if (response)
diff --git a/src/mm-modem-helpers-mbim.c b/src/mm-modem-helpers-mbim.c
index d01f4c38..5cfab727 100644
--- a/src/mm-modem-helpers-mbim.c
+++ b/src/mm-modem-helpers-mbim.c
@@ -17,6 +17,7 @@
#include "mm-modem-helpers.h"
#include "mm-enums-types.h"
#include "mm-errors-types.h"
+#include "mm-error-helpers.h"
#include "mm-log-object.h"
#include <string.h>
@@ -235,200 +236,80 @@ mbim_pin_type_from_mm_modem_3gpp_facility (MMModem3gppFacility facility)
/*****************************************************************************/
+static const MMMobileEquipmentError mbim_nw_errors[] = {
+ [MBIM_NW_ERROR_IMSI_UNKNOWN_IN_HLR] = MM_MOBILE_EQUIPMENT_ERROR_IMSI_UNKNOWN_IN_HSS,
+ [MBIM_NW_ERROR_ILLEGAL_MS] = MM_MOBILE_EQUIPMENT_ERROR_ILLEGAL_UE,
+ [MBIM_NW_ERROR_IMSI_UNKNOWN_IN_VLR] = MM_MOBILE_EQUIPMENT_ERROR_IMSI_UNKNOWN_IN_VLR,
+ [MBIM_NW_ERROR_ILLEGAL_ME] = MM_MOBILE_EQUIPMENT_ERROR_ILLEGAL_ME,
+ [MBIM_NW_ERROR_GPRS_NOT_ALLOWED] = MM_MOBILE_EQUIPMENT_ERROR_PS_SERVICES_NOT_ALLOWED,
+ [MBIM_NW_ERROR_GPRS_AND_NON_GPRS_NOT_ALLOWED] = MM_MOBILE_EQUIPMENT_ERROR_PS_AND_NON_PS_SERVICES_NOT_ALLOWED,
+ [MBIM_NW_ERROR_PLMN_NOT_ALLOWED] = MM_MOBILE_EQUIPMENT_ERROR_PLMN_NOT_ALLOWED,
+ [MBIM_NW_ERROR_LOCATION_AREA_NOT_ALLOWED] = MM_MOBILE_EQUIPMENT_ERROR_AREA_NOT_ALLOWED,
+ [MBIM_NW_ERROR_ROAMING_NOT_ALLOWED_IN_LOCATION_AREA] = MM_MOBILE_EQUIPMENT_ERROR_ROAMING_NOT_ALLOWED_IN_AREA,
+ [MBIM_NW_ERROR_GPRS_NOT_ALLOWED_IN_PLMN] = MM_MOBILE_EQUIPMENT_ERROR_PS_SERVICES_NOT_ALLOWED_IN_PLMN,
+ [MBIM_NW_ERROR_NO_CELLS_IN_LOCATION_AREA] = MM_MOBILE_EQUIPMENT_ERROR_NO_CELLS_IN_AREA,
+ [MBIM_NW_ERROR_NETWORK_FAILURE] = MM_MOBILE_EQUIPMENT_ERROR_NETWORK_FAILURE_ATTACH,
+ [MBIM_NW_ERROR_CONGESTION] = MM_MOBILE_EQUIPMENT_ERROR_CONGESTION,
+ [MBIM_NW_ERROR_GSM_AUTHENTICATION_UNACCEPTABLE] = MM_MOBILE_EQUIPMENT_ERROR_USER_AUTHENTICATION_FAILED,
+ [MBIM_NW_ERROR_NOT_AUTHORIZED_FOR_CSG] = MM_MOBILE_EQUIPMENT_ERROR_NOT_AUTHORIZED_FOR_CSG,
+ [MBIM_NW_ERROR_INSUFFICIENT_RESOURCES] = MM_MOBILE_EQUIPMENT_ERROR_INSUFFICIENT_RESOURCES,
+ [MBIM_NW_ERROR_MISSING_OR_UNKNOWN_APN] = MM_MOBILE_EQUIPMENT_ERROR_MISSING_OR_UNKNOWN_APN,
+ [MBIM_NW_ERROR_UNKNOWN_PDP_ADDRESS_OR_TYPE] = MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN_PDP_ADDRESS_OR_TYPE,
+ [MBIM_NW_ERROR_USER_AUTHENTICATION_FAILED] = MM_MOBILE_EQUIPMENT_ERROR_USER_AUTHENTICATION_FAILED,
+ [MBIM_NW_ERROR_ACTIVATION_REJECTED_BY_GGSN_OR_GW] = MM_MOBILE_EQUIPMENT_ERROR_ACTIVATION_REJECTED_BY_GGSN_OR_GW,
+ [MBIM_NW_ERROR_ACTIVATION_REJECTED_UNSPECIFIED] = MM_MOBILE_EQUIPMENT_ERROR_ACTIVATION_REJECTED_UNSPECIFIED,
+ [MBIM_NW_ERROR_SERVICE_OPTION_NOT_SUPPORTED] = MM_MOBILE_EQUIPMENT_ERROR_SERVICE_OPTION_NOT_SUPPORTED,
+ [MBIM_NW_ERROR_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED] = MM_MOBILE_EQUIPMENT_ERROR_SERVICE_OPTION_NOT_SUBSCRIBED,
+ [MBIM_NW_ERROR_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER] = MM_MOBILE_EQUIPMENT_ERROR_SERVICE_OPTION_OUT_OF_ORDER,
+ [MBIM_NW_ERROR_MAXIMUM_NUMBER_OF_PDP_CONTEXTS_REACHED] = MM_MOBILE_EQUIPMENT_ERROR_MAXIMUM_NUMBER_OF_BEARERS_REACHED,
+ [MBIM_NW_ERROR_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN] = MM_MOBILE_EQUIPMENT_ERROR_REQUESTED_APN_NOT_SUPPORTED,
+ [MBIM_NW_ERROR_SEMANTICALLY_INCORRECT_MESSAGE] = MM_MOBILE_EQUIPMENT_ERROR_SEMANTICALLY_INCORRECT_MESSAGE,
+ [MBIM_NW_ERROR_PROTOCOL_ERROR_UNSPECIFIED] = MM_MOBILE_EQUIPMENT_ERROR_UNSPECIFIED_PROTOCOL_ERROR,
+ [MBIM_NW_ERROR_IMEI_NOT_ACCEPTED] = MM_MOBILE_EQUIPMENT_ERROR_IMEI_NOT_ACCEPTED,
+ [MBIM_NW_ERROR_MS_IDENTITY_NOT_DERIVED_BY_NETWORK] = MM_MOBILE_EQUIPMENT_ERROR_UE_IDENTITY_NOT_DERIVED_FROM_NETWORK,
+ [MBIM_NW_ERROR_IMPLICITLY_DETACHED] = MM_MOBILE_EQUIPMENT_ERROR_IMPLICITLY_DETACHED,
+ [MBIM_NW_ERROR_MSC_TEMPORARILY_NOT_REACHABLE] = MM_MOBILE_EQUIPMENT_ERROR_MSC_TEMPORARILY_NOT_REACHABLE,
+ [MBIM_NW_ERROR_NO_PDP_CONTEXT_ACTIVATED] = MM_MOBILE_EQUIPMENT_ERROR_NO_BEARER_ACTIVATED,
+ [MBIM_NW_ERROR_PDP_TYPE_IPV4_ONLY_ALLOWED] = MM_MOBILE_EQUIPMENT_ERROR_IPV4_ONLY_ALLOWED,
+ [MBIM_NW_ERROR_PDP_TYPE_IPV6_ONLY_ALLOWED] = MM_MOBILE_EQUIPMENT_ERROR_IPV6_ONLY_ALLOWED,
+ [MBIM_NW_ERROR_INVALID_MANDATORY_INFORMATION] = MM_MOBILE_EQUIPMENT_ERROR_INVALID_MANDATORY_INFORMATION,
+ [MBIM_NW_ERROR_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED] = MM_MOBILE_EQUIPMENT_ERROR_MESSAGE_TYPE_NOT_IMPLEMENTED,
+ [MBIM_NW_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE] = MM_MOBILE_EQUIPMENT_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
+ [MBIM_NW_ERROR_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED] = MM_MOBILE_EQUIPMENT_ERROR_IE_NOT_IMPLEMENTED,
+ [MBIM_NW_ERROR_CONDITIONAL_IE_ERROR] = MM_MOBILE_EQUIPMENT_ERROR_CONDITIONAL_IE_ERROR,
+ [MBIM_NW_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE] = MM_MOBILE_EQUIPMENT_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
+ [MBIM_NW_ERROR_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_PDP_CONTEXT] = MM_MOBILE_EQUIPMENT_ERROR_APN_RESTRICTION_INCOMPATIBLE,
+ [MBIM_NW_ERROR_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED] = MM_MOBILE_EQUIPMENT_ERROR_MULTIPLE_ACCESS_TO_PDN_CONNECTION_NOT_ALLOWED,
+ [MBIM_NW_ERROR_UNKNOWN] = MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN,
+ /* known unmapped errors */
+ /* MBIM_NW_ERROR_MAC_FAILURE */
+ /* MBIM_NW_ERROR_SYNCH_FAILURE */
+};
+
GError *
-mm_mobile_equipment_error_from_mbim_nw_error (MbimNwError nw_error)
+mm_mobile_equipment_error_from_mbim_nw_error (MbimNwError nw_error,
+ gpointer log_object)
{
- const gchar *msg;
+ MMMobileEquipmentError error_code;
+ const gchar *msg;
- switch (nw_error) {
- case MBIM_NW_ERROR_IMSI_UNKNOWN_IN_HLR:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_IMSI_UNKNOWN_IN_HSS,
- "IMSI unknown in HLR");
- case MBIM_NW_ERROR_ILLEGAL_MS:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_ILLEGAL_UE,
- "Illegal UE/MS");
- case MBIM_NW_ERROR_IMSI_UNKNOWN_IN_VLR:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_IMSI_UNKNOWN_IN_VLR,
- "IMSI unknown in VLR");
- case MBIM_NW_ERROR_ILLEGAL_ME:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_ILLEGAL_ME,
- "Illegal ME");
- case MBIM_NW_ERROR_GPRS_NOT_ALLOWED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_PS_SERVICES_NOT_ALLOWED,
- "PS services not allowed");
- case MBIM_NW_ERROR_GPRS_AND_NON_GPRS_NOT_ALLOWED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_PS_AND_NON_PS_SERVICES_NOT_ALLOWED,
- "PS and non-PS services not allowed");
- case MBIM_NW_ERROR_PLMN_NOT_ALLOWED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_PLMN_NOT_ALLOWED,
- "PLMN not allowed");
- case MBIM_NW_ERROR_LOCATION_AREA_NOT_ALLOWED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_AREA_NOT_ALLOWED,
- "Location/tracking area not allowed");
- case MBIM_NW_ERROR_ROAMING_NOT_ALLOWED_IN_LOCATION_AREA:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_ROAMING_NOT_ALLOWED_IN_AREA,
- "Roaming not allowed in location/tracking area");
- case MBIM_NW_ERROR_GPRS_NOT_ALLOWED_IN_PLMN:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_PS_SERVICES_NOT_ALLOWED_IN_PLMN,
- "PS services not allowed in PLMN");
- case MBIM_NW_ERROR_NO_CELLS_IN_LOCATION_AREA:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_NO_CELLS_IN_AREA,
- "No cells in location/tracking area");
- case MBIM_NW_ERROR_NETWORK_FAILURE:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_NETWORK_FAILURE_ATTACH,
- "Network failure");
- case MBIM_NW_ERROR_CONGESTION:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_CONGESTION,
- "Congestion");
- case MBIM_NW_ERROR_GSM_AUTHENTICATION_UNACCEPTABLE:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_USER_AUTHENTICATION_FAILED,
- "GSM authentication unacceptable");
- case MBIM_NW_ERROR_NOT_AUTHORIZED_FOR_CSG:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_NOT_AUTHORIZED_FOR_CSG,
- "Not authorized for this CSG");
- case MBIM_NW_ERROR_INSUFFICIENT_RESOURCES:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_INSUFFICIENT_RESOURCES,
- "Insufficient resources");
- case MBIM_NW_ERROR_MISSING_OR_UNKNOWN_APN:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_MISSING_OR_UNKNOWN_APN,
- "Missing or unknown APN");
- case MBIM_NW_ERROR_UNKNOWN_PDP_ADDRESS_OR_TYPE:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN_PDP_ADDRESS_OR_TYPE,
- "Unknown PDP address or type");
- case MBIM_NW_ERROR_USER_AUTHENTICATION_FAILED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_USER_AUTHENTICATION_FAILED,
- "User authentication failed");
- case MBIM_NW_ERROR_ACTIVATION_REJECTED_BY_GGSN_OR_GW:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_ACTIVATION_REJECTED_BY_GGSN_OR_GW,
- "Activation rejected by GGSN or GW");
- case MBIM_NW_ERROR_ACTIVATION_REJECTED_UNSPECIFIED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_ACTIVATION_REJECTED_UNSPECIFIED,
- "Activation rejected; unspecified");
- case MBIM_NW_ERROR_SERVICE_OPTION_NOT_SUPPORTED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_SERVICE_OPTION_NOT_SUPPORTED,
- "Service option not supported");
- case MBIM_NW_ERROR_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_SERVICE_OPTION_NOT_SUBSCRIBED,
- "Requested service option not subscribed");
- case MBIM_NW_ERROR_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_SERVICE_OPTION_OUT_OF_ORDER,
- "Service option temporarily out of order");
- case MBIM_NW_ERROR_MAXIMUM_NUMBER_OF_PDP_CONTEXTS_REACHED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_MAXIMUM_NUMBER_OF_BEARERS_REACHED,
- "Maximum number of PDP contexts reached");
- case MBIM_NW_ERROR_REQUESTED_APN_NOT_SUPPORTED_IN_CURRENT_RAT_AND_PLMN:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_REQUESTED_APN_NOT_SUPPORTED,
- "Requested APN not supported");
-
- case MBIM_NW_ERROR_SEMANTICALLY_INCORRECT_MESSAGE:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_SEMANTICALLY_INCORRECT_MESSAGE,
- "Semantically incorrect message");
+ /* convert to mobile equipment error */
+ error_code = mbim_nw_errors[nw_error];
+ if (error_code)
+ return mm_mobile_equipment_error_for_code (error_code, log_object);
- case MBIM_NW_ERROR_PROTOCOL_ERROR_UNSPECIFIED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_UNSPECIFIED_PROTOCOL_ERROR,
- "Unspecified protocol error");
-
- case MBIM_NW_ERROR_IMEI_NOT_ACCEPTED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_IMEI_NOT_ACCEPTED,
- "IMEI not accepted");
- case MBIM_NW_ERROR_MS_IDENTITY_NOT_DERIVED_BY_NETWORK:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_UE_IDENTITY_NOT_DERIVED_FROM_NETWORK,
- "UE identity not derived from network");
- case MBIM_NW_ERROR_IMPLICITLY_DETACHED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_IMPLICITLY_DETACHED,
- "Implicitly detached");
- case MBIM_NW_ERROR_MSC_TEMPORARILY_NOT_REACHABLE:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_MSC_TEMPORARILY_NOT_REACHABLE,
- "MSC temporarily not reachable");
- case MBIM_NW_ERROR_NO_PDP_CONTEXT_ACTIVATED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_NO_BEARER_ACTIVATED,
- "No bearer activated");
- case MBIM_NW_ERROR_PDP_TYPE_IPV4_ONLY_ALLOWED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_IPV4_ONLY_ALLOWED,
- "IPv4 only allowed");
- case MBIM_NW_ERROR_PDP_TYPE_IPV6_ONLY_ALLOWED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_IPV6_ONLY_ALLOWED,
- "IPv6 only allowed");
- case MBIM_NW_ERROR_INVALID_MANDATORY_INFORMATION:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_INVALID_MANDATORY_INFORMATION,
- "Invalid mandatory information");
- case MBIM_NW_ERROR_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_MESSAGE_TYPE_NOT_IMPLEMENTED,
- "Message type nonexistent or not implemented");
- case MBIM_NW_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
- "Message type not compatible with protocol state");
- case MBIM_NW_ERROR_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_IE_NOT_IMPLEMENTED,
- "Information element nonexistent or not implemented");
- case MBIM_NW_ERROR_CONDITIONAL_IE_ERROR:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_CONDITIONAL_IE_ERROR,
- "Conditional IE error");
- case MBIM_NW_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE,
- "Message not compatible with protocol state");
- case MBIM_NW_ERROR_APN_RESTRICTION_VALUE_INCOMPATIBLE_WITH_ACTIVE_PDP_CONTEXT:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_APN_RESTRICTION_INCOMPATIBLE,
- "APN restriction incompatible with active bearer");
- case MBIM_NW_ERROR_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_MULTIPLE_ACCESS_TO_PDN_CONNECTION_NOT_ALLOWED,
- "Multiple accesses to PDN connection not allowed");
- case MBIM_NW_ERROR_UNKNOWN:
- return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
- MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN,
- "Unknown error");
- case MBIM_NW_ERROR_MAC_FAILURE:
- case MBIM_NW_ERROR_SYNCH_FAILURE:
- default:
- msg = mbim_nw_error_get_string (nw_error);
+ /* provide a nicer error message on unmapped errors */
+ msg = mbim_nw_error_get_string (nw_error);
+ if (msg)
return g_error_new (MM_MOBILE_EQUIPMENT_ERROR,
MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN,
"Unsupported error (%u): %s",
- nw_error, msg ? msg : "unknown");
- }
+ nw_error, msg);
+
+ /* fallback */
+ return g_error_new_literal (MM_MOBILE_EQUIPMENT_ERROR,
+ MM_MOBILE_EQUIPMENT_ERROR_UNKNOWN,
+ "Unknown error");
}
/*****************************************************************************/
diff --git a/src/mm-modem-helpers-mbim.h b/src/mm-modem-helpers-mbim.h
index bb8c8648..35ee98f1 100644
--- a/src/mm-modem-helpers-mbim.h
+++ b/src/mm-modem-helpers-mbim.h
@@ -40,7 +40,8 @@ GList *mm_3gpp_network_info_list_from_mbim_providers (const MbimProvider *const
MbimPinType mbim_pin_type_from_mm_modem_3gpp_facility (MMModem3gppFacility facility);
-GError *mm_mobile_equipment_error_from_mbim_nw_error (MbimNwError nw_error);
+GError *mm_mobile_equipment_error_from_mbim_nw_error (MbimNwError nw_error,
+ gpointer log_object);
MMBearerAllowedAuth mm_bearer_allowed_auth_from_mbim_auth_protocol (MbimAuthProtocol auth_protocol);
MbimAuthProtocol mm_bearer_allowed_auth_to_mbim_auth_protocol (MMBearerAllowedAuth bearer_auth,