diff options
author | Riccardo Vangelisti <riccardo.vangelisti@sadel.it> | 2015-05-07 17:16:29 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2015-08-02 10:39:47 +0200 |
commit | 40fae5fcbae32a37ae974245008359435e70a91f (patch) | |
tree | 6e4f27a2edf793107422b7629e4a3d9079d52817 | |
parent | bf416045dfda22f91e066640d1202e8241a21c0a (diff) |
base-call: refactoring of error handling when call starts
-rw-r--r-- | plugins/huawei/mm-call-huawei.c | 20 | ||||
-rw-r--r-- | src/mm-base-call.c | 24 |
2 files changed, 33 insertions, 11 deletions
diff --git a/plugins/huawei/mm-call-huawei.c b/plugins/huawei/mm-call-huawei.c index 2038374d..f92fb2d4 100644 --- a/plugins/huawei/mm-call-huawei.c +++ b/plugins/huawei/mm-call-huawei.c @@ -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; } diff --git a/src/mm-base-call.c b/src/mm-base-call.c index d6e49922..bc4f0311 100644 --- a/src/mm-base-call.c +++ b/src/mm-base-call.c @@ -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); |