From fd40752954b842eb45fc6b6a0ef03fa21d0eab2b Mon Sep 17 00:00:00 2001
From: Naveen Albert <mail@interlinked.x10host.com>
Date: Thu, 13 May 2021 09:50:02 -0400
Subject: [PATCH] chan_sip: Expand hook flash recognition.

Some ATAs send hook flash events as application/hook-flash, rather than a DTMF
event. Now, we also recognize hook-flash as a flash event.

ASTERISK-29370

Change-Id: I1c3b82a040dff3affcd94bad8ce33edc90c04725
---
 channels/chan_sip.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 77e1b24252..d00d615ba0 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -22627,6 +22627,18 @@ static void handle_request_info(struct sip_pvt *p, struct sip_request *req)
 	const char *c = sip_get_header(req, "Content-Type");
 
 	/* Need to check the media/type */
+
+	if (!strcasecmp(c, "application/hook-flash")) {
+		/* send a FLASH event, for ATAs that send flash as hook-flash not dtmf */
+		struct ast_frame f = { AST_FRAME_CONTROL, { AST_CONTROL_FLASH, } };
+		ast_queue_frame(p->owner, &f);
+		if (sipdebug) {
+			ast_verbose("* DTMF-relay event received: FLASH\n");
+		}
+		transmit_response(p, "200 OK", req);
+		return;
+	}
+
 	if (!strcasecmp(c, "application/dtmf-relay") ||
 	    !strcasecmp(c, "application/vnd.nortelnetworks.digits") ||
 	    !strcasecmp(c, "application/dtmf")) {
-- 
GitLab