diff options
-rw-r--r-- | src/mm-bearer-mbim.c | 6 | ||||
-rw-r--r-- | src/mm-broadband-modem-mbim.c | 9 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.c | 255 | ||||
-rw-r--r-- | src/mm-modem-helpers-mbim.h | 3 |
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, |