summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES3
-rw-r--r--apps/app_senddtmf.c13
2 files changed, 15 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 83728500e..344f28f23 100644
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,9 @@ AMI (Asterisk Manager Interface)
that the request is against a known peer. It also issues a new event,
'SIPqualifypeerdone', once the qualify action has been completed.
+ * The PlayDTMF action now supports an optional 'Duration' parameter. This
+ specifies the duration of the digit to be played, in milliseconds.
+
* Added VoicemailRefresh action to allow an external entity to trigger mailbox
updates when changes occur instead of requiring the use of pollmailboxes.
diff --git a/apps/app_senddtmf.c b/apps/app_senddtmf.c
index e1e8ee92f..7db9a3f4b 100644
--- a/apps/app_senddtmf.c
+++ b/apps/app_senddtmf.c
@@ -79,6 +79,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
<parameter name="Digit" required="true">
<para>The DTMF digit to play.</para>
</parameter>
+ <parameter name="Duration" required="false">
+ <para>The duration, in milliseconds, of the digit to be played.</para>
+ </parameter>
</syntax>
<description>
<para>Plays a dtmf digit on the specified channel.</para>
@@ -145,7 +148,9 @@ 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");
struct ast_channel *chan;
+ unsigned int duration_ms = 0;
if (!(chan = ast_channel_get_by_name(channel))) {
astman_send_error(s, m, "Channel not found");
@@ -157,8 +162,14 @@ static int manager_play_dtmf(struct mansession *s, const struct message *m)
chan = ast_channel_unref(chan);
return 0;
}
+
+ if (!ast_strlen_zero(duration) && (sscanf(duration, "%30u", &duration_ms) != 1)) {
+ astman_send_error(s, m, "Could not convert Duration parameter");
+ chan = ast_channel_unref(chan);
+ return 0;
+ }
- ast_senddigit(chan, *digit, 0);
+ ast_senddigit(chan, *digit, duration_ms);
chan = ast_channel_unref(chan);