123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524 |
- <?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="reference" xmlns:xi="http://www.w3.org/2001/XInclude">
- <sectioninfo>
- <revhistory>
- <revision>
- <revnumber>$Revision$</revnumber>
- <date>$Date$</date>
- </revision>
- </revhistory>
- </sectioninfo>
- <title>Reference</title>
- <section id="coreoptions">
- <title>Core Options</title>
- <para>Core options are located in beginning of configuration file and
- affect behavior of the server.</para>
- <itemizedlist>
- <listitem>
- <para>
- <varname>debug</varname> - Set log level, this is number between 0 and 9. Default
- is 0.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>fork</varname> - If set to yes, the server will spawn children. If set to no, the main
- process will be processing all messages. Default is yes.
- <note>
- <para>
- Disabling child spawning is useful mainly for
- debugging. When <varname>fork</varname> is turned off,
- some features are unavailable:
- there is no attendant process, no pid file is generated,
- and server listens only at one address. Make sure you
- are debugging the same interface at which
- <application>ser</application> listens.
- The easiest way to do so is to set the interface using
- <varname>listen</varname> option explicitly.
- </para>
- </note>
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>log_stderror</varname> - If set to yes, the server will print its debugging
- information to standard error output. If set to no, <command>syslog</command>
- will be used. Default is no (printing to syslog).
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>listen</varname> - list of all IP addresses or hostnames SER should listen on.
- <note>
- <para>
- This parameter may repeat several times, then SER will
- listen on all addresses. For example, the following
- command-line options (equivalent to "listen" config
- option) may be used:
- <command>
- ser -l foo -l bar -p 5061 -l x -l y
- </command>
- will listen on foo:5060, bar:5061 & x:5061 & y:5061
- </para>
- </note>
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>alias</varname> - Add IP addresses or hostnames to list of name aliases.
- All requests with hostname matching an alias will satisfy the condition
- "uri==myself".
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>dns</varname> - Uses dns to check if it is necessary to add a "received=" field to a via.
- Default is no.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>rev_dns</varname> - Same as dns but use reverse DNS. Default is no.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>port</varname> - Listens on the specified port (default 5060). It applies to the last
- address specified in listen and to all the following that do not have a corresponding "port" option.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>maxbuffer</varname> - Maximum receive buffer size which will not be exceeded by
- the auto-probing procedure even if the OS allows. Default value is MAX_RECV_BUFFER_SIZE,
- which is 256k.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>children</varname> - Specifies how many processes should be started
- for each transport protocol.
- Running multiple children allows a server to
- server multiple requests in parallel when request processing block (e.g., on DNS
- lookup). Note that <application>ser</application> typically spawns additional
- processes, such as timer process or FIFO server. If FIFO server is turned on,
- you can watch running processes using the <application>serctl</application>
- utility.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>check_via</varname> - Turn on or off Via host checking when forwarding replies.
- Default is no.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>syn_branch</varname> - Shall the server use stateful synonym branches? It is faster but not
- reboot-safe. Default is yes.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>memlog</varname> - Debugging level for final memory statistics report. Default is L_DBG --
- memory statistics are dumped only if <varname>debug</varname> is set high.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>sip_warning</varname> - Should replies include extensive warnings? By default yes,
- it is good for trouble-shooting.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>fifo</varname> - FIFO special file pathname, for example "/tmp/ser_fifo". Default is
- no filename -- no FIFO server is started then. We recommend to set it so that
- accompanying applications such as <application>serweb</application> or
- <application>serctl</application> can communicate with
- <application>ser</application>.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>fifo_mode</varname> - Permissions of the FIFO special file.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>server_signature</varname> - Should locally-generated messages include server's signature?
- By default yes, it is good for trouble-shooting.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>reply_to_via</varname> - A hint to reply modules
- whether they should send reply
- to IP advertised in Via.
- Turned off by default, which means that replies are
- sent to IP address from which requests came from.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>user | uid</varname> - uid to be used by the server.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>group | gid</varname> - gid to be used by the server.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>mhomed</varname> -- enable calculation of
- outbound interface; useful on multihomed servers,
- see <xref linkend="mhomed"/>.
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>loadmodule</varname> - Specifies a module to be loaded (for example "/usr/lib/ser/modules/tm.so")
- </para>
- </listitem>
- <listitem>
- <para>
- <varname>modparam</varname> - Module parameter configuration. The commands takes three parameters:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>module</emphasis> - Module in which the parameter resides.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>parameter</emphasis> - Name of the parameter to be configured.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>value</emphasis> - New value of the parameter.
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </listitem>
- </itemizedlist>
- </section>
- <section id="builtinref">
- <title>Core Commands</title>
- <itemizedlist id="routeblocks">
- <title>Route Blocks and Process Control</title>
- <!--<para>
- Route block and process control keywords determine
- the order in which SIP requests are processed.
- </para>-->
- <listitem>
- <para>
- <command>route[number]{...}</command> - This marks a "route block" in configuration files.
- route blocks are basic building blocks of <application>ser</application> scripts.
- Each route block contains a sequence of
- <application>SER</application> actions enclosed in braces. Multiple route blocks
- can be included in a configuration file.
- When script execution begins on request receipt,
- route block number 0 is entered. Other route blocks serve as a kind of sub-routines and
- may be entered by calling the action <command>route(n)</command>,
- where n is number of the block. The action <command>break</command>
- exits currently executed route block. It stops script execution for
- route block number 0 or returns to calling route block otherwise.
- </para>
- <example>
- <title>route</title>
- <programlisting>
- route[0] {
- # call routing block number 2
- route(2);
- }
- route[2] {
- forward("host.foo.bar", 5060);
- }
- </programlisting>
- </example>
- </listitem>
- <listitem>
- <para>
- <command>failure_route</command> is used to restart request processing
- when a negative reply for a previously relayed request is received. It is only
- used along with tm module, which stores the original requests and
- can return to their processing later. To activate processing
- of a <command>failure_route</command> block, call the TM action
- <command>t_on_failure(route_number)</command> before calling
- <command>t_relay</command>. When a negative reply
- comes back, the desired <command>failure_route</command>
- will be entered and processing of the original request may
- continue.
- </para>
- <para>
- The set of actions applicable from within
- <command>failure_route</command> blocks is limited.
- Permitted actions are URI-manipulation actions, logging and
- sending stateful replies using <command>t_reply</command>.
- </para>
- <example>
- <title>failure_route</title>
- <programlisting>
- failure_route[1] {
- # for some reason, the original forwarding attempt
- # failed, try at another URI
- append_branch("sip:[email protected]");
- # if this new attempt fails too, try another failure_route
- t_on_failure("2");
- t_relay();
- }
- </programlisting>
- </example>
- </listitem>
- <listitem>
- <para>
- The action <command>break</command> exits currently executed route block.
- It stops script execution for route block number 0 or returns to calling
- route block otherwise.
- <note>
- <para>
- We recommend to use <command>break</command>
- after any request forwarding or replying. This practice
- helps to avoid erroneous scripts that
- continue execution and mistakenly send another reply or
- forward a request to another place, resulting in
- protocol confusion.
- </para>
- </note>
- </para>
- <para>
- <emphasis>Example:</emphasis> break;
- </para>
- </listitem>
- <listitem>
- <para>
- <command>route(n)</command> - call routing block route[n]{...};
- when the routing block n finishes processing, control is passed
- back to current block and processing continues.
- </para>
- </listitem>
- <listitem>
- <para>
- <command>if (condition) statement</command> - Conditional statement.
- </para>
- <example>
- <title>Use of <command>if</command></title>
- <programlisting>
- if (method=="REGISTER) {
- log("register received\n");
- };
- </programlisting>
- </example>
- </listitem>
- <listitem>
- <para>
- <command>if - else</command> - If-Else Conditional statement.
- </para>
- <example>
- <title>Use of <command>if-else</command></title>
- <programlisting>
- if (method=="REGISTER) {
- log("register received\n");
- } else {
- log("non-register received\n");
- };
- </programlisting>
- </example>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <title>Flag Manipulation</title>
- <listitem>
- <para>
- <command>setflag</command> - Set flag in the message.
- </para>
- <para>
- <emphasis>Example:</emphasis> setflag(1);
- </para>
- </listitem>
- <listitem>
- <para>
- <command>resetflag</command> - Reset flag in the message.
- </para>
- <para>
- <emphasis>Example:</emphasis> resetflag(1);
- </para>
- </listitem>
- <listitem>
- <para>
- <command>isflagset</command> - Test whether a particular flag is set.
- </para>
- <example>
- <title>isflagset</title>
- <programlisting>
- if (isflagset(1)) {
- ....
- };
- </programlisting>
- </example>
- </listitem>
- <listitem>
- <para>
- <function>setavpflag(avp, flag_id)</function> - Sets a flag in the
- AVP(s). The command simply set custom flag of AVP. The flags
- may be used in script using <function>isavpflagset</function>
- or in a module to perform specific operation on marked AVPs.
- Flag identifier must be declared via <emphasis>avpflags</emphasis>
- statement.
- </para>
- <example>
- <title>setavpflag</title>
- <programlisting>
- avpflags
- my_flag,
- your_flag;
- ....
- setavpflag($avp[1], "my_flag");
- ....
- if (isavpflagset($avp2, "your_flag")) {
- }
- </programlisting>
- </example>
- </listitem>
- <listitem>
- <para>
- <function>resetavpflag(avp, flag_id)</function> - Same as command
- <function>setavpflag</function> - only resetavpflag will be
- called instead of setavpflag.
- </para>
- </listitem>
- <listitem>
- <para>
- <function>isavpflagset(avp, flag_id)</function> - Test if the avp flag
- is set or not.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <title>Manipulation of URI and Destination Set</title>
- <listitem>
- <para>
- <command>rewritehost | sethost | seth</command> - Rewrite host part of the Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> sethost("foo.bar.com");
- </para>
- </listitem>
- <listitem>
- <para>
- <command>rewritehostport | sethostport | sethp</command> - Rewrite host and port part of the Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> sethostport("foo.bar.com:5060");
- </para>
- </listitem>
- <listitem>
- <para>
- <command>rewriteuser | setuser | setu</command> - Rewrite or set username part of the Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> setuser("joe");
- </para>
- </listitem>
- <listitem>
- <para>
- <command>rewriteuserpass | setuserpass | setup</command> - Rewrite or set username and password part
- of the Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> setuserpass("joe:mypass");
- </para>
- </listitem>
- <listitem>
- <para>
- <command>rewriteport | setport | setp</command> - Rewrite or set port of the Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> setport("5060");
- </para>
- </listitem>
- <listitem>
- <para>
- <command>rewriteuri | seturi</command> - Rewrite or set the whole Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> seturi("sip:[email protected]:5060");
- </para>
- </listitem>
- <listitem>
- <para>
- <command>revert_uri</command> - Revert changes made to the Request URI and use original Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> revert_uri();
- </para>
- </listitem>
- <listitem>
- <para>
- <command>prefix</command> - Add prefix to username in Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> prefix("123");
- </para>
- </listitem>
- <listitem>
- <para>
- <command>strip</command> - Remove first n characters of username in Request URI.
- </para>
- <para>
- <emphasis>Example:</emphasis> strip(3);
- </para>
- </listitem>
- <listitem>
- <para>
- <command>append_branch</command> - Append a new destination to destination set of the message.
- </para>
- <para>
- <example>
- <title>Use of <command>append_branch</command></title>
- <programlisting>
- # redirect to these two destinations: [email protected] and [email protected]
- # 1) rewrite the current URI
- rewriteuri("sip:[email protected]");
- # 2) append another entry to the destination ser
- append_branch("sip:[email protected]");
- # redirect now
- sl_send_reply("300", "redirection");
- </programlisting>
- </example>
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <title>Message Forwarding</title>
- <listitem>
- <para>
- <command>forward(uri, port)</command> - Forward the request to given
- destination statelessly. The uri and port parameters may take special
- values 'uri:host'
- and 'uri:port' respectively, in which case SER forwards to destination
- set in current URI. All other elements in a destination set are
- ignored by stateless forwarding.
- </para>
- <para>
- <emphasis>Example:</emphasis> forward("foo.bar.com"); # port defaults to 5060
- </para>
- </listitem>
- <listitem>
- <para>
- <command>send</command> - Send the message as is to a third party
- </para>
- <para>
- <emphasis>Example:</emphasis> send("foo.bar.com");
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <title>Logging</title>
- <listitem>
- <para>
- <command>log([level], message)</command> - Log a message.
- </para>
- <para>
- <emphasis>Example:</emphasis> log(1, "This is a message with high log-level set to 1\n");
- </para>
- <para>
- Logging is very useful for troubleshooting or attracting administrator's
- attention to unusual situations. <application>ser</application>
- reports log messages to <application>syslog</application>
- facility unless it is configured to print them to <filename>stderr</filename>
- with the <varname>log_stderr</varname> configuration option. Log messages
- are only issued if their log level exceeds threshold set with the
- <varname>debug</varname> configuration option. If log level is omitted,
- messages are issued at log level 4.
- </para>
- </listitem>
- </itemizedlist>
- <itemizedlist>
- <title>Miscellaneous</title>
- <listitem>
- <para>
- <command>len_gt</command> - If length of the message is greater than value given as parameter, the
- command will return 1 (indicating true). Otherwise -1 (indicating false) will be returned. It may
- take 'max_len' as parameter, in which case message size is limited
- to internal buffer size BUF_SIZE (3040 by default).
- </para>
- <example>
- <title>Use of <command>len_gt</command></title>
- <programlisting>
- # deny all requests larger in size than 1 kilobyte
- if (len_gt(1024)) {
- sl_send_reply("513", "Too big");
- break;
- };
- </programlisting>
- </example>
- </listitem>
- </itemizedlist>
- </section>
- <section>
- <title>Command Line Parameters</title>
- <note>
- <para>
- Command-Line parameters may be overridden by configuration
- file options which take precedence over them.
- </para>
- </note>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>-h</emphasis> - Displays a short usage description, including all available options.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-c</emphasis> - Performs loop checks and computes branches.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-r</emphasis> - Uses dns to check if it is necessary to add a "received=" field to a via.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-R</emphasis> - Same as -r but uses reverse dns.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-v</emphasis> - Turns on via host checking when forwarding replies.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-d</emphasis> - Turns on debugging, multiple -d increase debugging level.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-D</emphasis> - Runs ser in the foreground (it doesn't fork into daemon mode).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-E</emphasis> - Sends all the log messages to stderr.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-V</emphasis> - Displays the version number.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-f config-file</emphasis> - Reads the configuration from "config-file" (default ./ser.cfg).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-l address</emphasis> - Listens on the specified address. Multiple -l mean listening
- on multiple addresses. The default behavior is to listen on all the ipv4 interfaces.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-p port</emphasis> - Listens on the specified port (default 5060). It applies to the last
- address specified with -l and to all the following that do not have a corresponding -p.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-n processes-no</emphasis> - Specifies the number of children processes forked per
- interface (default 8).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-b max_rcv_buf_size</emphasis> - Maximum receive buffer size which will not be exceeded by
- the auto-probing procedure even if the OS allows.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-m shared_mem_size</emphasis> - Size of the shared memory which will be allocated (in Megabytes).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-w working-dir</emphasis> - Specifies the working directory. In the very improbable event
- that will crash, the core file will be generated here.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-t chroot-dir</emphasis> - Forces ser to chroot after reading the config file.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-u uid</emphasis> - Changes the user id under which ser runs.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-g gid</emphasis> - Changes the group id under which ser runs.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-P pid-file</emphasis> - Creates a file containing the pid of the main ser process.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>-i fifo-path</emphasis> - Creates a fifo, useful for monitoring ser status.
- </para>
- </listitem>
- </itemizedlist>
- </section>
- <section id="modulereference">
- <title>Modules</title>
- <para>
- Module description is currently located in READMEs of
- respective module directories. <filename>README-MODULES</filename>
- lists all available modules, including their maturity status.
- In the current <application>ser</application>
- distribution, there are the following modules:
- <itemizedlist>
- <listitem>
- <para>
- <emphasis>
- acc
- </emphasis>
- -- call accounting using <application>syslog</application> facility.
- RADIUS and mysql support can be compiled in.
- Depends on tm.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- auth, auth_db, auth_radius
- </emphasis>
- -- digest authentication. Depends on sl and mysql.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>domain</emphasis> -- checks URIs whether they belong
- in a list of served domains or not.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>ENUM</emphasis> -- E.164 phone number resolution using ENUM.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- exec
- </emphasis>
- -- execution of shell programs.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- group, group_radius
- </emphasis>
- -- checks membership of users in groups
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- jabber
- </emphasis> -- gateway between SIMPLE and Jabber instant messaging. Depends
- on tm and mysql.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- maxfwd
- </emphasis>
- -- checking max-forwards header field.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>msilo</emphasis>
- -- message silo. Store for undelivered instant messages. Depends on tm and mysql.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- mysql
- </emphasis>
- -- mysql database back-end.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- nathelper
- </emphasis>
- -- facilitates NAT traversal for symmetric SIP phones such as ATA.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- pa
- </emphasis>
- -- presence agent
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- registrar, usrloc
- </emphasis>
- -- User Location database. Works in in-memory mode or with mysql persistence
- support. Depends on sl, and on mysql if configured for use with mysql.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- rr
- </emphasis>
- -- Record Routing (strict and loose)
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- sl
- </emphasis>
- -- stateless User Agent server.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- sms
- </emphasis>
- -- SIMPLE/SMS gateway. Depends on tm. Takes special hardware.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>textops</emphasis> -- textual database back-end.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- tm
- </emphasis>
- -- transaction manager (stateful processing).
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis>
- uri, uri_radius
- </emphasis>
- -- checks digest identity against header URIs or a database list
- </para>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- The most frequently used actions exported by modules are summarized
- in <xref linkend="moduleactions"/>. For a full explanation of
- module actions, see documentation in respective module directories
- in source distribution of <application>ser</application>.
- </para>
- <table id="moduleactions">
- <title>Frequently Used Module Actions</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>
- Command
- </entry>
- <entry>
- Modules
- </entry>
- <entry>
- Parameters
- </entry>
- <entry>
- Comments
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- append_hf
- </entry>
- <entry>
- textops
- </entry>
- <entry>
- header field
- </entry>
- <entry>
- append a header field to the end of request's header
- </entry>
- </row>
- <row>
- <entry>
- check_from
- </entry>
- <entry>
- uri
- </entry>
- <entry>
- none
- </entry>
- <entry>
- check if username in from header field matches authentication id
- </entry>
- </row>
- <row>
- <entry>
- check_to
- </entry>
- <entry>
- uri
- </entry>
- <entry>
- none
- </entry>
- <entry>
- check if username in To header field matched authentication id
- </entry>
- </row>
- <row>
- <entry>
- exec_dset
- </entry>
- <entry>
- exec
- </entry>
- <entry>
- command name
- </entry>
- <entry>
- execute an external command and replace destination set with
- its output
- </entry>
- </row>
- <row>
- <entry>
- exec_msg
- </entry>
- <entry>
- exec
- </entry>
- <entry>
- command name
- </entry>
- <entry>
- execute an external command and pass received SIP request
- to its input
- </entry>
- </row>
- <row>
- <entry>
- is_user
- </entry>
- <entry>
- uri
- </entry>
- <entry>
- user id
- </entry>
- <entry>
- returns true if request credentials belong to a user
- </entry>
- </row>
- <row>
- <entry>
- is_user_in
- </entry>
- <entry>
- auth
- </entry>
- <entry>
- user, group
- </entry>
- <entry>
- check if user is member of a group; user can be gained
- from request URI ("Request-URI"), To header field ("To"),
- From header field ("From") or digest credentials
- ("Credentials")
- </entry>
- </row>
- <row>
- <entry>
- lookup
- </entry>
- <entry>
- usrloc
- </entry>
- <entry>
- table name
- </entry>
- <entry>
- attempt to translate request URI using user location database;
- returns false if no contact for user found;
- </entry>
- </row>
- <row>
- <entry>
- loose_route
- </entry>
- <entry>
- rr
- </entry>
- <entry>
- none
- </entry>
- <entry>
- process loose routes in requests
- </entry>
- </row>
- <row>
- <entry>
- mf_process_maxfwd_header
- </entry>
- <entry>
- maxfwd
- </entry>
- <entry>
- default max_forwards value
- </entry>
- <entry>
- return true, if request's max_forwards value has not
- reached zero yet; if none is included in the request,
- set it to value in parameter
- </entry>
- </row>
- <row>
- <entry>
- proxy_authorize
- </entry>
- <entry>
- auth
- </entry>
- <entry>
- realm, subscriber table
- </entry>
- <entry>
- returns true if requests contains proper credentials, false
- otherwise
- </entry>
- </row>
- <row>
- <entry>
- proxy_challenge
- </entry>
- <entry>
- auth
- </entry>
- <entry>
- realm, qop
- </entry>
- <entry>
- challenge user to submit digest credentials; qop may be turned
- off for backwards compatibility with elderly implementations
- </entry>
- </row>
- <row>
- <entry>
- record_route
- </entry>
- <entry>
- rr
- </entry>
- <entry>
- none
- </entry>
- <entry>
- record-route a request
- </entry>
- </row>
- <row>
- <entry>
- replace
- </entry>
- <entry>
- textops
- </entry>
- <entry>
- RegExp, Substitute
- </entry>
- <entry>
- find the first occurrence of a string matching the regular
- expression in header or body and replace it with a substitute
- </entry>
- </row>
- <row>
- <entry>
- replace_all
- </entry>
- <entry>
- textops
- </entry>
- <entry>
- RegExp, Substitute
- </entry>
- <entry>
- find all occurrences of a string matching the regular
- expression in header or body and replace it with a substitute
- </entry>
- </row>
- <row>
- <entry>
- save
- </entry>
- <entry>
- usrloc
- </entry>
- <entry>
- table name
- </entry>
- <entry>
- for use in registrar: save content of Contact header fields
- in user location database and reply with 200
- </entry>
- </row>
- <row>
- <entry>
- search
- </entry>
- <entry>
- textops
- </entry>
- <entry>
- regular expression
- </entry>
- <entry>
- search for a regular expression match in request header of body
- </entry>
- </row>
- <row>
- <entry>
- sl_send_reply
- </entry>
- <entry>
- sl
- </entry>
- <entry>
- status code, reason phrase
- </entry>
- <entry>
- reply a request statelessly
- </entry>
- </row>
- <row>
- <entry>
- t_relay
- </entry>
- <entry>
- tm
- </entry>
- <entry>
- none
- </entry>
- <entry>
- stateful forwarding to locations in current destination set
- </entry>
- </row>
- <row>
- <entry>
- t_on_failure
- </entry>
- <entry>
- tm
- </entry>
- <entry>
- failure_route number
- </entry>
- <entry>
- set failure_route block which shall be entered if stateful
- forwarding fails
- </entry>
- </row>
- <row>
- <entry>
- t_replicate
- </entry>
- <entry>
- tm
- </entry>
- <entry>
- host, port number
- </entry>
- <entry>
- replicate a request to a destination
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </section> <!-- modules -->
- <section id="fiforeference">
- <title>FIFO Commands Reference</title>
- <para>
- This section lists currently supported FIFO commands. Some of them are
- built-in in <application>ser</application> core, whereas
- others are exported by modules. The most important exporters are now
- tm and usrloc module. tm FIFO commands allow users to initiate transactions
- without knowledge of underlying SIP stack. usrloc FIFO commands allow
- users to access in-memory user-location database. Note that that is the
- only way how to affect content of the data-base in real-time. Changes
- to MySql database do not affect in-memory table unless <application>ser</application>
- is restarted.
- </para>
- <table>
- <title>FIFO Commands</title>
- <tgroup cols="4">
- <thead>
- <row>
- <entry>
- Command
- </entry>
- <entry>
- Module
- </entry>
- <entry>
- Parameters
- </entry>
- <entry>
- Comments
- </entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- ps
- </entry>
- <entry>
- core
- </entry>
- <entry>
- none
- </entry>
- <entry>
- prints running <application>ser</application> processes
- </entry>
- </row>
- <row>
- <entry>which</entry>
- <entry>core</entry>
- <entry>none</entry>
- <entry>prints list of available FIFO commands</entry>
- </row>
- <row>
- <entry>arg</entry>
- <entry>core</entry>
- <entry>none</entry>
- <entry>prints list of command-line arguments with which
- <application>ser</application> was started</entry>
- </row>
- <row>
- <entry>pwd</entry>
- <entry>core</entry>
- <entry>none</entry>
- <entry>prints <application>ser</application>'s working
- directory</entry>
- </row>
- <row>
- <entry>version</entry>
- <entry>core</entry>
- <entry>none</entry>
- <entry>prints version of <application>ser</application></entry>
- </row>
- <row>
- <entry>uptime</entry>
- <entry>core</entry>
- <entry>none</entry>
- <entry>prints <application>ser</application>'s running time</entry>
- </row>
- <row>
- <entry>sl_stats</entry>
- <entry>sl</entry>
- <entry>none</entry>
- <entry>prints statistics for sl module</entry>
- </row>
- <row>
- <entry>t_stats</entry>
- <entry>tm</entry>
- <entry>none</entry>
- <entry>print statistics for tm module</entry>
- </row>
- <row>
- <entry>t_hash</entry>
- <entry>tm</entry>
- <entry>none</entry>
- <entry>print occupation of transaction table (mainly for debugging)</entry>
- </row>
- <row>
- <entry>t_uac_dlg</entry>
- <entry>tm</entry>
- <entry>method, request URI, outbound URI (if none, empty line with a single dot),
- dot-line-terminated header fields, optionally dot-line terminated message
- body.
- </entry>
- <entry>initiate a transaction.
- From and To header fields must be present in header field list,
- so does Content-Type if body is present. If CSeq, CallId and From-tag
- are not present, ephemeral values are generated. Content_length is
- calculated automatically if body present.
- </entry>
- </row>
- <row>
- <entry>ul_stats</entry>
- <entry>usrloc</entry>
- <entry>none</entry>
- <entry>print usrloc statistics</entry>
- </row>
- <row>
- <entry>ul_rm</entry>
- <entry>usrloc</entry>
- <entry>table name, user name</entry>
- <entry>remove all user's contacts from user-location database</entry>
- </row>
- <row>
- <entry>ul_rm_contact</entry>
- <entry>usrloc</entry>
- <entry>table name, user name, contact</entry>
- <entry>remove a user's contact from user-location database</entry>
- </row>
- <row>
- <entry>ul_dump</entry>
- <entry>usrloc</entry>
- <entry>none</entry>
- <entry>print content of in-memory user-location database</entry>
- </row>
- <row>
- <entry>ul_flush</entry>
- <entry>usrloc</entry>
- <entry>none</entry>
- <entry>flush content of in-memory user-location cache in
- persistent database (MySQL)</entry>
- </row>
- <row>
- <entry>ul_add</entry>
- <entry>usrloc</entry>
- <entry>table name, user name, contact, expiration, priority (q)</entry>
- <entry>insert a contact address in user-location database</entry>
- </row>
- <row>
- <entry>ul_show_contact</entry>
- <entry>usrloc</entry>
- <entry>table, user name</entry>
- <entry>show user's contact addresses in user-location database</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </section>
- <section>
- <title>Used Database Tables</title>
- <para>
- <application>ser</application> includes MySQL support
- to guarantee data persistence across server reboots and storage
- of users' web environment. The data stored in
- the database include user profiles, access control lists, user location,
- etc. Note that users are not supposed to alter the data directly, as it
- could introduce inconsistency between data on persistence storage and
- in server's memory.
- The following list enumerates used tables and explains their purpose.
- <itemizedlist>
- <listitem>
- <para>
- subscriber -- table of users. It includes user names and
- security credentials, as well as additional user information.
- </para>
- </listitem>
- <listitem>
- <para>
- reserved -- reserved user names. <application>serweb</application>
- does not permit creation of accounts with name on this list.
- </para>
- </listitem>
- <listitem>
- <para>
- phonebook -- user's personal phonebooks. Accessible via
- <application>serweb</application>.
- </para>
- </listitem>
- <listitem>
- <para>
- pending -- table of unconfirmed subscription requests. Used by
- <application>serweb</application>.
- </para>
- </listitem>
- <listitem>
- <para>
- missed_calls -- table of missed calls. Can be fed by acc modules
- if mysql support is turned on. Displayed by <application>serweb</application>.
- </para>
- </listitem>
- <listitem>
- <para>
- location -- user contacts. Typically updated through
- <application>ser</application>'r registrar
- functionality.
- </para>
- </listitem>
- <listitem>
- <para>
- grp -- group membership. Used by auth module to determine
- whether a user belongs to a group.
- </para>
- </listitem>
- <listitem>
- <para>
- event -- allows users to subscribe to additional services.
- Currently unused.
- </para>
- </listitem>
- <listitem>
- <para>
- aliases -- keeps track of alternative user names.
- </para>
- </listitem>
- <listitem>
- <para>
- active_sessions -- keeps track of currently active web sessions.
- For use by <application>serweb</application>.
- </para>
- </listitem>
- <listitem>
- <para>
- acc -- keeps track of accounted calls. Can be fed by acc module
- if mysql support is turned on. Displayed by <application>serweb</application>.
- </para>
- </listitem>
- <listitem>
- <para>
- config -- maintains attribute-value pairs for keeping various information.
- Currently not used.
- </para>
- </listitem>
- <listitem>
- <para>
- silo -- message store for instant messages which could not have been
- delivered.
- </para>
- </listitem>
- <listitem>
- <para>
- version -- keeps version number of each table definition.
- </para>
- </listitem>
- <listitem>
- <para>
- domain -- maintains list of served domains.
- </para>
- </listitem>
- <listitem>
- <para>
- server_monitoring-* -- reserved for persistent monitoring of
- server's operation
- </para>
- </listitem>
- <listitem>
- <para>
- uri -- used to keep lists of URIs "owned" by a user
- (as identified by digest identity); good for some
- PSTN interworking scenarios
- </para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- </section>
|