]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip_dtmf_info: Hook flash
authorNaveen Albert <asterisk@phreaknet.org>
Wed, 2 Jun 2021 13:25:12 +0000 (09:25 -0400)
committerGeorge Joseph <gjoseph@digium.com>
Tue, 8 Jun 2021 20:46:08 +0000 (15:46 -0500)
Adds hook flash recognition support
for application/hook-flash.

ASTERISK-29460

Change-Id: I1d060fa89a7cf41244c98f892fff44eb1c9738ea

doc/CHANGES-staging/res_pjsip_dtmf.txt [new file with mode: 0644]
res/res_pjsip_dtmf_info.c

diff --git a/doc/CHANGES-staging/res_pjsip_dtmf.txt b/doc/CHANGES-staging/res_pjsip_dtmf.txt
new file mode 100644 (file)
index 0000000..4dc2088
--- /dev/null
@@ -0,0 +1,5 @@
+res_pjsip_dtmf_info: Hook flash
+
+Adds recognition for application/
+hook-flash as a hook flash event.
+
index 3d1223d0017fbb76dc88bd571db8ba42316abfef..bbc0640661dbc46790c638f1ff9055284b280429 100644 (file)
@@ -87,7 +87,7 @@ static int dtmf_info_incoming_request(struct ast_sip_session *session, struct pj
        char *line;
        char event = '\0';
        unsigned int duration = 100;
-       char is_dtmf;
+       char is_dtmf, is_dtmf_relay, is_flash;
        int res;
 
        if (!session->channel) {
@@ -95,8 +95,10 @@ static int dtmf_info_incoming_request(struct ast_sip_session *session, struct pj
        }
 
        is_dtmf = is_media_type(rdata, "dtmf");
+       is_dtmf_relay = is_media_type(rdata, "dtmf-relay");
+       is_flash = is_media_type(rdata, "hook-flash");
 
-       if (!is_dtmf && !is_media_type(rdata, "dtmf-relay")) {
+       if (!is_flash && !is_dtmf && !is_dtmf_relay) {
                return 0;
        }
 
@@ -116,7 +118,7 @@ static int dtmf_info_incoming_request(struct ast_sip_session *session, struct pj
        if (is_dtmf) {
                /* directly use what is in the message body */
                event = get_event(cur);
-       } else { /* content type = application/dtmf-relay */
+       } else if (is_dtmf_relay) { /* content type = application/dtmf-relay */
                while ((line = strsep(&cur, "\r\n"))) {
                        char *c;
 
@@ -137,7 +139,7 @@ static int dtmf_info_incoming_request(struct ast_sip_session *session, struct pj
                }
        }
 
-       if (event == '!') {
+       if (event == '!' || is_flash) {
                struct ast_frame f = { AST_FRAME_CONTROL, { AST_CONTROL_FLASH, } };
                ast_queue_frame(session->channel, &f);
        } else if (event != '\0') {