Revision
15721
Author
anthm
Date
2009-11-30 10:23:42 -0600 (Mon, 30 Nov 2009)

Log Message

add Vagabond's week of year patch

Modified Paths

Diff

Modified: freeswitch/trunk/conf/dialplan/default.xml (15720 => 15721)


--- freeswitch/trunk/conf/dialplan/default.xml	2009-11-30 15:21:04 UTC (rev 15720)
+++ freeswitch/trunk/conf/dialplan/default.xml	2009-11-30 16:23:42 UTC (rev 15721)
@@ -27,6 +27,7 @@
 	 mon = 1-12
 	 mday = 1-31
 	 week = 1-52
+	 mweek= 1-6
 	 wday = 1-7
 	 hour = 0-23
 	 minute = 0-59
@@ -41,6 +42,50 @@
       <condition wday="2-6" hour="9-18">
 	<action application="set" data="open=true"/>
       </condition>
+		</extension>
+
+    <!-- Example of routing based on holidays
+
+	This example covers all US Federal holidays except for inauguration day and memorial day.
+    -->
+
+    <extension name="holiday_example" continue="true">
+      <condition mday="1" mon="1">
+	<!-- new year's day -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition wday="2" mweek="3" mon="1">
+	<!-- martin luther king day is the 3rd monday in january -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition wday="2" mweek="3" mon="2">
+	<!-- president's day is the 3rd monday in february -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition mday="4" mon="6">
+	<!-- independence day -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition wday="2" mweek="1" mon="9">
+	<!-- labor day is the 1st monday in september -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition wday="2" mweek="2" mon="10">
+	<!-- columbus day is the 2st monday in october -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition mday="11" mon="11">
+	<!-- veteran's day -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition wday="5-6" mweek="4" mon="11">
+	<!-- thanksgiving is the 4th thursday in november and usually there's an extension for black friday -->
+	<action application="set" data="open=false"/>
+      </condition>
+      <condition mday="25" mon="12">
+	<!-- Christmas -->
+	<action application="set" data="open=false"/>
+      </condition>
     </extension>
 
     <extension name="global-intercept">

Modified: freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c (15720 => 15721)


--- freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c	2009-11-30 15:21:04 UTC (rev 15720)
+++ freeswitch/trunk/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c	2009-11-30 16:23:42 UTC (rev 15721)
@@ -106,6 +106,7 @@
 		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");
@@ -160,6 +161,16 @@
 							  "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);