icera: try to gather extended connection failed reasons when reporting error

This commit is contained in:
Aleksander Morgado
2012-07-19 15:04:16 +02:00
parent 7209a09033
commit 051b79cba3

View File

@@ -30,6 +30,7 @@
#include "mm-base-modem-at.h" #include "mm-base-modem-at.h"
#include "mm-log.h" #include "mm-log.h"
#include "mm-modem-helpers.h" #include "mm-modem-helpers.h"
#include "mm-error-helpers.h"
#include "mm-utils.h" #include "mm-utils.h"
G_DEFINE_TYPE (MMBroadbandBearerIcera, mm_broadband_bearer_icera, MM_TYPE_BROADBAND_BEARER); G_DEFINE_TYPE (MMBroadbandBearerIcera, mm_broadband_bearer_icera, MM_TYPE_BROADBAND_BEARER);
@@ -552,6 +553,40 @@ connect_cancelled_cb (GCancellable *cancellable,
connect_reset (ctx); connect_reset (ctx);
} }
static void
ier_query_ready (MMBaseModem *modem,
GAsyncResult *res,
Dial3gppContext *ctx)
{
const gchar *response;
GError *activation_error = NULL;
response = mm_base_modem_at_command_full_finish (modem, res, NULL);
if (response) {
gint nw_activation_err;
response = mm_strip_tag (response, "%IER:");
if (sscanf (response, "%*d,%*d,%d", &nw_activation_err)) {
/* 3GPP TS 24.008 Annex G error codes:
* 27 - Unknown or missing access point name
* 33 - Requested service option not subscribed
*/
if (nw_activation_err == 27 || nw_activation_err == 33)
activation_error = mm_mobile_equipment_error_for_code (
MM_MOBILE_EQUIPMENT_ERROR_GPRS_SERVICE_OPTION_NOT_SUBSCRIBED);
}
}
if (activation_error)
g_simple_async_result_take_error (ctx->result, activation_error);
else
g_simple_async_result_set_error (ctx->result,
MM_CORE_ERROR,
MM_CORE_ERROR_FAILED,
"Call setup failed");
dial_3gpp_context_complete_and_free (ctx);
}
static void static void
report_connect_status (MMBroadbandBearerIcera *self, report_connect_status (MMBroadbandBearerIcera *self,
MMBroadbandBearerIceraConnectionStatus status) MMBroadbandBearerIceraConnectionStatus status)
@@ -591,11 +626,16 @@ report_connect_status (MMBroadbandBearerIcera *self,
if (!ctx) if (!ctx)
break; break;
g_simple_async_result_set_error (ctx->result, /* Try to gather additional info about the connection failure */
MM_CORE_ERROR, mm_base_modem_at_command_full (
MM_CORE_ERROR_FAILED, ctx->modem,
"Call setup failed"); ctx->primary,
dial_3gpp_context_complete_and_free (ctx); "%IER?",
60,
FALSE,
NULL, /* cancellable */
(GAsyncReadyCallback)ier_query_ready,
ctx);
return; return;
case MM_BROADBAND_BEARER_ICERA_CONNECTION_STATUS_DISCONNECTED: case MM_BROADBAND_BEARER_ICERA_CONNECTION_STATUS_DISCONNECTED: