base-call: refactoring of error handling when call starts

This commit is contained in:
Riccardo Vangelisti
2015-05-07 17:16:29 +02:00
committed by Aleksander Morgado
parent bf416045df
commit 40fae5fcba
2 changed files with 33 additions and 11 deletions

View File

@@ -60,13 +60,25 @@ call_start_ready (MMBaseModem *modem,
response = mm_base_modem_at_command_finish (modem, res, &error);
if (error) {
if (g_error_matches (error, MM_SERIAL_ERROR, MM_SERIAL_ERROR_RESPONSE_TIMEOUT)) {
g_simple_async_result_take_error (ctx->result, error);
call_start_context_complete_and_free (ctx);
return;
/* something is wrong, serial timeout could never occurs */
}
if (g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_DIALTONE)) {
/* Update state */
mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_ERROR);
}
if (g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_BUSY) ||
g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_ANSWER) ||
g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_CARRIER) )
{
/* Update state */
mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_REFUSED_OR_BUSY);
}
mm_dbg ("Couldn't start call : '%s'", error->message);
g_error_free (error);
g_simple_async_result_take_error (ctx->result, error);
call_start_context_complete_and_free (ctx);
return;
}

View File

@@ -495,13 +495,25 @@ call_start_ready (MMBaseModem *modem,
response = mm_base_modem_at_command_finish (modem, res, &error);
if (error) {
if (g_error_matches (error, MM_SERIAL_ERROR, MM_SERIAL_ERROR_RESPONSE_TIMEOUT)) {
g_simple_async_result_take_error (ctx->result, error);
call_start_context_complete_and_free (ctx);
return;
/* something is wrong, serial timeout could never occurs */
}
if (g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_DIALTONE)) {
/* Update state */
mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_ERROR);
}
if (g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_BUSY) ||
g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_ANSWER) ||
g_error_matches (error, MM_CONNECTION_ERROR, MM_CONNECTION_ERROR_NO_CARRIER) )
{
/* Update state */
mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_REFUSED_OR_BUSY);
}
mm_dbg ("Couldn't start call : '%s'", error->message);
g_error_free (error);
g_simple_async_result_take_error (ctx->result, error);
call_start_context_complete_and_free (ctx);
return;
}
@@ -510,15 +522,13 @@ call_start_ready (MMBaseModem *modem,
g_set_error (&error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"Couldn't start the call: "
"Modem response '%s'", response);
/* Update state */
mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_REFUSED_OR_BUSY);
} else {
/* Update state */
mm_base_call_change_state(ctx->self, MM_CALL_STATE_ACTIVE, MM_CALL_STATE_REASON_ACCEPTED);
}
if (error) {
g_simple_async_result_take_error (ctx->result, error);
call_start_context_complete_and_free (ctx);