]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
factor out timecheck function from Moc
authorMichael Jerris <mike@jerris.com>
Mon, 26 Apr 2010 09:06:30 +0000 (05:06 -0400)
committerMichael Jerris <mike@jerris.com>
Mon, 26 Apr 2010 09:06:30 +0000 (05:06 -0400)
src/include/switch_xml.h
src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c
src/switch_xml.c

index 9a3b72d6fa23dcfbb9dd801a194925b6285c9ce1..220e65df02381841e8c16f5a56c565b78a07945f 100644 (file)
@@ -413,6 +413,8 @@ SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function_ptr(_In_ switc
 ///\return the section mask
 SWITCH_DECLARE(switch_xml_section_t) switch_xml_parse_section_string(_In_opt_z_ const char *str);
 
+SWITCH_DECLARE(int) switch_xml_std_datetime_check(switch_xml_t xcond);
+
 SWITCH_END_EXTERN_C
 ///\}
 #endif // _SWITCH_XML_H
index 4878011cc2867ece05e526a8b2719491870878e3..478b129f5a4f3565cf9668b70556daab7d6c1b13 100644 (file)
@@ -101,19 +101,7 @@ static int parse_exten(switch_core_session_t *session, switch_caller_profile_t *
                switch_bool_t anti_action = SWITCH_TRUE;
                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 *xmweek = switch_xml_attr(xcond, "mweek");
-               const char *xwday = switch_xml_attr(xcond, "wday");
-               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");
-               switch_time_t ts = switch_micro_time_now();
-               int time_match = -1;
-               switch_time_exp_t tm;
+               int time_match = switch_xml_std_datetime_check(xcond);
 
                switch_safe_free(field_expanded);
                switch_safe_free(expression_expanded);
@@ -124,81 +112,6 @@ 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) {
-                       int test = tm.tm_year + 1900;
-                       time_match = switch_number_cmp(xyear, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: year[%d] =~ %s (%s)\n", test, xyear, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xyday) {
-                       int test = tm.tm_yday + 1;
-                       time_match = switch_number_cmp(xyday, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: day of year[%d] =~ %s (%s)\n", test, xyday, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xmon) {
-                       int test = tm.tm_mon + 1;
-                       time_match = switch_number_cmp(xmon, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: month[%d] =~ %s (%s)\n", test, xmon, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xmday) {
-                       int test = tm.tm_mday;
-                       time_match = switch_number_cmp(xmday, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: day of month[%d] =~ %s (%s)\n", test, xmday, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xweek) {
-                       int test = (int) (tm.tm_yday / 7 + 1);
-                       time_match = switch_number_cmp(xweek, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: week of year[%d] =~ %s (%s)\n", test, xweek, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xmweek) {
-                       /* calculate the day of the week of the first of the month (0-6) */
-                       int firstdow = (int) (7 - (tm.tm_mday - (tm.tm_wday + 1)) % 7) % 7;
-                       /* calculate the week of the month (1-6) */
-                       int test = (int) ceil((tm.tm_mday + firstdow) / 7.0);
-                       time_match = switch_number_cmp(xmweek, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: week of month[%d] =~ %s (%s)\n", test, xmweek, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xwday) {
-                       int test = tm.tm_wday + 1;
-                       time_match = switch_number_cmp(xwday, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: day of week[%d] =~ %s (%s)\n", test, xwday, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xhour) {
-                       int test = tm.tm_hour;
-                       time_match = switch_number_cmp(xhour, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: hour[%d] =~ %s (%s)\n", test, xhour, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xminute) {
-                       int test = tm.tm_min;
-                       time_match = switch_number_cmp(xminute, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: minute[%d] =~ %s (%s)\n", test, xminute, time_match ? "PASS" : "FAIL");
-               }
-
-               if (time_match && xminday) {
-                       int test = (tm.tm_hour * 60) + (tm.tm_min + 1);
-                       time_match = switch_number_cmp(xminday, test);
-                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG_CLEAN(session), SWITCH_LOG_DEBUG,
-                                                         "Dialplan: minute of day[%d] =~ %s (%s)\n", test, xminday, time_match ? "PASS" : "FAIL");
-               }
-
                field = (char *) switch_xml_attr(xcond, "field");
 
                if ((xexpression = switch_xml_child(xcond, "expression"))) {
index 3c8bf76833acbd8c6475f7b09796570150fa1a37..efda5dbe12b107a80be0189756309105ecbb4956 100644 (file)
@@ -2601,6 +2601,107 @@ SWITCH_DECLARE(switch_xml_t) switch_xml_cut(switch_xml_t xml)
        return xml;
 }
 
+SWITCH_DECLARE(int) switch_xml_std_datetime_check(switch_xml_t xcond) {
+
+       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 *xmweek = switch_xml_attr(xcond, "mweek");
+       const char *xwday = switch_xml_attr(xcond, "wday");
+       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");
+
+       switch_time_t ts = switch_micro_time_now();
+       int time_match = -1;
+       switch_time_exp_t tm;
+
+       switch_time_exp_lt(&tm, ts);
+
+       if (time_match && xyear) {
+               int test = tm.tm_year + 1900;
+               time_match = switch_number_cmp(xyear, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: year[%d] =~ %s (%s)\n", test, xyear, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xyday) {
+               int test = tm.tm_yday + 1;
+               time_match = switch_number_cmp(xyday, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: day of year[%d] =~ %s (%s)\n", test, xyday, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xmon) {
+               int test = tm.tm_mon + 1;
+               time_match = switch_number_cmp(xmon, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: month[%d] =~ %s (%s)\n", test, xmon, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xmday) {
+               int test = tm.tm_mday;
+               time_match = switch_number_cmp(xmday, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: day of month[%d] =~ %s (%s)\n", test, xmday, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xweek) {
+               int test = (int) (tm.tm_yday / 7 + 1);
+               time_match = switch_number_cmp(xweek, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: week of year[%d] =~ %s (%s)\n", test, xweek, time_match ? "PASS" : "FAIL");
+       }
+       if (time_match && xweek) {
+               int test = (int) (tm.tm_yday / 7 + 1);
+               time_match = switch_number_cmp(xweek, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: week of year[%d] =~ %s (%s)\n", test, xweek, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xmweek) {
+               /* calculate the day of the week of the first of the month (0-6) */
+               int firstdow = (int) (7 - (tm.tm_mday - (tm.tm_wday + 1)) % 7) % 7;
+               /* calculate the week of the month (1-6)*/
+               int test = (int) ceil((tm.tm_mday + firstdow) / 7.0);
+               time_match = switch_number_cmp(xmweek, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime: week of month[%d] =~ %s (%s)\n", test, xmweek, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xwday) {
+               int test = tm.tm_wday + 1;
+               time_match = switch_number_cmp(xwday, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: day of week[%d] =~ %s (%s)\n", test, xwday, time_match ? "PASS" : "FAIL");
+       }
+       if (time_match && xhour) {
+               int test = tm.tm_hour;
+               time_match = switch_number_cmp(xhour, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: hour[%d] =~ %s (%s)\n", test, xhour, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xminute) {
+               int test = tm.tm_min;
+               time_match = switch_number_cmp(xminute, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: minute[%d] =~ %s (%s)\n", test, xminute, time_match ? "PASS" : "FAIL");
+       }
+
+       if (time_match && xminday) {
+               int test = (tm.tm_hour * 60) + (tm.tm_min + 1);
+               time_match = switch_number_cmp(xminday, test);
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG9,
+                               "XML DateTime Check: minute of day[%d] =~ %s (%s)\n", test, xminday, time_match ? "PASS" : "FAIL");
+       }
+
+       return time_match;
+}
+
+
 #ifdef WIN32
 /* 
  * globbing functions for windows, part of libc on unix, this code was cut and paste from