switch_utils: Add time of day string compare function switch_tod_cmp. It usable in XML dialplan with time-of-day. String format is hh:mm:ss you can define a range like this : 09:00-17:00 (Second are not optional)
This commit is contained in:
parent
7112c94e29
commit
4ab8fa13e1
|
@ -681,6 +681,7 @@ SWITCH_DECLARE(switch_bool_t) switch_network_list_validate_ip_token(switch_netwo
|
|||
SWITCH_DECLARE(int) switch_inet_pton(int af, const char *src, void *dst);
|
||||
|
||||
SWITCH_DECLARE(int) switch_number_cmp(const char *exp, int val);
|
||||
SWITCH_DECLARE(int) switch_tod_cmp(const char *exp, int val);
|
||||
|
||||
/*!
|
||||
\brief Split a user@domain string as user and domain
|
||||
|
|
|
@ -2375,6 +2375,49 @@ SWITCH_DECLARE(int) switch_number_cmp(const char *exp, int val)
|
|||
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(int) switch_tod_cmp(const char *exp, int val)
|
||||
{
|
||||
char *dup = strdup(exp);
|
||||
char *minh;
|
||||
char *minm;
|
||||
char *mins;
|
||||
char *maxh;
|
||||
char *maxm;
|
||||
char *maxs;
|
||||
|
||||
switch_assert(dup);
|
||||
|
||||
minh = dup;
|
||||
if ((minm=strchr(dup, ':'))) {
|
||||
*minm++ = '\0';
|
||||
if ((maxh=strchr(minm, '-'))) {
|
||||
if ((maxm=strchr(maxh, ':'))) {
|
||||
*maxh++ = '\0';
|
||||
*maxm++ = '\0';
|
||||
/* Check if min/max seconds are present */
|
||||
if ((mins=strchr(minm, ':'))) {
|
||||
*mins++ = '\0';
|
||||
} else {
|
||||
mins = "00";
|
||||
}
|
||||
if ((maxs=strchr(maxm, ':'))) {
|
||||
*maxs++ = '\0';
|
||||
} else {
|
||||
maxs = "00";
|
||||
}
|
||||
|
||||
if (val >= (atol(minh) * 60 * 60) + (atol(minm) * 60) + atol(mins) && val < (atol(maxh) * 60 * 60) + (atol(maxm) * 60) + atol(maxs)) {
|
||||
switch_safe_free(dup);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
switch_safe_free(dup);
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(int) switch_split_user_domain(char *in, char **user, char **domain)
|
||||
{
|
||||
char *p = NULL, *h = NULL, *u = in;
|
||||
|
|
|
@ -2662,6 +2662,7 @@ SWITCH_DECLARE(int) switch_xml_std_datetime_check(switch_xml_t xcond) {
|
|||
const char *xhour = switch_xml_attr(xcond, "hour");
|
||||
const char *xminute = switch_xml_attr(xcond, "minute");
|
||||
const char *xminday = switch_xml_attr(xcond, "minute-of-day");
|
||||
const char *xtod = switch_xml_attr(xcond, "time-of-day");
|
||||
|
||||
switch_time_t ts = switch_micro_time_now();
|
||||
int time_match = -1;
|
||||
|
@ -2747,6 +2748,15 @@ SWITCH_DECLARE(int) switch_xml_std_datetime_check(switch_xml_t xcond) {
|
|||
"XML DateTime Check: minute of day[%d] =~ %s (%s)\n", test, xminday, time_match ? "PASS" : "FAIL");
|
||||
}
|
||||
|
||||
if (time_match && xtod) {
|
||||
int test = (tm.tm_hour * 60 * 60) + (tm.tm_min * 60) + tm.tm_sec;
|
||||
char tmpdate[10];
|
||||
switch_snprintf(tmpdate, 6, "%d:%d:%d", tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||
time_match = switch_tod_cmp(xtod, test);
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
|
||||
"XML DateTime Check: time of day[%s] =~ %s (%s)\n", tmpdate, xtod, time_match ? "PASS" : "FAIL");
|
||||
}
|
||||
|
||||
return time_match;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue