[asterisk-commits] mmichelson: trunk r265453 - /trunk/apps/app_senddtmf.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Mon May 24 17:16:31 CDT 2010
Author: mmichelson
Date: Mon May 24 17:16:29 2010
New Revision: 265453
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=265453
Log:
Allow SendDTMF to play digits to a specified channel.
Patch supplied by reporter was modified to use autoservice and
prevent a potential channel ref leak but is otherwise as the
reporter uploaded it.
(closes issue #17109)
Reported by: under
Patches:
logstream.diff uploaded by under (license 914)
Modified:
trunk/apps/app_senddtmf.c
Modified: trunk/apps/app_senddtmf.c
URL: http://svnview.digium.com/svn/asterisk/trunk/apps/app_senddtmf.c?view=diff&rev=265453&r1=265452&r2=265453
==============================================================================
--- trunk/apps/app_senddtmf.c (original)
+++ trunk/apps/app_senddtmf.c Mon May 24 17:16:29 2010
@@ -50,6 +50,9 @@
<parameter name="duration_ms" required="false">
<para>Duration of each digit</para>
</parameter>
+ <parameter name="channel" required="false">
+ <para>Channel where digits will be played</para>
+ </parameter>
</syntax>
<description>
<para>DTMF digits sent to a channel with half second pause</para>
@@ -84,16 +87,20 @@
int res = 0;
char *data;
int dinterval = 0, duration = 0;
+ struct ast_channel *dchan;
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(digits);
AST_APP_ARG(dinterval);
AST_APP_ARG(duration);
+ AST_APP_ARG(channel);
);
if (ast_strlen_zero(vdata)) {
ast_log(LOG_WARNING, "SendDTMF requires an argument (digits or *#aAbBcCdD)\n");
return 0;
}
+
+ dchan = chan;
data = ast_strdupa(vdata);
AST_STANDARD_APP_ARGS(args, data);
@@ -104,8 +111,17 @@
if (!ast_strlen_zero(args.duration)) {
ast_app_parse_timelen(args.duration, &duration, TIMELEN_MILLISECONDS);
}
-
- res = ast_dtmf_stream(chan, NULL, args.digits, dinterval <= 0 ? 250 : dinterval, duration);
+ if (!ast_strlen_zero(args.channel)) {
+ dchan = ast_channel_get_by_name(args.channel);
+ }
+ if (dchan != chan) {
+ ast_autoservice_start(chan);
+ }
+ res = ast_dtmf_stream(dchan, NULL, args.digits, dinterval <= 0 ? 250 : dinterval, duration);
+ if (dchan != chan) {
+ ast_autoservice_stop(chan);
+ ast_channel_unref(dchan);
+ }
return res;
}
More information about the asterisk-commits
mailing list