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.
395 lines
11 KiB
395 lines
11 KiB
<?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>SIP session timers are used to make sure that
|
|
a session (dialog) is still alive, even though there
|
|
may have been a long time since the last in-dialog message.
|
|
If the other end is not responding, the dialog will
|
|
be hung up automatically. SIP session timers need to
|
|
be supported by all end points for it to work. It's a
|
|
SIP extension, standardized by the IETF.</para>
|
|
|
|
<para>The sst module provides a way to update the
|
|
dialog expiry timer based on the SIP INVITE/200 OK
|
|
Session-Expires header value. You can use the sst
|
|
module in an &kamailio; proxy to allow freeing of local
|
|
resources of dead calls.</para>
|
|
|
|
<para>You can also use the sst module to validate the
|
|
MIN_SE header value and reply to any request with a
|
|
"422 - Session Timer Too Small" if the value is too
|
|
small for your &kamailio; configuration.</para>
|
|
|
|
</section>
|
|
|
|
<section>
|
|
<title>How it works</title>
|
|
|
|
<para>The sst module uses the <quote>dialog module</quote> to be notified of
|
|
any new or updated dialogs. It will then look for and extract
|
|
the session-expire: header value (if there is one) and
|
|
override the dialog expire timer value for the current context
|
|
dialog by setting the avp value.</para>
|
|
|
|
<para>You flag any call setup INVITE that you want to cause a
|
|
timed session to be established. This will cause &kamailio; to
|
|
request the use of session timers if the UAC does not request
|
|
it.</para>
|
|
|
|
<para>All of this happens with a properly configured dialog
|
|
and sst module and setting the dialog flag and the sst flag at
|
|
the time any INVITE sip message is seen. There is no
|
|
&kamailioconfig; script function call required to set the dialog
|
|
expire timeout value. See the <quote>dialog module</quote> users guide for
|
|
more information.</para>
|
|
|
|
<para>The <quote>sstCheckMin()</quote> script function can be used to verify
|
|
that the Session-expires / MIN-SE header field values are not too
|
|
small for your server. If the SST min_se parameter value is
|
|
smaller than the messages Session-Expires / MIN-SE values, the
|
|
test will return true. You can also configure the function to
|
|
send the 422 error response for you.</para>
|
|
|
|
<para>The following was taken from the RFC as a call flow
|
|
example:</para>
|
|
|
|
<example>
|
|
<title>Session timer call flow</title>
|
|
<programlisting format="linespecific">
|
|
+-------+ +-------+ +-------+
|
|
| UAC-1 | | PROXY | | UAC-2 |
|
|
+-------+ +-------+ +-------+
|
|
|(1) INVITE | |
|
|
|SE: 50 | |
|
|
|----------->| |
|
|
| |(2)sstCheckMin |
|
|
| |-----+ |
|
|
| | | |
|
|
| |<----+ |
|
|
|(3) 422 | |
|
|
|MSE:1800 | |
|
|
|<-----------| |
|
|
| | |
|
|
|(4)ACK | |
|
|
|----------->| |
|
|
| | |
|
|
|(5) INVITE | |
|
|
|SE: 1800 | |
|
|
|MSE: 1800 | |
|
|
|----------->| |
|
|
| |(6)sstCheckMin |
|
|
| |-----+ |
|
|
| | | |
|
|
| |<----+ |
|
|
| |(7)setflag |
|
|
| |Dialog flag |
|
|
| |Set expire |
|
|
| |-----+ |
|
|
| | | |
|
|
| |<----+ |
|
|
| | |
|
|
| |(8)INVITE |
|
|
| |SE: 1800 |
|
|
| |MSE: 1800 |
|
|
| |-------------->|
|
|
| | |
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
|
|
</section>
|
|
|
|
<section>
|
|
<title>Dependencies</title>
|
|
<section>
|
|
<title>&kamailio; Modules</title>
|
|
|
|
<para>The following modules must be loaded
|
|
before this module:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>dialog</emphasis> or <emphasis>dialog-ng</emphasis>
|
|
- dialog module and its dependencies. (tm)
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>sl</emphasis> - stateless module.
|
|
</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="sst.p.enable_stats">
|
|
<title><varname>enable_stats</varname> (integer)</title>
|
|
|
|
<para>If the statistics support should be enabled or
|
|
not. Via statistic variables, the module provide
|
|
information about the dialog processing. Set it to zero to
|
|
disable or to non-zero to enable it.</para>
|
|
|
|
<para>
|
|
<emphasis>
|
|
Default value is <quote>1</quote> (enabled).
|
|
</emphasis>
|
|
</para>
|
|
|
|
<example>
|
|
<title>Set <varname>enable_stats</varname> parameter</title>
|
|
<programlisting format="linespecific">
|
|
...
|
|
modparam("sst", "enable_stats", 0)
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="sst.p.min_se">
|
|
<title><varname>min_se</varname> (integer)</title>
|
|
|
|
<para>The value is used to set the proxies MIN-SE
|
|
value and is used in the 422 error reply as the proxys
|
|
MIN-SE: header value if the <quote>sstCheckMin()</quote> flag is set
|
|
to true and the check fails.</para>
|
|
|
|
<para>If not set and <quote>sstCheckMin()</quote> is called with the
|
|
send-reply flag set to true, the default 1800 seconds
|
|
will be used as the compare and the MIN-SE: header
|
|
value if the 422 reply is sent.</para>
|
|
|
|
<para>
|
|
<emphasis>
|
|
Default value is <quote>1800</quote> seconds.
|
|
</emphasis>
|
|
</para>
|
|
<example>
|
|
<title>Set <varname>min_se</varname> parameter</title>
|
|
<programlisting format="linespecific">
|
|
...
|
|
modparam("sst", "min_se", 2400)
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="sst.p.timeout_avp">
|
|
<title><varname>timeout_avp</varname> (string)</title>
|
|
|
|
<para>This parameter MUST be set to the same value as the
|
|
dialog module parameter of the same name. If this parameter is
|
|
NOT set, the sst module will not do anything!</para>
|
|
|
|
<para>This is how the sst module knows which avp in the
|
|
dialog module it has to change with the new expire value.</para>
|
|
|
|
<para>
|
|
<emphasis>
|
|
Default value is <quote>NULL!</quote> it is not set by default.
|
|
</emphasis>
|
|
</para>
|
|
<example>
|
|
<title>Set <varname>timeout_avp</varname> parameter</title>
|
|
<programlisting format="linespecific">
|
|
...
|
|
modparam("dialog", "timeout_avp", "$avp(i:10)")
|
|
# Set the sst modules timeout_avp to be the same value
|
|
modparam("sst", "timeout_avp", "$avp(i:10)")
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
<section id="sst.p.reject_to_small">
|
|
<title><varname>reject_to_small</varname> (integer)</title>
|
|
|
|
<para>In the initial INVITE if the UAC has requested a
|
|
Session-Expire: and it's value is smaller than our
|
|
local policies Min-SE (see min_se above), then the
|
|
proxy has the right to reject the call by replying to
|
|
the message with a <quote>422 Session Timer Too Small</quote> and
|
|
state our local Min-SE: value. The INVITE is NOT
|
|
forwarded on through the proxy.</para>
|
|
|
|
<para>If this flag is true, the SST module to
|
|
reject the INVITE with a 422 response. If false, the
|
|
INVITE is forwarded through the PROXY without any
|
|
modifications.</para>
|
|
|
|
<para>
|
|
<emphasis>
|
|
Default value is <quote>1</quote> (true/on).
|
|
</emphasis>
|
|
</para>
|
|
<example>
|
|
<title>Set <varname>reject_to_small</varname> parameter</title>
|
|
<programlisting format="linespecific">
|
|
...
|
|
modparam("sst", "reject_to_small", 0)
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
<section id="sst.p.sst_flag">
|
|
<title><varname>sst_flag</varname> (integer)</title>
|
|
|
|
<para>Keeping with &kamailio;, the module will not do
|
|
anything to any message unless instructed to do so via
|
|
the &kamailioconfig; script. You must set the sst_flag
|
|
value in the setflag() call of the INVITE you want the
|
|
sst module to process. But before you can do that, you
|
|
need to tell the sst module which flag value you are
|
|
assigning to sst.</para>
|
|
|
|
<para>In most cases whenever you set the dialog flag
|
|
you will want to set the sst flag. If the dialog flag
|
|
is not set and the sst flag is set, it will not have
|
|
any effect.</para>
|
|
|
|
<para><emphasis>This parameter must be set or the module will
|
|
not load.</emphasis></para>
|
|
|
|
<para>
|
|
<emphasis>
|
|
Default value is <quote>Not set!</quote>.
|
|
</emphasis>
|
|
</para>
|
|
<example>
|
|
<title>Set <varname>sst_flag</varname> parameter</title>
|
|
<programlisting format="linespecific">
|
|
...
|
|
modparam("dialog", "dlg_flag", 5)
|
|
modparam("sst", "sst_flag", 6)
|
|
...
|
|
route {
|
|
...
|
|
if (method=="INVITE") {
|
|
setflag(5); # set the dialog flag
|
|
setflag(6); # Set the sst flag
|
|
}
|
|
...
|
|
}
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
</section>
|
|
<section>
|
|
<title>Functions</title>
|
|
<section id="sst.f.sstCheckMin">
|
|
<title>
|
|
<function moreinfo="none">sstCheckMin(send_reply_flag)</function>
|
|
</title>
|
|
|
|
<para>Check the current Session-Expires / MIN-SE values
|
|
against the sst_min_se parameter value. If the
|
|
Session-Expires or MIN_SE header value is less than the
|
|
modules minimum value, this function will return
|
|
true. </para>
|
|
|
|
<para>If the fuction is called with the
|
|
send_reply_flag set to true (1) and the requested
|
|
Session-Expires / MIN-SE values are too small, a 422
|
|
reply will be sent for you. The 422 will carry a
|
|
MIN-SE: header with the sst min_se parameter value
|
|
set.</para>
|
|
|
|
<para>Meaning of the parameters is as follows:</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para><emphasis>min_allowed</emphasis> - The value
|
|
to compare the MIN_SE header value to.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<example>
|
|
<title><function>sstCheckMin</function> usage</title>
|
|
<programlisting format="linespecific">
|
|
|
|
...
|
|
modparam("dialog", "timeout_avp", "$avp(i:4242)")
|
|
modparam("dialog", "dlg_flag", 5)
|
|
...
|
|
modparam("sst", "sst_flag", 6)
|
|
modparam("sst", "timeout_avp", "$avp(i:4242)")
|
|
modparam("sst", "min_se", 2400) # Must be >= 90
|
|
...
|
|
|
|
route {
|
|
if (method=="INVITE") {
|
|
if (sstCheckMin("1")) {
|
|
xlog("L_ERR", "422 Session Timer Too Small reply sent.\n");
|
|
exit;
|
|
}
|
|
# track the session timers via the dialog module
|
|
setflag(5);
|
|
setflag(6);
|
|
}
|
|
}
|
|
|
|
... or ...
|
|
|
|
route {
|
|
if (method=="INVITE") {
|
|
if (sstCheckMin("0")) {
|
|
xlog("L_ERR", "Session Timer Too Small, dropping request\n");
|
|
exit;
|
|
}
|
|
# track the session timers via the dialog module
|
|
setflag(5);
|
|
setflag(6);
|
|
}
|
|
}
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
</section>
|
|
|
|
|
|
<section>
|
|
<title>Statistics</title>
|
|
<section>
|
|
<title><varname>expired_sst</varname></title>
|
|
<para>
|
|
Number of dialogs which got expired session timer.
|
|
</para>
|
|
</section>
|
|
</section>
|
|
|
|
<section>
|
|
<title>Installation and Running</title>
|
|
<para>Just load the module and remember to set the timeout_avp value.</para>
|
|
</section>
|
|
</chapter>
|
|
|