May 05, 2021Kamailio SIP Server v5.5.0 has been released – this is a major release, meaning that it is introducing a consistent number of new features as well as improvements to existing components.

Overview of new features in v5.5.0

(for more details see the wiki page)

Highlights

  • ability to get values for defined tokens from environment variables, enabling better security by not keeping the values in the configuration file
  • pre-routing event route allowing to dispatch traffic to specialized worker processes, which can be defined via async_workers_group global parameter
  • distributed message queue (dmq) supports secure inter-node communication using TLS
  • new load balancing algorithm for latency optimized round-robin with failover
  • options to load modules and set module parameter values with config variables
  • option print configuration file after evaluation of #!ifdef pre-processor conditions
  • Kamailio Embedded Interpreter (KEMI) interface continued to grow in popularity, with a more dedicated helper functions via kemix module as well as exports from the rest of modules
  • new module offering websocket client connector and support for rtpengine module to use websocket for control protocol
  • new module to generate and verify JWT (JSON Web Token)
  • another new module offering an alternative implementation for STIR/SHAKEN using libstirshaken
  • topology stripping with context grouping and spiralling support
  • kamcli tool added internal interactive shell with syntax highlighting, tab completion and history suggestions
  • many new variables and transformations

Summary Of New Features

  • six new modules:
    • jwt – JSON Web Token generation and validation
    • lwsc – websocket client connector
    • lrkproxy – RTP relaying using kernel forwarding rules controlled by external application
    • secsipid_proc – pseudo-module offering per process API for secsipid module (STIR/SHAKEN implementation)
    • stirshaken – implementation of STIR/SHAKEN IETF extensions using libstirshaken
    • sworker – tasks management for specialized workers
  • sipdump module can write traffic in pcap files
  • accounting of locally generated response code and reason
  • acc_json accepts pre-encoded JSON values
  • updates to JavaScript and Squirrel interpreters
  • crypto support for hmac sha256 and improved interoperability
  • added rpc commands shm.info and shm.stats in corex module and ability to check a local socket by name
  • handle permanent contacts by cplc and options to ignore 3xx replies
  • postgres connection parameters can be set in a more flexible format
  • dispatcher latency optimised round robin algorithm
  • DNS SRV support for drouting module
  • dedicated function to do HTTP GET requests with extra headers (and body)
  • use of client certificates for HTTP requests
  • parameter to control following redirects for http_async_client module
  • substantial improvements and new features to IMS/VoLTE modules (ims_charging, ims_qos, ims_ipsec_pcscf, …)
  • several new variables, transformations and enhancements in the pv module
    • $defn() – defined value as number
    • $Rni() – received socket name
    • $fsn – send socket management using the name
    • new {uri} transformations to get address of record and destination URI variants
    • transformations to get the parts of the string before or after a character
    • new transformation class {urialias} – encode/decode uri alias values (addr~port~proto)
    • xavp_slist_explode() to break a string in tokens by separators, storing them in xavp
  • ability to encode or decode XAVPs to JSON documents in the jansson module
  • pkg.info rpc command to get details about pkg manager in the kex module
  • keepalive module improvements for dynamic management of destination addresses during runtime
  • new features and attributes for LoST redirect, dynamic HELD URL resolving and LoST NAPTR
  • pua_dialoginfo module enhancements
    • control whether to publish information for requests within dialog
    • ability to set caller/callee URI when disabling publishing with config flags
    • option to add caller/callee display attribute in published documents
  • new function to check if a pipe is active in pipelimit module
  • support for a=rtcp param (RFC3605) in nathelper fix sdp function
  • new features in the secsipid module
    • initialise the API per process to cope properly with multi-threading library
    • secsipid_check_identity_pubkey(pubkeyVal) function to check the identity header validity with a public key
    • secsipid_get_url(url, ovar), convenience function to get the content of a URL and store the result
    • verify certificates against trusted CA list or CRL
  • support for ptime matching in mohqueue module
  • rtpengine module enhancements:
    • use of websocket (via lwsc module) to control RTPEngine application
    • support for new codec flags and explicit support for codec-set and codec-except
    • added CRC32 hash algorithm for message distribution
    • support for fallback if a node ran out of ports
    • ability to query round-trip-time per call leg
  • registrar ability to store advertised address instead of bind address in socket field
  • option to take expires value from xavp_cfg field in registrar module
  • additions to topos module:
    • event routes for incoming traffic allowing to fine tune the topology stripping behaviour
    • grouping of sessions in contexts
    • support for handling spiralled sessions
    • better control of Contact header
  • stricter sanity checks for SIP mandatory headers
  • ability to set global client context for outgoing TLS connections
  • more flexibility when connection to Redis clusters using ndb_redis module
  • improved IPv6 support for MSRP relay module
  • option to pass IP address to pike checking via parameter
  • safety protection for reload races for permissions address records
  • more core parameters and cli parameters:
    • async_workers_group to define groups of async worker processes
    • –atexit cli parameter to skip atexit callbacks execution from external libraries
    • –cfg-print to output the config file by evaluating includes ifdefs, subst and define pre-processor directive
    • local_rport parameter to always add rport to locally generated Via
    • new global parameter to specify additional characters allowed in the SIP header names
    • load modules and set module parameters with variables
  • tlsf memory manager was synchronised with upstream project
  • major new features in the kamcli tool

Project achievements during v5.5.0 development cycle

  • the development of the project spans approaches 20 years of activity
  • it is the 23rd public major release in the history of project (SER project went out first with v0.8.x)
  • the 8th edition of its own conference, Kamailio World, was organised as a 2-days online event
  • presentations at other online events: Astricon, Cluecon, Fosdem, CommCon, TAD Hack
  • continuous development at high pace – the project just about to get to 32800 commits to the master branch (about 1400 commits done for v5.5.0 alone from more than 70 different contributors)
  • the project is about to organize an online event to celebrate 20 years of continuous development on the 3rd of September, 2021 (the first code commit for the project was done on the 3rd of September, 2001). More details will be announced in the near future.

Downloading v5.5.0

You can download the tarball of the released sources at:

Binary packages for several distributions can be found at:

Packages will be uploaded as soon as they are built by developers (Debian and Ubuntu debs as well as RPMs for Centos, RedHat, Fedora and OpenSUSE) or submitted by community for other operating systems.

A step by step installation tutorial is available at:

Documentation

Useful links:

Many thanks to those contributing with code, helping testing or advocating the project!

We are looking forward to meeting many of you at events around the world (online or in person), and invite you to join the efforts to improve Kamailio!

Thanks for flying Kamailio!