aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-02-15 23:07:12 +0000
committermmichelson <mmichelson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-02-15 23:07:12 +0000
commit499db0e1b2385c82b6d007a9d6f4e50d056d03c3 (patch)
tree04d8fe3821b35605ffa0682f735c40599376d2f1
parent61977e15cf1bc3d0d9f47c9819e2ba3129a1a63d (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.c33
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);
}
/*!