diff options
author | Mark Michelson <mmichelson@digium.com> | 2008-02-15 23:07:12 +0000 |
---|---|---|
committer | Mark Michelson <mmichelson@digium.com> | 2008-02-15 23:07:12 +0000 |
commit | 566a005512e49539f5400868ac98717b833201b6 (patch) | |
tree | 04d8fe3821b35605ffa0682f735c40599376d2f1 /main/pbx.c | |
parent | 30c0e089f65a878fbb6bde59acfa8e3a50a6ed21 (diff) |
Add proper "false" case behavior to GotoIfTime
(closes issue #11719)
Reported by: kshumard
Patches:
gotoiftime.twobranches.patch uploaded by kshumard (license 92)
Tested by: kshumard
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@103738 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/pbx.c')
-rw-r--r-- | main/pbx.c | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/main/pbx.c b/main/pbx.c index 0638333a3..2df20327e 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -529,12 +529,17 @@ static struct pbx_builtin { { "GotoIfTime", pbx_builtin_gotoiftime, "Conditional Goto based on the current time", - " GotoIfTime(<times>,<weekdays>,<mdays>,<months>?[[context,]exten,]priority):\n" + " GotoIfTime(<times>,<weekdays>,<mdays>,<months>?[labeliftrue]:[labeliffalse]):\n" "This application will set the context, extension, and priority in the channel structure\n" - "if the current time matches the given time specification. Otherwise, nothing is done.\n" + "based on the evaluation of the given time specification. After this application completes,\n" + "the pbx engine will continue dialplan execution at the specified location in the dialplan.\n" + "If the current time is within the given time specification, the channel will continue at\n" + "'labeliftrue'. Otherwise the channel will continue at 'labeliffalse'. If the label chosen\n" + "by the condition is omitted, no jump is performed, and execution passes to the next\n" + "instruction. If the target jump location is bogus, the same actions would be taken as for\n" + "Goto.\n" "Further information on the time specification can be found in examples\n" - "illustrating how to do time-based context includes in the dialplan.\n" - "If the target jump location is bogus, the same actions would be taken as for Goto.\n" + "illustrating how to do time-based context includes in the dialplan.\n" }, { "ImportVar", pbx_builtin_importvar, @@ -6903,12 +6908,11 @@ static int pbx_builtin_hangup(struct ast_channel *chan, void *data) */ static int pbx_builtin_gotoiftime(struct ast_channel *chan, void *data) { - int res = 0; - char *s, *ts; + char *s, *ts, *branch1, *branch2, *branch; struct ast_timing timing; if (ast_strlen_zero(data)) { - ast_log(LOG_WARNING, "GotoIfTime requires an argument:\n <time range>,<days of week>,<days of month>,<months>?[[context,]extension,]priority\n"); + ast_log(LOG_WARNING, "GotoIfTime requires an argument:\n <time range>,<days of week>,<days of month>,<months>?'labeliftrue':'labeliffalse'\n"); return -1; } @@ -6916,12 +6920,21 @@ static int pbx_builtin_gotoiftime(struct ast_channel *chan, void *data) /* Separate the Goto path */ strsep(&ts, "?"); + branch1 = strsep(&ts,":"); + branch2 = strsep(&ts,""); /* struct ast_include include contained garbage here, fixed by zeroing it on get_timerange */ if (ast_build_timing(&timing, s) && ast_check_timing(&timing)) - res = pbx_builtin_goto(chan, ts); - - return res; + branch = branch1; + else + branch = branch2; + + if (ast_strlen_zero(branch)) { + ast_debug(1, "Not taking any branch\n"); + return 0; + } + + return pbx_builtin_goto(chan, branch); } /*! |