diff --git a/apps/app_senddtmf.c b/apps/app_senddtmf.c
index e0362e7d30..ea75a9e5fb 100644
--- a/apps/app_senddtmf.c
+++ b/apps/app_senddtmf.c
@@ -80,6 +80,9 @@
The duration, in milliseconds, of the digit to be played.
+
+ Emulate receiving DTMF on this channel instead of sending it out.
+
Plays a dtmf digit on the specified channel.
@@ -147,6 +150,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;
@@ -167,7 +171,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);