diff options
author | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-02-15 23:07:12 +0000 |
---|---|---|
committer | mmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-02-15 23:07:12 +0000 |
commit | 499db0e1b2385c82b6d007a9d6f4e50d056d03c3 (patch) | |
tree | 04d8fe3821b35605ffa0682f735c40599376d2f1 | |
parent | 61977e15cf1bc3d0d9f47c9819e2ba3129a1a63d (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: http://svn.digium.com/svn/asterisk/trunk@103738 f38db490-d61c-443f-a65b-d21fe96a405b
-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); } /*! |