<?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="options" xmlns:xi="http://www.w3.org/2001/XInclude">
    <sectioninfo>
	<authorgroup>
	    <author>
		<firstname>Nils</firstname>
		<surname>Ohlmeier</surname>
		<affiliation><orgname>iptelorg GmbH</orgname></affiliation>
		<address>
		    <email>nils@iptel.org</email>
		</address>
	    </author>
	</authorgroup>
	<copyright>
	    <year>2006</year>
	    <holder>iptelorg GmbH</holder>
	</copyright>
	<revhistory>
	    <revision>
		<revnumber>$Revision: 1.4 $</revnumber>
		<date>$Date: 2006/07/24 13:41:35 $</date>
	    </revision>
	</revhistory>
    </sectioninfo>

    <title>Sanity Module</title>

    <section id="sanity.overview">
	<title>Overview</title>
	<para>
		This module aims to implement several sanity checks on incoming
		requests which are suggested or even required by a RFC, but are
		not available yet in the core of SER.
	</para>
	<para>
		This checks are not required by SER itself for its functionality.
		But on the other side it makes not much sence if a broken
		request traverses through a SIP network if it is rejected sooner
		or later by a SIP device any way. As every sanity cost extra
		performance because of additional parsing and evaluation it
		is now with this module up to the SER adminstrator which checks
		should be done on which request.
	</para>
	<para>
		The following checks are available:
		<itemizedlist>
		<listitem>
			<para>
			ruri sip version - (1) - checks if the SIP version in the request
			URI is supported, currently only 2.0.
			</para>
		</listitem>
		<listitem>
			<para>
			ruri scheme - (2) - checks if the URI scheme of the request URI is
			supported (sip[s]|tel[s]) by SER.
			</para>
		</listitem>
		<listitem>
			<para>
			required headers - (4) -checks if the minimum set of required headers
			to, from, cseq, callid and via is present in the request.
			</para>
		</listitem>
		<listitem>
			<para>
			via sip version - (8) - not working because parser fails already 
			when another version then 2.0 is present.
			</para>
		</listitem>
		<listitem>
			<para>
			via protocol - (16) - not working because parser fails already if an
			unsupported transport is present.
			</para>
		</listitem>
		<listitem>
			<para>
			cseq method - (32) - checks if the method from the cseq header is equal
			to the request method.
			</para>
		</listitem>
		<listitem>
			<para>
			cseq value - (64) - checks if the number in the cseq header is a valid
			unsigend integer.
			</para>
		</listitem>
		<listitem>
			<para>
			content length - (128) - checks if the size of the body matches with the
			value from the content length header.
			</para>
		</listitem>
		<listitem>
			<para>
			expires value - (256) - checks if the value of the expires header is a
			valid unsigned integer.
			</para>
		</listitem>
		<listitem>
			<para>
			proxy require - (512) - checks if all items of the proxy require header
			are present in the list of the extensions from the module 
			parameter proxy_require.
			</para>
		</listitem>
		<listitem>
			<para>
			parse uri's - (1024) - checks if the specified URIs are present and
			parseable by the SER parsers
			</para>
		</listitem>
		<listitem>
		        <para>
			digest credentials (2048) Check all instances of digest credentials in a
			message. The test checks whether there are all required
			digest parameters and have meaningful values.
			</para>
		</listitem>
		</itemizedlist>
	</para>
    </section>
    
    <section id="sanity.dep">
	<title>Dependencies</title>
	<para>
	    The following modules must be loaded before this module:
	    <itemizedlist>
		<listitem>
		    <para>
			<emphasis>sl</emphasis> - Stateless replies.
		    </para>
		</listitem>
	    </itemizedlist>
	</para>
    </section>

    <xi:include href="params.xml"/>
    <xi:include href="functions.xml"/>
</section>
