diff --git a/CHANGES b/CHANGES index 83728500ea..344f28f230 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 e1e8ee92f0..7db9a3f4b7 100644 --- a/apps/app_senddtmf.c +++ b/apps/app_senddtmf.c @@ -79,6 +79,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") The DTMF digit to play. + + The duration, in milliseconds, of the digit to be played. + Plays a dtmf digit on the specified channel. @@ -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);