diff --git a/CHANGES b/CHANGES
index cbde563536..011ce8e702 100644
--- a/CHANGES
+++ b/CHANGES
@@ -45,6 +45,15 @@ Queue changes
* Added queue options autopausebusy and autopauseunavail for automatically
pausing a queue member when their device reports busy or congestion.
+Applications
+------------
+ * Added 'j' option to SayUnixTime. SayUnixTime no longer auto jumps to extension
+ when receiving DTMF. Use the 'j' option to enable extension jumping. Also
+ changed arguments to SayUnixTime so that every option is truly optional even
+ when using multiple options (so that j option could be used without having to
+ manually specify timezone and format) There are other beneftis eg. format can
+ now be used without specifying time zone as well.
+
CDR postgresql driver changes
-----------------------------
* Added command "cdr show pgsql status" to check connection status
diff --git a/apps/app_sayunixtime.c b/apps/app_sayunixtime.c
index fc1b238dd8..8a3756225c 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.
-
+ time, in seconds since Jan 1, 1970. May be negative. Defaults to now.
-
+ timezone, see /usr/share/zoneinfo for a list. Defaults to machine default.
-
+ a format the time is to be said in. See voicemail.conf.
Defaults to ABdY "digits/at" IMp
+
+
+
+
+ Uses some of the sound files stored in /var/lib/asterisk/sounds 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;
+ }
+ }
- if (chan->_state != AST_STATE_UP)
+ ast_get_time_t(ast_strlen_zero(args.timeval) ? NULL : args.timeval, &unixtime, time(NULL), NULL);
+
+ 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;
}
diff --git a/include/asterisk/file.h b/include/asterisk/file.h
index 4b03251011..e7817b3777 100644
--- a/include/asterisk/file.h
+++ b/include/asterisk/file.h
@@ -44,6 +44,7 @@ struct ast_format;
#define AST_MAX_FORMATS 10
/*! Convenient for waiting */
+#define AST_DIGIT_NONE ""
#define AST_DIGIT_ANY "0123456789#*ABCD"
#define AST_DIGIT_ANYNUM "0123456789"