On March 02, 2009, Kamailio (OpenSER) 1.5.0 has been released. It represents the major version with the biggest new features boost since project was started back in 2005.
Release 1.5.0 comes after a shorter development period than usual – about five months of coding and more than one month of extensive testing, but brings lot of new features and improvements, with special care to stability, performance, security and flexibility. A short summary of what the release brings out:
- configuration file caching system – generic storage engine in memory via htable module allowing to share data between processes and reduce SQL operations by storing results in cache
- execute SQL queries against multiple databases and access the results in a fast and natural fashion
- execute config file route blocks on timer
- send SIP requests from config file
- perform HTTP queries from config file – integration with web service
- dialog info presence support – RFC4235
- support for TLS server_name extension (aka SNI=server name indication)
- support for non-blocking logging
- many enhancements to least cost routing (LCR), load balancing (dispatcher) and carrier routing (carrierroute)
- access in config file to both request or reply during transaction processing
- perl-like regular expression support (PCRE library)
- sanity check of SIP message structure
- protection against SIP reply attack
- twelve new modules
- code restructuring in core – slimmer and less exposed to issues
- default config contains sample for extra accounting and NAT traversal with nathelper and RTPProxy
- web management interface – SIREMIS
See more detailed description of the new features in the “New Features” section of this document.
Download:
You can download the tarball of the released sources at
https://www.kamailio.org/pub/kamailio/latest/src/
Binary packages for several distributions you can find at
https://www.kamailio.org/pub/kamailio/latest/bin/
https://www.kamailio.org/pub/kamailio/latest/packages/
Packages will be uploaded as soon as they are submitted.
Documentation:
- modules’ documentation: https://www.kamailio.org/docs/modules/1.5.x/
- migration guide : https://www.kamailio.org/dokuwiki/doku.php/install:1.4.x-to-1.5.0
New Features
Survey of new features in the core, modules, additional tools and documentation.
New in core:
-
module interface
-
modules can implement mod_register(…) function which is called at the time the module is loaded
-
allow to register to core in early stage any attributes exported by modules which might be needed while parsing the config file (e.g., case of PV transformations)
-
-
pseudo-variables
-
moved from core to PV module
-
use loadmodule “pv.so” in your config file
-
-
transformations
-
moved from core to PV module
-
use loadmodule “pv.so” in your config file
-
modules can export now transformations
-
-
tls support
-
added support for TLS server_name extension (aka SNI=server name indication)
-
-
daemontools support
-
added support for running openser with daemon tools (new core parameter for “no-daemon” mode)
-
-
memory management improvements
-
F_MALLOC has better startup performance, useful for e.g. carrierroute with larger rule sets
-
support for compiling the server with system malloc, without PKG_MEM
-
removal of the VQ_MALLOC memory manager, which was not used anymore
-
increase of the default private memory pool size, it uses now 4 MB per process
-
-
module interface
-
unify and cleanup module initialization and shutdown logging, its now done in core
-
-
non-blocking logging
-
support for non-blocking log writes to prevent blocking of the server in certain error situations
-
can be enabled by setting the SYSLOG_ASYNC define in the Makefile.defs, the default is the old implementation
-
-
database interface
-
generalization of existing common code of several DB modules in the core
-
support for BIGINT (8 byte integer) values
-
its now possible to autogenerate implementation code and documentation from the same XML source that is also used for the SQL
-
-
cleanups and refactoring
-
removal of obsolete code, unification and integration of existing functionality
-
-
developer documentation
-
unify existing documentation, convert them to doxygen, addition of new content for many modules and core functions
-
24% of all source lines are comments now, according to ohloh.net source code analysis, we’re now in the top third of all their C projects
-
Removed undocumented core functions serialize_branches()/next_branches(). Enhanced versions of these functions now exist in tm module as t_load_contacts()/t_next_contacts() functions.
-
-
drop
-
drop() function used in default reply route can drop any SIP reply received
-
-
Make system
-
easier system to set internal defined values like number of routes, size of pkg memory
-
options to build modules groupped by dependencies – see Makefile.vars
-
New modules:
-
htable
-
Generic hash table container made available to config script
-
Able to deal with many hash tables at same time in config file
-
Ability to load DB table in hash table at startup
-
Auto-expire for hash table values – will be removed automatically (easier to implement caching system)
-
Auto-expire value can be updated from config file
-
-
misc_radius
-
New module that replaces Kamailio 1.4 modules avp_radius, group_radius, and uri_radius
-
-
presence_dialoginfo
-
Dialog Info support for Presence Server
-
-
pua_dialoginfo
-
Dialog Info support for Presence User Agent
-
-
purple
-
Multi-protocol gateway module using Purple (Pidgin/ex-Gaim) library
-
Can connect SIP to GTalk, MSN, …, for IM&P
-
-
pv
-
Module to collect pseudo-variables from core, available in configuration file.
-
new pseudo-variable introduced in 1.5.0
-
$branch(name) class: see here
-
$TS – current time stamp, refreshed upon each call
-
$TF – current time string formatted, refreshed upon each call
-
-
new transformations introduced in 1.5.0
-
{tobody.abc} – return parts of a To-Body structure – see here
-
-
-
regex
-
PCRE regular expression matching
-
Regular expressions can be stored in a file and structured in groups
-
-
rtimer
-
execute route blocks on timer basis
-
can deal with multiple timers
-
can create new timer processes
-
each timer can execute multiple route blocks
-
-
siputils
-
SIP utilities module
-
various utilities related to the SIP protocol
-
management of 183 and 180 to control the ringing tone
-
-
sqlops
-
SQL operations module
-
Among features:
-
many DB connections – the module can connect to many databases on different servers using different DB driver modules at the same time.
-
many DB results – the module can store many results of different SQL queries in separate structures at the same time. Thus is possible to work in parallel with several DB results.
-
access via pseudo-variables – the content of SQL query result is accessible via pseudo-variables.
-
array indexes – fast access to result values via array position: [row,column].
-
persistence in process space – a result can be used many times in same worker process. Query once, use many times.
-
-
-
utils
-
Utilities module
-
http_query() function to get data from http servers
-
functionality to configure run time forwarding (copying) of certain messages
-
-
sanity
-
Module for sanitizing SIP messages
-
detect malformed messages early in the configuration
-
New in existing modules:
-
*_radius modules
-
New misc_radius module replaces Kamailio 1.4 modules: avp_radius, group_radius, and uri_radius
-
All misc_module functions now load AVPs from SIP-AVP reply items from RADIUS.
-
All functions send extra attributes to RADIUS if configured to do so by module parameters
-
Replaced avp_load_radius() function by radius_load_caller_avps() and radius_load_callee_avps() functions that take user, whose AVPs are loaded, as a string parameter that may contain pseudo variables.
-
String names of AVPs are not anymore prefixed with anything when AVPs are loaded (if needed, do prefixing in your Radius server).
-
-
acc module
-
Added support for integer valued Radius attributes.
-
-
auth_radius module
-
Added auth_extra module parameter that can be used to configure, which extra attributes (if any) are included in RADIUS queries. One such attribute could, for example, be Acct-Session-Id with Call-Id as its value.
-
-
carrierroute module
-
fetch result support, no increase in private memory pool necessary anymore to load larger routing data sets
-
extensive refactoring and cleanup, use standard functions or functions of the core instead of own implementations
-
efficient matching for domains and carriers based on numerical IDs
-
new support for non-numerial prefix matching (standard ascii set), configurable with a module parameter (match_mode)
-
-
db_mysql module
-
support for BIGINT (8 byte integer) values
-
add group functionality to read content from specified sections of the mysql config, the group can be setup in the db_url
-
-
db_postgres module
-
support for BIGINT (8 byte integer) values
-
-
db_unixodbc module
-
support for BIGINT (8 byte integer) values
-
fetch_result support, to better support modules like usrloc, carrierroute and dialog with larger data sets
-
-
dialog module
-
ability to execute a route block when a dialog time-outs
-
exports dialog attributes via pseudo-variable $dlg(…)
-
exports dialog context via pseudo-variable $dlg_ctx(…)
-
dlg_manage() function can be used to handle SIP requests with dialog module, as alternative to Route-header callback
-
dlg_bye() can be used to send BYE to one or both sides in the dialog
-
dialog structure stores flags field that can be managed from config file
-
option to send BYE when dialog expires
-
dlg_bridge() can be used to bridge two SIP users in a call using INVITE(on hold)-REFER-BYE mechanism
-
dlg_transfer() can be used to transfer one side of the dialog to a new SIP address
-
new MI command – dlg_bridge – to connect two sip users via MI interface – can be used to implement in a easy manner click-to-dial functionalities
-
-
dialplan module
-
Regular expressions are now Perl 5.x, instead of T-Rex (subset of POSIX), compatible due to use of PCRE regular expression library.
-
Alpha-stage t-rex library code removed
-
Types of regular expressions that can be used for matching increased substantially via PCRE:
-
-
dispatcher module
-
new algorithm 8 – select first destination in the set
-
priority can be assigned to each destination address
-
better predictability of selected destinations and easier (another) way to implement routing failover
-
check: Documentation
-
-
gflags module
-
functionality of this module was integrated into the cfgutils module
-
-
lcr module
-
New high-performance implementation that keeps lcr information in in-memory hash table, whose size can be given in a new module parameter ‘lcr_hash_size’. See lcr/README for lcr function execution times.
-
New ‘weight’ field in ‘gw’ table that can be used to assign a gateway a weight among gateways of its group.
-
New ‘hostname’ field in ‘gw’ table that (if not null) is used as Request-URI host part. Like before, request is still forwarded to gateway’s IP address.
-
Introduced aliveness checking of gateways. A gateway is eligible for aliveness check, if value of new ‘gw’ table field ‘ping’ has value 1 for the gateway.
-
Support for prefix_mode=1 has been dropped.
-
lcr_dump MI function has been split into lcr_gw_dump and lcr_lcr_dump functions.
-
lcr_reload function is now executed under a lock thus minimizing race conditions.
-
Regular expressions are now Perl 5.x, instead of POSIX, compatible due to use of PCRE regular expression library.
-
load_gws()/next_gw() functions can now be called also from FAILURE_ROUTE.
-
to_gw() function now takes an optional pseudo variable argument that holds the address to be checked.
-
New function to_gw_grp() replaces to_gw() function with group id argument.
-
Enhanced versions of load_contacts()/next_contacts() functions have been moved to tm module as t_load_contacts()/t_next_contacts() functions.
-
-
options module
-
functionality of this modules were integrated into the siputils module
-
-
registrar module
-
the registered() function can now load the compared Call-Id from the reg_callid_avp AVP
-
new function: unregister(table, uri) – remove all contacts for uri from table
-
save() accept a new flag 0×04 to store and maintain single contact address per AoR
-
new function: reg_fetch_contacts(table, uri, profile) – fetch contacts for uri from table in profile. You can access the attributes for contact via $ulc(profile⇒attr)
-
new function: reg_freee_contacts(profile) – release profile structure
-
new pseudo-variable: $ulc(profile⇒attr) – access attributes of contact records from profile
-
check: Documentation
-
-
sl module
-
new send_reply(code, reason) function that detect if the proxy is doing stateless/stateful processing and sends the reply accordingly
-
-
textops module
-
Added set_body(“text”, “content-type”) function – set the body of a SIP request
-
Added set_reply_body(“text”, “content-type”) function – set the body of a SIP reply generated by Kamailio (OpenSER)
-
Added {re.subst,expression} transformation – perform Perl-like substitutions on Pseudo-Variable values:Documentation
-
Added is_present_hf_re(regexp) – match header names by regular expression
-
Added remove_hf_re(regexp) – remove headers by matching the name against regular expression
-
check: Documentation
-
-
tlsops module
-
Added support for TLS server_name extension (aka SNI=server name indication)
-
-
tm module
-
auto-detection of changes done to From/To/CSeq headers of the INVITE to properly generate CANCEL/ACK
-
New functions t_load_contacts()/t_next_contacts() that are enhanced versions of functions load_contacts()/next_contacts() that earlier were in lcr module.
-
Function load_contacts() can now be called also from FAILURE_ROUTE.
-
t_check_trans() can be used in default onrely_route to detect if a SIP reply belongs to an existing transaction. Used together with drop() can vanish replies coming to proxy but not having a transaction.
-
$T_req(pv) – new pseudo-variable that provides access to request attributes while processing the reply
-
$T_rpl(pv) – new pseudo-variable that provides access to reply attributes while processing the request
-
t_cancel_branches(…) – can be used to cancel current processed branch, the other branches or all branches of the transaction
-
-
userblacklist module
-
Make database table and column names configurable
-
-
uac module
-
send SIP requests from config file: uac_send_req()
-
new pseudo-variable class to build the request to be sent: $uac_req(key)
-
-
uri module
-
functionality of this modules were integrated into the siputils module
-
New in additional tools:
- testing suite – now over 40 test cases
- documentation
- addition of man pages for all modules
-
addition of man pages for the kamdbctl command
-
update of all existing man pages
-
addition of a documentation index to the wiki
-
web management interface – SIREMIS
-
provides system and database administration tools for Kamailio (OpenSER)
-
subscriber, database aliases and speed dial management
-
location table view, carrier route management
-
dispatcher, prefix-domain translation and least cost routing (lcr) management
-
access control lists (user groups) and permissions management
-
accounting records, missed calls and call data records view
-
hash table, dial plan table and user preferences table management
-
offline message storage view
- MI communication with Kamailio (OpenSER) via datagram socket
- graphic charts
- more at http://siremis.asipto.com
-
These are not all, there is a big change log that gives more details:
https://www.kamailio.org/pub/kamailio/latest/ChangeLog
Kamailio (OpenSER) v1.5.0 marks the end of current stage of project development and beginning of the SIP-Router.org era. SIP-Router.org is already in an advanced integration state. Check more details at http://sip-router.org.
Note: Kamailio is the new name of OpenSER project, name changed on July 28, 2008, due to trademark issues. First version under Kamailio name was 1.4.0. Older versions will continue to use OpenSER name. Project site and SVN repository on SourceForge.net still use the old name OpenSER.