From a6528cff2e0e9254b966ceebd6e063136f480fea Mon Sep 17 00:00:00 2001 From: Yalu Zhang <yalu.zhang@iopsys.eu> Date: Tue, 26 Nov 2024 09:47:12 +0000 Subject: [PATCH] Set sub-channel state correctly when event RELEASE is received from voicemngr Set both sub-channels' state to ONHOOK if the current state is AWAITHOOK or CALLENDED. --- src/channels/chan_voicemngr.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c index 5cb946f..25024c1 100644 --- a/src/channels/chan_voicemngr.c +++ b/src/channels/chan_voicemngr.c @@ -3035,8 +3035,20 @@ static void handle_dect_event(struct chan_voicemngr_subchannel *sub, struct chan } } else if (event == EVENT_RELEASE) { ast_log(LOG_NOTICE, "EVENT_RELEASE detected for phone line %d\n", sub->parent->line_id); - if (sub->channel_state == AWAITONHOOK && sub_peer->channel_state == ONHOOK) { + + // Delete timer + if (sub->congestion_timer_id != -1) { + if(ast_sched_del(sched, sub->congestion_timer_id)){ + ast_log(LOG_WARNING, "Failed to remove scheduled congestion tone timer\n"); + } + sub->congestion_timer_id = -1; + } + + // Update state + if (sub->channel_state == AWAITONHOOK && (sub_peer->channel_state == ONHOOK || sub_peer->channel_state == CALLENDED)) { chan_voicemngr_close_connection(sub); + sub->channel_state = ONHOOK; + sub_peer->channel_state = ONHOOK; } else if (sub->channel_state == INCALL && sub_peer->channel_state != CALLWAITING) { ast_log(LOG_ERROR, "Hanging up call\n"); ast_queue_control(owner, AST_CONTROL_HANGUP); -- GitLab