summaryrefslogtreecommitdiff
path: root/apps/app_sayunixtime.c
diff options
context:
space:
mode:
authorJonathan Rose <jrose@digium.com>2011-12-09 20:27:03 +0000
committerJonathan Rose <jrose@digium.com>2011-12-09 20:27:03 +0000
commit518ccb67066cb659bd9760c093c0e5603401659a (patch)
treea772514c6d14d23ce63ef76bff2a6cea39326b6d /apps/app_sayunixtime.c
parent01d3fd2167cba91a2a56902b082153f08b921248 (diff)
Remove autojump extensions from SayUnixTime, make an option to perform automatic jumps.
When a caller sends DTMF while the SayUnixTime application is saying the time, The call would jump to the next extension much like it does during Background(). This patch adds option 'j' to SayUnixTime which when used employs the old behavior. Also, this patch allows arguments to sayunixtime to not be used as empty strings in the case of something like 'sayunixtime(,,,j)' or 'sayunixtime(,,pattern). (closes issue ASTERISK-16675) Reported by: jlpedrosa Patches: patch_SayUnixTime_noJump.patch uploaded by jlpedrosa (license 5959) Review: https://reviewboard.asterisk.org/r/956/ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@347866 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_sayunixtime.c')
-rw-r--r--apps/app_sayunixtime.c57
1 files changed, 47 insertions, 10 deletions
diff --git a/apps/app_sayunixtime.c b/apps/app_sayunixtime.c
index fc1b238dd..8a3756225 100644
--- a/apps/app_sayunixtime.c
+++ b/apps/app_sayunixtime.c
@@ -46,16 +46,23 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
Says a specified time in a custom format.
</synopsis>
<syntax>
- <parameter name="unixtime">
+ <parameter name="unixtime" required="false">
<para>time, in seconds since Jan 1, 1970. May be negative. Defaults to now.</para>
</parameter>
- <parameter name="timezone">
+ <parameter name="timezone" required="false" >
<para>timezone, see <directory>/usr/share/zoneinfo</directory> for a list. Defaults to machine default.</para>
</parameter>
- <parameter name="format">
+ <parameter name="format" required="false" >
<para>a format the time is to be said in. See <filename>voicemail.conf</filename>.
Defaults to <literal>ABdY "digits/at" IMp</literal></para>
</parameter>
+ <parameter name="options" required="false">
+ <optionlist>
+ <option name="j">
+ <para>Allow the calling user to dial digits to jump to that extension.</para>
+ </option>
+ </optionlist>
+ </parameter>
</syntax>
<description>
<para>Uses some of the sound files stored in <directory>/var/lib/asterisk/sounds</directory> to construct a phrase
@@ -90,6 +97,20 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
***/
+enum {
+ OPT_JUMP = (1 << 0),
+};
+
+enum {
+ OPT_ARG_JUMP = 0,
+ /* note: this entry _MUST_ be the last one in the enum */
+ OPT_ARG_ARRAY_SIZE,
+};
+
+AST_APP_OPTIONS(sayunixtime_exec_options, BEGIN_OPTIONS
+ AST_APP_OPTION_ARG('j', OPT_JUMP, OPT_ARG_JUMP),
+END_OPTIONS );
+
static char *app_sayunixtime = "SayUnixTime";
static char *app_datetime = "DateTime";
@@ -99,26 +120,42 @@ static int sayunixtime_exec(struct ast_channel *chan, const char *data)
AST_APP_ARG(timeval);
AST_APP_ARG(timezone);
AST_APP_ARG(format);
+ AST_APP_ARG(options);
);
char *parse;
int res = 0;
time_t unixtime;
-
- if (!data)
+ /* New default behavior is do not jump on key pressed */
+ const char * haltondigits = AST_DIGIT_NONE;
+ struct ast_flags64 opts = { 0, };
+ char *opt_args[OPT_ARG_ARRAY_SIZE];
+
+ if (!data) {
return 0;
+ }
parse = ast_strdupa(data);
AST_STANDARD_APP_ARGS(args, parse);
- ast_get_time_t(args.timeval, &unixtime, time(NULL), NULL);
+ /* check if we had the 'j' jump flag in option list */
+ if (!ast_strlen_zero(args.options)) {
+ ast_app_parse_options64(sayunixtime_exec_options, &opts, opt_args, args.options);
+ if (ast_test_flag64(&opts, OPT_JUMP)){
+ haltondigits = AST_DIGIT_ANY;
+ }
+ }
+
+ ast_get_time_t(ast_strlen_zero(args.timeval) ? NULL : args.timeval, &unixtime, time(NULL), NULL);
- if (chan->_state != AST_STATE_UP)
+ if (chan->_state != AST_STATE_UP) {
res = ast_answer(chan);
+ }
- if (!res)
- res = ast_say_date_with_format(chan, unixtime, AST_DIGIT_ANY,
- chan->language, args.format, args.timezone);
+ if (!res) {
+ res = ast_say_date_with_format(chan, unixtime, haltondigits,
+ chan->language, ast_strlen_zero(args.format) ? NULL : args.format, ast_strlen_zero(args.timezone) ? NULL : args.timezone);
+ }
return res;
}