From dbe9d8e7e7da972a216b2fb597c15a35bf03210a Mon Sep 17 00:00:00 2001
From: Wenpeng Song <wenpeng.song@iopsys.eu>
Date: Tue, 3 Oct 2023 15:19:35 +0000
Subject: [PATCH] Fix for busy tone playing

* Add congestion tone to 404(`AST_CAUSE_UNALLOCATED`) and general indication(`AST_CAUSE_INTERWORKING`)
for response 400-500.
* Add `CALLING` to the condition of the fallback in case of a status like 404 which
  does not even reach the RINGBACK.
---
 src/channels/chan_voicemngr.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/channels/chan_voicemngr.c b/src/channels/chan_voicemngr.c
index 30724ef..9025979 100644
--- a/src/channels/chan_voicemngr.c
+++ b/src/channels/chan_voicemngr.c
@@ -1025,6 +1025,8 @@ static int chan_voicemngr_indicate(struct ast_channel *ast, int condition, const
 		case AST_CAUSE_NO_USER_RESPONSE:
 		case AST_CAUSE_NO_ANSWER:
 		case AST_CAUSE_CONGESTION:
+		case AST_CAUSE_UNALLOCATED:
+		case AST_CAUSE_INTERWORKING:
 			endpt_signal(sub->parent->line_id, "ringback", "off", NULL);
 			if (ast_channel_state(ast) != AST_STATE_UP) {
 				endpt_signal(sub->parent->line_id, "congestion", "on", NULL);
@@ -2926,7 +2928,7 @@ static void handle_dect_event(struct chan_voicemngr_subchannel *sub, struct chan
 		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);
-		} else if ((sub->channel_state == RINGBACK || sub->channel_state == CALLENDED) && sub_peer->channel_state == ONHOLD) {
+		} else if ((sub->channel_state == RINGBACK || sub->channel_state == CALLENDED || sub->channel_state == CALLING) && sub_peer->channel_state == ONHOLD) {
 			endpt_signal(sub->parent->line_id, "ringback", "off", NULL);
 			ast_queue_control(owner, AST_CONTROL_HANGUP);
 			chan_voicemngr_unmute_connection(sub_peer);
-- 
GitLab