diff options
Diffstat (limited to 'plugins/huawei/mm-call-huawei.c')
-rw-r--r-- | plugins/huawei/mm-call-huawei.c | 20 |
1 files changed, 16 insertions, 4 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; } |