mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
5.4 KiB
222 lines
5.4 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
|
|
|
<section id="timer" xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
<sectioninfo>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Tomas</firstname>
|
|
<surname>Mandys</surname>
|
|
<affiliation><orgname>Iptel.org</orgname></affiliation>
|
|
<address>
|
|
<email>tomas dot mandys at iptel dot org</email>
|
|
</address>
|
|
</author>
|
|
</authorgroup>
|
|
<copyright>
|
|
<year>2007</year>
|
|
<holder>iptelorg GmbH</holder>
|
|
</copyright>
|
|
<revhistory>
|
|
<revision>
|
|
<revnumber>$Revision$</revnumber>
|
|
<date>$Date$</date>
|
|
</revision>
|
|
</revhistory>
|
|
|
|
</sectioninfo>
|
|
|
|
<title>timer module</title>
|
|
|
|
<section id="timer.overview">
|
|
<title>Overview</title>
|
|
<para>
|
|
The module supports triggering specific route block on timer.
|
|
</para>
|
|
</section>
|
|
|
|
<section id="timer.dep">
|
|
<title>Dependencies</title>
|
|
|
|
<para>
|
|
none
|
|
</para>
|
|
</section>
|
|
|
|
<section id="timer.syntax">
|
|
<title>ABNF syntax</title>
|
|
<programlisting>
|
|
timer_id = alphanum
|
|
slow_fast = "slow" | "fast"
|
|
declare_timer_syntax = timer_id "=" (route#|route_name) "," interval "," slow_fast "," ["enable"]
|
|
enable_disable = "0" | "1"
|
|
|
|
</programlisting>
|
|
</section>
|
|
|
|
<section id="timer.parameters">
|
|
|
|
<title>Parameters</title>
|
|
|
|
<section id="declare_timer">
|
|
<title><varname>declare_timer</varname> (string)</title>
|
|
<para>
|
|
Declares timer route which will be called in specific interval.
|
|
</para>
|
|
<para>
|
|
The format is:
|
|
</para>
|
|
<programlisting>
|
|
declare_timer = declare_timer_syntax
|
|
</programlisting>
|
|
<para>
|
|
<emphasis>timer_id</emphasis> is timer identifier, <emphasis>route</emphasis> is handler to be called when
|
|
timer is triggered, <emphasis>interval</emphasis> is timer interval in milliseconds, <emphasis>slow_fast</emphasis>
|
|
determines if handler will be hooked in slow or fast timer queue, fast timer handler returns
|
|
as quickly as possible, slow timer handler may spend longer time, see ser/doc/timers.txt documentation. Use <emphasis>enable</emphasis>
|
|
to enable timer when ser is starting, otherwise use <function>timer_enable</function> to start it later.
|
|
</para>
|
|
<example>
|
|
<title>Example <varname>declare_timer</varname></title>
|
|
<programlisting>
|
|
...
|
|
modparam("timer", "declare_timer", "MY_TIMER=MY_TIMER_ROUTE,10,slow,enable");
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
</section>
|
|
|
|
<section id="timer.functions">
|
|
<title>Functions</title>
|
|
|
|
<section id="timer_enable">
|
|
<title>
|
|
<function>timer_enable(timer_id, enable_disable)</function>
|
|
</title>
|
|
<para>
|
|
Enable/disable timer route specified by <varname>timer_id</varname>. Because of timer core API the callback
|
|
is not disabled immediately but is removed from handler by itself not to decrease performance.
|
|
Disabling and enabling in sequence may be tricky.
|
|
|
|
<emphasis>timer_id</emphasis> references to timer declared by <varname>declare_timer</varname>.
|
|
</para>
|
|
|
|
<example>
|
|
<title><function>timer_enable</function> usage</title>
|
|
<programlisting>
|
|
...
|
|
timer_enable("MY_TIMER", 1);
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="timer.timer.timer_id.enabled">
|
|
<title>
|
|
<function>@timer.timer.timer_id.enabled</function>
|
|
</title>
|
|
<para>
|
|
Return true ("1") if timer specified by <varname>timer_id</varname> is enabled,
|
|
otherwise returns false ("0").
|
|
</para>
|
|
|
|
<example>
|
|
<title><function>timer.timer.timer_id.enabled</function> usage</title>
|
|
<programlisting>
|
|
|
|
if (@timer.timer.MY_TIMER.enabled == "1") {
|
|
....
|
|
}
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="timer.executed">
|
|
<title>
|
|
<function>@timer.executed</function>
|
|
</title>
|
|
<para>
|
|
Returns name of timer which has been executed, i.e. non empty value is returned only
|
|
when handler is being processed.
|
|
</para>
|
|
|
|
<example>
|
|
<title><function>timer.executed</function> usage</title>
|
|
<programlisting>
|
|
|
|
if (@timer.executed != "") {
|
|
# timer is being handled
|
|
....
|
|
}
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
|
|
</section>
|
|
|
|
<section id="timer.examples">
|
|
<title>Examples</title>
|
|
<example>
|
|
<title>timer common example</title>
|
|
<programlisting>
|
|
loadmodule "modules/xlog/xlog.so"
|
|
loadmodule "modules/timer/timer.so"
|
|
|
|
modparam("timer", "declare_timer", "tmr1=ONTIMER,1000");
|
|
modparam("timer", "declare_timer", "tmr2=ONTIMER2,2000,slow,enable");
|
|
|
|
route["print"] {
|
|
xlog("L_INFO", "fired: %@timer.executed\n");
|
|
}
|
|
|
|
route["ONTIMER"] {
|
|
# do something
|
|
route("print");}
|
|
|
|
|
|
route["ONTIMER2"] {
|
|
# do something
|
|
timer_enable("tmr1", 0);
|
|
route("print");
|
|
}
|
|
|
|
</programlisting>
|
|
|
|
</example>
|
|
<example>
|
|
<title>Using timer module for testing a functionality</title>
|
|
<para>
|
|
The timer module may be used to test a functionality being developed and
|
|
not requiring real request.A developer may put tested code in route section
|
|
which is called once after ser starts.
|
|
</para>
|
|
<programlisting>
|
|
|
|
loadmodule "timer";
|
|
loadmodule "xlog";
|
|
|
|
modparam("timer", "declare_timer", "TIMER_TEST=TEST,100,,enable");
|
|
|
|
route {
|
|
xlog("L_E","main route");
|
|
}
|
|
|
|
route[TEST] {
|
|
timer_enable("TIMER_TEST", "0");
|
|
xlog("L_E","test start\n");
|
|
|
|
# add here tested functionality
|
|
|
|
xlog("L_E","test end\n");
|
|
}
|
|
</programlisting>
|
|
|
|
</example>
|
|
</section>
|
|
</section>
|
|
|