SIP Router - New features in development version

The page collects the summary (draft notes) of the new features in SIP Express Router (SER) and Kamailio (OpenSER) development version.

This source tree branch will result in release 3.2.0 - release date proposal: Mid Autumn 2011.

Current stable branch is: 3.1

  • last major release: 3.1.0 - was released on Oct 06, 2010 (note that minor releases as version 3.1.x may be out already)

New SIP Router modules


  • collector for asynchronous config functions
  • async_route(…) - execute a route block asynchronously after an interval of time
  • async_sleep(…) - asynchronous sleep for usage when processing SIP requests


  • database connector for SQLite


  • distributed message queue using SIP to communicate between peers (SIP server instances)


  • IPv4 and IPv6 related functions for config file


  • json parser for configuration file


  • JSON-RPC client over netstrings


  • connector to Redis no-SQL database engine


  • Support for RFC 3680 in the presence architecture of Kamailio


  • Publish Registration info according to RFC 3680 ("reg"-Package), in case a user registration (based on usrloc callbacks)
  • Subscribe to remote registration info
  • Process published registration info (NOTIFY requests) and store it to usrloc
  • (currently still in the carstenbock/ims branch, planned as a replacement of the RFC 3680 implementation in the CSCF modules)


  • partitioned user location service


  • module to control the content of the SDP payload from configuration file
    • e.g.,: remove codecs


  • SIP traffic capturing server extension for Homer project

IMS Extensions

  • the IMS related modules resides in carstenbock/ims branch until they are integrated in master branch


  • The CDP (C-Diameter-Peer) modules provide an Diameter-interface, which are used by several components of the OpenIMS-core: They are used as Cx-Interface for the I-/S-CSCF and for the Rx-Interface for the P-CSCF. The modules may be used in other ways, too (e.g. for an Sh-Interface for an Kamailio-based aplication server)


  • The Proxy-CSCF in the IMS Architecture acts as an entry point to the network. The pcscf module of the original OpenIMS-core aggregates many functions required at this component: Header manipulation/verification, RTP-Relay and presence-support for the “reginfo”-event. Optional, the Rx-Interface for Billing may be enabled.


  • The Interrogating-CSCF is a kind of “Loadbalancer” or a entry Proxy for the “home-network” of an IMS setup. The I-CSCF will retrieve the location for a user from the HSS, it will check, where a user is registered or where it should register (based on user-settings, required capabilities later maybe even load). The icscf-module implements the according interfaces towards the HSS (Cx) and according header manipulation/verification methods.


  • The Serving-CSCF is acting as a registrar and as decision engine regarding the routing of the Request. It retrieves the user-data and routing rules from the HSS and applies them to the processed requests. The scscf-module implements the according interfaces towards the HSS (Cx), the interfaces towards application-servers (Isc) and according header manipulation/verification methods.


  • The MGCF-Module of the OpenIMS core implements header and content manipulation for interconnections towards Class 4 networks.


  • The Emergency-CSCF and the Location Ressource Function (LRF) implements IMS compliant emergency call routing. The modules provide required content aggregation methods.

New in Old SIP Router modules


  • name of acc and missed calls database tables can contain variables which are evaluated at runtime
  • generate user-customizable CDR logs
  • added 'failed_filter' module parameter


  • more modules available in Lua
    • auth
    • auth_db
    • dispatcher
    • maxfwd
    • presence
    • presence_xml
    • registrar
    • rr
    • sdpops
    • sqlops
    • tm
    • xhttp


  • New flag 16 to add stale=true to challenge response.


  • export of inter-module API (available through Lua)


  • Added optional uri_user param to radius_www_authorize().


  • reconnect in case of broken connection


  • read and set per-dialog variables from script
  • provide callbacks to fire on OK and ACK messages following INVITE, respectively
  • enable to terminate call programmatically


  • Added optional tag_avp module parameter and made lcr_flags module parameter optional.
  • Renamed dont_strip_or_tag_flag module parameter to dont_strip_or_prefix_flag.
  • load_gws() can take uri_user param, value of which is used instead of Request URI user part by load_gws() function.
  • [from|to][any]_gw functions now check also transport protocol.
  • Renamed lcr_gw table's tag field to prefix field.
  • Parameters of load_gw() function must be given without quotes.
  • Added tag field to lcr_gw table whose value is assigned to possible tag_avp by next_gw() and from_gw() functions.
  • Increased lcr_gw tables version number to 2.
  • Script that upgrades lcr_gw table from version 3.1 is available as


  • dp_translate() returns -2 (instead of -1) if dp with given id does not exist.


  • export of inter-module API (available through Lua)
  • new event routes that are called when destinations go on/off-line


  • Added new mode 2 to mt_match() that instead of setting value of longest matching prefix to a pv, sets values of all matching prefixes to an avp so that value of longest matching prefix is in avp index 0.


  • new function: is_rfc1918(ip_addr). Checks if the address <ip_addr> is a private range address.


  • export of inter-module API (available through Lua)


  • the module can work in three modes
    • caching
    • caching with fallback to database
    • database only


  • new exported functions to enable the online/offline presentity of a subscriber to be checked from the configuration file.


  • new pseudovariables:
    • $timef(format) - string representation of time formatted according to format
    • $Tb - epoch of the startup (boottime) of the current process
  • new transformations:
    • {s.ftime,<format>} - format the epoch in the pvar according to <format>
    • {s.sql} - output the pvar as valid SQL value. <null> as NULL, integer as bare number, string as quoted and escaped string
    • {s.replace,<search>,<replace>} - replace every occurrence of <search> in the pvar with <replace>
    • {s.prefixes[,<max>]}, {s.prefixes.quoted[,<max>]} - create a list of (quoted) prefixes of the pvar, with optional maximum prefix length: "123456"{s.prefixes.quot,4} ⇒ '1','12','123','1234'
  • new functions:
    • is_int() checks if pvar argument contains integer value.


  • export of inter-module API (available through Lua)


  • new parameters to control local contact and outbound proxy addresses
  • support for resource-list indices that reference other resource-list XML documents (including XPath within documents)
  • new exported function to allow re-subscription to a list to be initiated from the configuration file
  • module parameter added to allow the size of NOTIFYs to be limited, so that they aren't too big for other network entities


  • export of inter-module API (available through Lua)


  • force_rtp_proxy function was removed


  • Added set_uri_user(uri, user) and set_uri_host(uri, host) functions.
  • Function tel2sip() replaced by tel2sip(uri, hostpart, result).


  • xavp support. New function sql_xquery() stores the query result in an xavp.
  • BIGINT support. Native support when sql_xquery is used, transformed to string for sql_query().


  • new exported function to add "Date:" headers to requests.


  • asynchronous SIP request processing functions for configuration file
    • t_suspend() - suspend the processing of SIP request transaction
    • t_continue() - resume the processing of SIP request transaction
  • $T(name) - new class of pseudo-variables for accessing transaction attributes:
    • internal index, label, the branch index, reply code


  • new function: uac_reg_request_to. Lookup a local user from the registration table and prepares message variables so the request can be sent to the remote user, using the same credentials as with which the registration has been done.


  • store extra attributes per location records


  • xavp's are enabled by default now.


  • Support for extra auids:
    • org.openmobilealliance.user-profile
    • org.openmobilealliance.pres-content
  • Support for HTTP 1.1 pre-conditions to enable clients to avoid having to re-download unchanged documents and to check whether documents have changed or not on upload


  • export of inter-module API (available through Lua)

New in Core

Preprocessor directives

  • #!substdef - add a substitution rule and a define at the same time
  • #!substdefs - add a substitution rule and a define with string value at the same time
  • #!trydef - add a define if not defined already
  • #!redefine - force redefinition even if defined already

#! and !! can be used as start of preprocessor directives


Attempt to include a file, but if it is not found, do not throw error like include_file.


  • sql_buffer_size - Allows the size of the SQL buffer to be altered from the default of 65535 bytes. This allows objects larger than 64K to be stored in databases.

New in Documentation

Developer visible changes

  • Many bugfixes to existing doxygen code documentation in modules and core
  • Several extensions to doxygen documentation in modules and core




QR Code
QR Code features:new-in-devel (generated for current page)