123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?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 asynchronous operations for handling SIP requests
- in the configuration file.
- </para>
- <para>
- Async uses t_suspend() and t_continue() from the TM and TMX modules.
- </para>
- <para>
- Note that after invoking the asynchronous operation, the processing
- will continue later in another application process. Therefore variables
- stored in private memory should not be used, try to use shared memory if you
- want to get values after the processing is resumed (e.g., $avp(...),
- $xavp(...), $shv(...), htable $sht(...)).
- </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>tm</emphasis> - transaction management.
- </para>
- <para>
- <emphasis>tmx</emphasis> - transaction management extensions.
- </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>workers</varname> (int)</title>
- <para>
- Number of worker processes to be started to handle the asynchronous
- tasks.
- </para>
- <para>
- <emphasis>
- Default value is 1.
- </emphasis>
- </para>
- <example>
- <title>Set <varname>workers</varname> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("async", "workers", 2)
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section>
- <title>Functions</title>
- <section id="async.f.async_route">
- <title>
- <function moreinfo="none">async_route(routename, seconds)</function>
- </title>
- <para>
- Simulate a sleep of 'seconds' and then continue the processing of the SIP
- request with the route[routename]. In case of internal errors, the
- function returns false, otherwise the function exits the execution of
- the script at that moment (return 0 behaviour).
- </para>
- <para>
- The routename parameter can be a static string or a dynamic string
- value with config variables.
- </para>
- <para>
- The sleep parameter represent the number of seconds to suspend the
- processing of a SIP request. Maximum value is 100. The parameter can be
- a static integer or a variable holding an integer.
- </para>
- <para>
- Since the SIP request handling is resumed in another process,
- the config file execution state is practically lost. Therefore beware
- that the execution of config after resume will end once the
- route[routename] is finished.
- </para>
- <para>
- This function can be used from REQUEST_ROUTE.
- </para>
- <example>
- <title><function>async_route</function> usage</title>
- <programlisting format="linespecific">
- ...
- async_route("RESUME", "4");
- ...
- route[RESUME] {
- send_reply("404", "Not found");
- exit;
- }
- ...
- </programlisting>
- </example>
- </section>
- <section id="async.f.async_sleep">
- <title>
- <function moreinfo="none">async_sleep(seconds)</function>
- </title>
- <para>
- Simulate a sleep of 'seconds' and then continue the processing of SIP
- request with the next action. In case of internal errors, the function
- returns false.
- </para>
- <para>
- The sleep parameter represent the number of seconds to suspend the
- processing of SIP request. Maximum value is 100. The parameter can be
- a static integer or a variable holding an integer.
- </para>
- <para>
- This function can be used from REQUEST_ROUTE.
- </para>
- <example>
- <title><function>async_sleep</function> usage</title>
- <programlisting format="linespecific">
- ...
- async_sleep("4");
- send_reply("404", "Not found");
- exit;
- ...
- </programlisting>
- </example>
- </section>
- <section id="async.f.async_task_route">
- <title>
- <function moreinfo="none">async_task_route(routename)</function>
- </title>
- <para>
- Continue the processing of the SIP request with the route[routename]
- in one of the processes from core asynchronous framework. The core
- parameter async_workers has to be set to enable asynchronous
- framework. The task is executed as soon as a process from asynchronous
- framework is idle, there is no wait time for the task like for
- async_route(...).
- </para>
- <para>
- In case of internal errors, the function returns false, otherwise the
- function exits the execution of the script at that moment (return
- 0 behaviour).
- </para>
- <para>
- The routename parameter can be a static string or a dynamic string
- value with config variables.
- </para>
- <para>
- Since the SIP request handling is resumed in another process,
- the config file execution state is practically lost. Therefore beware
- that the execution of config after resume will end once the
- route[routename] is finished.
- </para>
- <para>
- This function can be used from REQUEST_ROUTE.
- </para>
- <example>
- <title><function>async_task_route</function> usage</title>
- <programlisting format="linespecific">
- ...
- async_task_route("RESUME");
- ...
- route[RESUME] {
- t_relay();
- exit;
- }
- ...
- </programlisting>
- </example>
- </section>
- </section>
- </chapter>
|