]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_senddtmf: Add receive mode to AMI Action PlayDTMF
authorlvl <digium@lvlconsultancy.nl>
Thu, 7 Nov 2019 17:05:39 +0000 (17:05 +0000)
committerlvl <digium@lvlconsultancy.nl>
Mon, 18 Nov 2019 23:09:57 +0000 (18:09 -0500)
ASTERISK-28614

Change-Id: I183501297ae1dc294ae56b34acac9b0343eb2664

apps/app_senddtmf.c

index 5dde8dc336ca505ba140d1510a5d2a4d1f2c20fa..d873757356d705f4681fe34b35967a5236283ec8 100644 (file)
@@ -82,6 +82,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
                        <parameter name="Duration" required="false">
                                <para>The duration, in milliseconds, of the digit to be played.</para>
                        </parameter>
+                       <parameter name="Receive" required="false">
+                               <para>Emulate receiving DTMF on this channel instead of sending it out.</para>
+                       </parameter>
                </syntax>
                <description>
                        <para>Plays a dtmf digit on the specified channel.</para>
@@ -149,6 +152,7 @@ static int manager_play_dtmf(struct mansession *s, const struct message *m)
        const char *channel = astman_get_header(m, "Channel");
        const char *digit = astman_get_header(m, "Digit");
        const char *duration = astman_get_header(m, "Duration");
+       const char *receive_s = astman_get_header(m, "Receive");
        struct ast_channel *chan;
        unsigned int duration_ms = 0;
 
@@ -169,7 +173,14 @@ static int manager_play_dtmf(struct mansession *s, const struct message *m)
                return 0;
        }
 
-       ast_senddigit_external(chan, *digit, duration_ms);
+       if (ast_true(receive_s)) {
+               struct ast_frame f = { AST_FRAME_DTMF, };
+               f.len = duration_ms;
+               f.subclass.integer = *digit;
+               ast_queue_frame(chan, &f);
+       } else {
+               ast_senddigit_external(chan, *digit, duration_ms);
+       }
 
        chan = ast_channel_unref(chan);