123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- <?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 id="exec.overview">
- <title>Overview</title>
- <para>
- The exec module allows external commands to be executed from a &kamailio;
- script. The commands may be any valid shell commands--the command string is
- passed to the shell using <quote>popen</quote> command. &kamailio; passes
- additional information about the request in environment variables:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- SIP_HF_<hf_name> contains value of each header field in
- request. If a header field occurred multiple times, values are
- concatenated and comma-separated. <hf_name> is in capital
- letters. Ff a header-field name occurred in compact form,
- <hf_name> is canonical.
- </para>
- </listitem>
- <listitem>
- <para>
- SIP_TID is transaction identifier. All request retransmissions or
- CANCELs/ACKs associated with a previous INVITE result in the same
- value.
- </para>
- </listitem>
- <listitem>
- <para>
- SIP_DID is dialog identifier, which is the same as to-tag.
- Initially, it is empty.
- </para>
- </listitem>
- <listitem>
- <para>
- SIP_SRCIP is source &ip; address from which request came.
- </para>
- </listitem>
- <listitem>
- <para>
- SIP_ORURI is the original request &uri;.
- </para>
- </listitem>
- <listitem>
- <para>
- SIP_RURI is <emphasis>current</emphasis> request &uri; (if
- unchanged, equal to original).
- </para>
- </listitem>
- <listitem>
- <para>
- SIP_USER is userpart of <emphasis>current</emphasis> request &uri;.
- </para>
- </listitem>
- <listitem>
- <para>
- SIP_OUSER is userpart of original request &uri;.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- NOTE: The environment variables must be specified with double $
- (e.g., $$SIP_OUSER) in the parameters given to exec functions.
- Otherwise they will be evaluated as &kamailio; pseudo-variables,
- throwing errors.
- </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>No dependencies on other &kamailio; modules</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 id="exec.p.setvars">
- <title><varname>setvars</varname> (integer)</title>
- <para>
- Turn off to disable setting environment variables for executed commands.
- </para>
- <para>
- <emphasis>
- Default value is 1.
- </emphasis>
- </para>
- <example>
- <title>Set <quote>setvars</quote> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("exec", "setvars", 1)
- ...
- </programlisting>
- </example>
- </section>
- <section id="exec.p.time_to_kill">
- <title>
- <varname>time_to_kill</varname> (integer)
- </title>
- <para>
- Specifies the longest time a program is allowed to execute. If the
- time is exceeded, the program is killed.
- </para>
- <para>
- <emphasis>
- Default value is 0.
- </emphasis>
- </para>
- <example>
- <title>Set <quote>time_to_kill</quote> parameter</title>
- <programlisting format="linespecific">
- ...
- modparam("exec", "time_to_kill", 20)
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section>
- <title>Functions</title>
- <section id="exec.f.exec_dset">
- <title>
- <function moreinfo="none">exec_dset(command)</function>
- </title>
- <para>
- Executes an external command. Current &uri; is passed to the command
- as parameter. Output of the command is considered &uri; set
- (separated by lines).
- </para>
- <para>Meaning of the parameters is as follows:</para>
- <itemizedlist>
- <listitem>
- <para><emphasis>command</emphasis> - Command to be executed. It can
- include pseudo- variabes;
- </para>
- </listitem>
- </itemizedlist>
- <para>
- WARNING: if the var you are passing out has a bash special
- character in it, the var needs to be placed inside quotes, for example:
- exec_dset("print-contact.sh '$ct'");
- </para>
- <para>
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
- </para>
- <example>
- <title><function moreinfo="none">exec_dset</function> usage</title>
- <programlisting format="linespecific">
- ...
- exec_dset("echo TEST > /tmp/test.txt");
- exec_dset("echo TEST > /tmp/$rU.txt");
- ...
- </programlisting>
- </example>
- </section>
- <section id="exec.f.exec_msg">
- <title>
- <function moreinfo="none">exec_msg(command)</function>
- </title>
- <para>
- Executes an external command. The whole message is passed to it in
- input, no command-line parameters are added, output of the command is
- not processed.
- </para>
- <para>
- The <quote>examples</quote> directory in the source tarball contains several examples
- that shows how to use this function.
- </para>
- <para>Meaning of the parameters is as follows:</para>
- <itemizedlist>
- <listitem>
- <para><emphasis>command</emphasis> - Command to be executed. It
- can include pseudo-variables.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- WARNING: if the var you are passing out has a bash special
- character in it, the var needs to be placed inside quotes, for example:
- exec_msg("print-contact.sh '$ct'");
- </para>
- <para>
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
- </para>
- <example>
- <title><function moreinfo="none">exec_msg</function> usage</title>
- <programlisting format="linespecific">
- ...
- exec_msg("echo TEST > /tmp/test.txt");
- exec_msg("echo TEST > /tmp/$rU.txt");
- ...
- </programlisting>
- </example>
- </section>
- <section id="exec.f.exec_avp">
- <title>
- <function moreinfo="none">exec_avp(command [, avplist])</function>
- </title>
- <para>
- Executes an external command. Each line from output of the command
- is saved in an AVP from 'avplist'. If 'avplist' is missing, the
- AVPs are named 1, 2, 3, ...
- </para>
- <para>Meaning of the parameters is as follows:</para>
- <itemizedlist>
- <listitem>
- <para><emphasis>command</emphasis> - Command to be executed. It can
- include pseudo- variabes;
- </para>
- </listitem>
- <listitem>
- <para><emphasis>avplist</emphasis> - comma separated list with AVP
- names to store the result in;
- </para>
- </listitem>
- </itemizedlist>
- <para>
- WARNING: if the var you are passing out has a bash special
- character in it, the var needs to be placed inside quotes, for example:
- exec_avp("print-contact.sh '$ct'");
- </para>
- <para>
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE.
- </para>
- <example>
- <title><function moreinfo="none">exec_avp</function> usage</title>
- <programlisting format="linespecific">
- ...
- exec_avp("echo TEST");
- exec_avp("echo TEST", "$avp(s:test)");
- ...
- </programlisting>
- </example>
- </section>
- </section>
- <section id="exec.known_issues">
- <title>Known Issues</title>
- <para>
- There is currently no guarantee that scripts ever return and stop
- blocking the &sip; server. (There is kill.c but it is not used along with
- the current mechanisms based on popen. Besides that kill.c is ugly).
- </para>
- </section>
- </chapter>
|