From 957a141e57e622a9d7eeac160d67be5b0b4cdf7c Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 24 Apr 2025 20:17:47 -0500 Subject: base-call: interpret DTMF character ',' as two-second pause Do what other dialers do and interpret ',' as a short pause, which helps handle automated menus. Signed-off-by: Dan Williams --- src/mm-base-call.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'src/mm-base-call.c') diff --git a/src/mm-base-call.c b/src/mm-base-call.c index 3f4e081a..68f77b80 100644 --- a/src/mm-base-call.c +++ b/src/mm-base-call.c @@ -870,10 +870,12 @@ send_dtmf_task_step_next (GTask *task) SendDtmfContext *ctx; gboolean need_stop; MMBaseCall *self; + gboolean is_pause; self = g_task_get_source_object (task); ctx = g_task_get_task_data (task); + is_pause = (ctx->dtmf[0] == MM_CALL_DTMF_PAUSE_CHAR); need_stop = MM_BASE_CALL_GET_CLASS (self)->stop_dtmf && MM_BASE_CALL_GET_CLASS (self)->stop_dtmf_finish; @@ -882,23 +884,30 @@ send_dtmf_task_step_next (GTask *task) ctx->step++; /* Fall through */ case DTMF_STEP_START: - MM_BASE_CALL_GET_CLASS (self)->send_dtmf (self, - ctx->dtmf, - (GAsyncReadyCallback)send_dtmf_ready, - g_object_ref (task)); - break; + if (!is_pause) { + MM_BASE_CALL_GET_CLASS (self)->send_dtmf (self, + ctx->dtmf, + (GAsyncReadyCallback)send_dtmf_ready, + g_object_ref (task)); + return; + } + /* Fall through */ case DTMF_STEP_TIMEOUT: - if (need_stop) { + if (need_stop || is_pause) { + guint duration; + + duration = is_pause ? 2000 : mm_base_call_get_dtmf_tone_duration (self); + /* Disable DTMF press after DTMF tone duration elapses */ - ctx->timeout_id = g_timeout_add (mm_base_call_get_dtmf_tone_duration (self), + ctx->timeout_id = g_timeout_add (duration, (GSourceFunc) dtmf_timeout, task); return; } /* Fall through */ case DTMF_STEP_STOP: - if (need_stop) { - send_dtmf_context_clear_timeout (ctx); + send_dtmf_context_clear_timeout (ctx); + if (need_stop && !is_pause) { MM_BASE_CALL_GET_CLASS (self)->stop_dtmf (self, (GAsyncReadyCallback)stop_dtmf_ready, g_object_ref (task)); -- cgit v1.2.3-70-g09d2