|
@@ -0,0 +1,311 @@
|
|
|
+<?xml version="1.0" encoding='ISO-8859-1'?>
|
|
|
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
|
|
+"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
|
|
|
+
|
|
|
+<!-- Include general documentation entities -->
|
|
|
+<!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
|
|
|
+%docentities;
|
|
|
+
|
|
|
+]>
|
|
|
+<!-- Module User's Guide -->
|
|
|
+
|
|
|
+<chapter>
|
|
|
+
|
|
|
+ <title>&adminguide;</title>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>Overview</title>
|
|
|
+ <para>
|
|
|
+ This module provides time recurrence matching functions. Definitions
|
|
|
+ of recurrences are based on Internet Calendaring and Scheduling Core
|
|
|
+ Object Specification (Calendar COS - RFC 2445).
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>Dependencies</title>
|
|
|
+ <section>
|
|
|
+ <title>&kamailio; Modules</title>
|
|
|
+ <para>
|
|
|
+ The following modules must be loaded before this module:
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>None</emphasis>.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ </itemizedlist>
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+ <section>
|
|
|
+ <title>External Libraries or Applications</title>
|
|
|
+ <para>
|
|
|
+ The following libraries or applications must be installed before running
|
|
|
+ &kamailio; with this module loaded:
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>None</emphasis>
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ </itemizedlist>
|
|
|
+ </para>
|
|
|
+ </section>
|
|
|
+ </section>
|
|
|
+ <section>
|
|
|
+ <title>Parameters</title>
|
|
|
+ <section>
|
|
|
+ <title><varname>separator</varname> (str)</title>
|
|
|
+ <para>
|
|
|
+ Separator character used to delimit the attributes in time
|
|
|
+ reccurence definitions.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ <emphasis>
|
|
|
+ Default value is '|'.
|
|
|
+ </emphasis>
|
|
|
+ </para>
|
|
|
+ <example>
|
|
|
+ <title>Set <varname>separator</varname> parameter</title>
|
|
|
+ <programlisting format="linespecific">
|
|
|
+...
|
|
|
+modparam("tmrec", "separator", ";")
|
|
|
+...
|
|
|
+</programlisting>
|
|
|
+ </example>
|
|
|
+ </section>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>Functions</title>
|
|
|
+ <section>
|
|
|
+ <title>
|
|
|
+ <function moreinfo="none">tmrec_match(timerec [, timestamp])</function>
|
|
|
+ </title>
|
|
|
+ <para>
|
|
|
+ Match a time recurrence rules against the timestamp. If timestamp
|
|
|
+ parameter is missing, the value of current unix timestamp is used.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ The parameters can include pseudo-variables.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ The timerec paramter is a list of attributes defined by RFC2445,
|
|
|
+ delimited by 'separator' (module parameter) character. The format
|
|
|
+ of timerec parameter, using '|' as separator, is (all in one line
|
|
|
+ without white spaces):
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <programlisting format="linespecific">
|
|
|
+...
|
|
|
+[startdate]|[duration]|[frequency]|[until]|[interval]|[byday]
|
|
|
+ |[bymonthday]|[byyearday]|[byweekno]|[bymonth]
|
|
|
+...
|
|
|
+</programlisting>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ When an attribute is not specified, the corresponding place must be left
|
|
|
+ empty, whenever another attribute that follows in the list has to be
|
|
|
+ specified.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Description of time recurrence attributes:
|
|
|
+ </para>
|
|
|
+ <itemizedlist>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>startdate</emphasis> - date for the start of the first
|
|
|
+ period.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>duration</emphasis> - the duration of the time period.
|
|
|
+ For a recurring interval, the <quote>duration</quote> parameter MUST
|
|
|
+ be small enough such that subsequent intervals do not overlap.
|
|
|
+ For non-recurring intervals, durations of any positive length are
|
|
|
+ permitted, zero-length duration means <quote>forever</quote>.
|
|
|
+ Negative-length durations are not allowed.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>frequency</emphasis> - can be one of the following values:
|
|
|
+ <quote>daily</quote> -
|
|
|
+ specify repeating periods based on an interval of a day or more;
|
|
|
+ <quote>weekly</quote> - specify repeating periods based on an
|
|
|
+ interval of a week or more; <quote>monthly</quote> - specify
|
|
|
+ repeating periods based on an interval of a month or more;
|
|
|
+ <quote>yearly</quote> - specify repeating periods based
|
|
|
+ on an interval of a year or more. These values are case insensitive.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>until</emphasis> - defines an iCalendar COS DATE or DATE-TIME
|
|
|
+ value which bounds the recurrence rule in an inclusive manner. If the
|
|
|
+ value specified by <quote>until</quote> is synchronized with the
|
|
|
+ specified
|
|
|
+ recurrence, this date or date-time becomes the last instance of the
|
|
|
+ recurrence. If not present, the recurrence is considered to repeat
|
|
|
+ forever.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>interval</emphasis> - a positive integer
|
|
|
+ representing how often the recurrence rule repeats. The default value
|
|
|
+ is <quote>1</quote>, meaning every day for a <quote>daily</quote> rule,
|
|
|
+ every week for a <quote>weekly</quote>
|
|
|
+ rule, every month for a <quote>monthly</quote> rule and every year for
|
|
|
+ a <quote>yearly</quote> rule.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>byday</emphasis> - a comma-separated list short codes of days
|
|
|
+ of the week. The days are specified as: <quote>MO</quote> for Monday;
|
|
|
+ <quote>TU</quote> for Tuesday; <quote>WE</quote> for Wednesday;
|
|
|
+ <quote>TH</quote> for Thursday; <quote>FR</quote> for
|
|
|
+ Friday; <quote>SA</quote> for Saturday; <quote>SU</quote>
|
|
|
+ for Sunday. These values are case insensitive.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Each <quote>byday</quote> value can also be prefixed by a positive
|
|
|
+ (+n) or negative (-n) integer. If present, this indicates the n-th
|
|
|
+ occurrence of the specific day within the <quote>monthly</quote> or
|
|
|
+ <quote>yearly</quote> recurrence. For example, within a
|
|
|
+ <quote>monthly</quote> rule, +1MO (or simply 1MO) represents the first
|
|
|
+ Monday within the month, whereas -1MO represents the last Monday of
|
|
|
+ the month. If an integer modifier is not present, it means all days
|
|
|
+ of this type within the specified frequency. For example, within a
|
|
|
+ <quote>monthly</quote> rule, MO represents all Mondays within the month.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>bymonthday</emphasis> - a comma-separated
|
|
|
+ list of days of the month. Valid values are 1 to 31 or -31 to -1. For
|
|
|
+ example, -10 represents the tenth to the last day of the month.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>byyearday</emphasis> - a comma-separated list of
|
|
|
+ days of the year. Valid values are 1 to 366 or -366 to -1. For example,
|
|
|
+ -1 represents the last day of the year (December 31st) and -306
|
|
|
+ represents the 306th day before the last day of the year (March 1st).
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>byweekno</emphasis> - a comma-separated list of
|
|
|
+ ordinals specifying weeks of the year. Valid values are 1 to 53 or
|
|
|
+ -53 to -1.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ <listitem>
|
|
|
+ <para>
|
|
|
+ <emphasis>bymonth</emphasis> - parameter specifies a comma-separated
|
|
|
+ list of months of the year. Valid values are 1 to 12.
|
|
|
+ </para>
|
|
|
+ </listitem>
|
|
|
+ </itemizedlist>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ A recurrence is specified by including the <quote>frequency</quote>
|
|
|
+ parameter, which indicates the type of recurrence rule. Parameters
|
|
|
+ other than <quote>startdate</quote>
|
|
|
+ and <quote>duration</quote> SHOULD NOT be specified unless
|
|
|
+ <quote>frequency</quote> is set.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ If byxxx parameter values are found which are beyond the available
|
|
|
+ scope (ie, bymonthday=<quote>30</quote> in February), they are simply
|
|
|
+ ignored.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Byxxx parameters modify the recurrence rule matching. Byxxx rule, as
|
|
|
+ attribute for a period of time which is the same or greater than the
|
|
|
+ frequency, generally reduces or limits the number of occurrences for the
|
|
|
+ recurrence definition. For example, frequency=<quote>daily</quote>
|
|
|
+ bymonth=<quote>3</quote> reduces the number of
|
|
|
+ recurrence instances from all days (if the <quote>bymonth</quote>
|
|
|
+ parameter is not present) to all days in March. Byxxx parameters for
|
|
|
+ a period of time less than the frequency generally increases or expands
|
|
|
+ the number of occurrences of the recurrence. For example,
|
|
|
+ frequency=<quote>yearly</quote> bymonth=<quote>8,9</quote>
|
|
|
+ increases the number of days within the yearly recurrence set from 1
|
|
|
+ (if <quote>bymonth</quote> parameter is not present) to 2.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ If multiple Byxxx parameters are specified, then after evaluating the
|
|
|
+ specified <quote>frequency</quote> and <quote>interval</quote> parameters,
|
|
|
+ the Byxxx parameters are
|
|
|
+ applied to the current set of evaluated occurrences in the following
|
|
|
+ order: <quote>bymonth</quote>, <quote>byweekno</quote>,
|
|
|
+ <quote>byyearday</quote>, <quote>bymonthday</quote>,
|
|
|
+ <quote>byday</quote>; then <quote>until</quote> is evaluated.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ Next is an example of evaluating multiple Byxxx parameters.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ startdate=<quote>20100101T093000</quote> duration=<quote>10H30M</quote>
|
|
|
+ frequency=<quote>yearly</quote> interval=<quote>4</quote>
|
|
|
+ bymonth=<quote>3</quote> byday=<quote>SU</quote>
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ First, the interval=<quote>4</quote> would be applied to
|
|
|
+ frequency=<quote>yearly</quote> to match on <quote>every 4th year</quote>
|
|
|
+ . Then, bymonth=<quote>1</quote> would be applied to match on
|
|
|
+ <quote>every March, every 4th year</quote>. Then,
|
|
|
+ byday=<quote>SU</quote> would be applied to match on <quote>every
|
|
|
+ Sunday in March, every 4th year, from 9:30 to 20:00 </quote>. The start
|
|
|
+ and end hours:minutes have been retrieved from the
|
|
|
+ <quote>startdate</quote> and <quote>duration</quote> parameters.
|
|
|
+ </para>
|
|
|
+
|
|
|
+ <para>
|
|
|
+ This function can be used in ANY_ROUTE.
|
|
|
+ </para>
|
|
|
+ <example>
|
|
|
+ <title><function>tmrec_match</function> usage</title>
|
|
|
+ <programlisting format="linespecific">
|
|
|
+...
|
|
|
+ if(tmrec_match("20120101T000000|24H|weekly|||SA,SU")
|
|
|
+ xdbg("it is weekend!\n");
|
|
|
+ if(tmrec_match("20120101T083000|10H|weekly|||MO,TU,WE,TH,FR")
|
|
|
+ xdbg("it is with working hours\n");
|
|
|
+...
|
|
|
+</programlisting>
|
|
|
+ </example>
|
|
|
+ </section>
|
|
|
+
|
|
|
+ <section>
|
|
|
+ <title>
|
|
|
+ <function moreinfo="none">is_leap_year([year])</function>
|
|
|
+ </title>
|
|
|
+ <para>
|
|
|
+ Return true if the value from parameter is a leap year. If the
|
|
|
+ parameter is missing, then the year from current time is taken.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ The parameter can be pseudo-variable.
|
|
|
+ </para>
|
|
|
+ <para>
|
|
|
+ This function can be used in ANY_ROUTE.
|
|
|
+ </para>
|
|
|
+ <example>
|
|
|
+ <title><function>is_leap_year</function> usage</title>
|
|
|
+ <programlisting format="linespecific">
|
|
|
+...
|
|
|
+if(is_leap_year("2010"))
|
|
|
+...
|
|
|
+</programlisting>
|
|
|
+ </example>
|
|
|
+ </section>
|
|
|
+ </section>
|
|
|
+</chapter>
|
|
|
+
|