add time of day routing attrs to condition tags in xml dialplan

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@14137 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale
2009-07-06 18:31:23 +00:00
parent 1e8eb422f0
commit 835b6d31bb
3 changed files with 101 additions and 0 deletions
@@ -44,6 +44,7 @@ typedef enum {
BREAK_NEVER
} break_t;
static int parse_exten(switch_core_session_t *session, switch_caller_profile_t *caller_profile, switch_xml_t xexten, switch_caller_extension_t **extension)
{
switch_xml_t xcond, xaction, xexpression;
@@ -64,6 +65,18 @@ static int parse_exten(switch_core_session_t *session, switch_caller_profile_t *
switch_regex_t *re = NULL;
int ovector[30];
break_t do_break_i = BREAK_ON_FALSE;
const char *xyear = switch_xml_attr(xcond, "year");
const char *xyday = switch_xml_attr(xcond, "yday");
const char *xmon = switch_xml_attr(xcond, "mon");
const char *xmday = switch_xml_attr(xcond, "mday");
const char *xweek = switch_xml_attr(xcond, "week");
const char *xwday = switch_xml_attr(xcond, "wday");
const char *xhour = switch_xml_attr(xcond, "hour");
const char *xminute = switch_xml_attr(xcond, "minute");
switch_time_t ts = switch_micro_time_now();
int time_match = -1;
switch_time_exp_t tm;
switch_safe_free(field_expanded);
switch_safe_free(expression_expanded);
@@ -74,6 +87,40 @@ static int parse_exten(switch_core_session_t *session, switch_caller_profile_t *
goto done;
}
switch_time_exp_lt(&tm, ts);
if (time_match && xyear) {
time_match = switch_number_cmp(xyear, tm.tm_year + 1900);
}
if (time_match && xyday) {
time_match = switch_number_cmp(xyday, tm.tm_yday + 1);
}
if (time_match && xmon) {
time_match = switch_number_cmp(xmon, tm.tm_mon + 1);
}
if (time_match && xmday) {
time_match = switch_number_cmp(xmday, tm.tm_mday);
}
if (time_match && xweek) {
time_match = switch_number_cmp(xweek, (int) (tm.tm_yday + 1 / 7));
}
if (time_match && xwday) {
time_match = switch_number_cmp(xwday, tm.tm_wday + 1);
}
if (time_match && xhour) {
time_match = switch_number_cmp(xhour, tm.tm_hour);
}
if (time_match && xminute) {
time_match = switch_number_cmp(xminute, tm.tm_min + 1);
}
field = (char *) switch_xml_attr(xcond, "field");
if ((xexpression = switch_xml_child(xcond, "expression"))) {
@@ -102,6 +149,17 @@ static int parse_exten(switch_core_session_t *session, switch_caller_profile_t *
}
}
if (time_match == 0) {
if (do_break_i == BREAK_ON_FALSE || do_break_i == BREAK_ALWAYS) {
break;
} else if (do_break_i == BREAK_NEVER) {
continue;
} else {
proceed = 0;
goto done;
}
}
if (field) {
if (strchr(field, '$')) {
if ((field_expanded = switch_channel_expand_variables(channel, field)) == field) {