July 29, 2020Kamailio SIP Server v5.4.0 has been released – this is a major release, meaning that it is introducing a significant number of new features as well as improvements to existing components.

Overview of new features in v5.4.0

(for more details see the wiki page)

Highlights

  • ability to specify a log engine via command line parameter and print structured JSON log messages for more flexibility in indexing (e.g., using ELK stack)
  • Kamailio Embedded Interpreter (KEMI) interface continued to grow in popularity, with a consistent increase number of dedicated helper functions via kemix module as well as exports from the rest of modules
  • options to load modules and set module parameters via command line, making easier to switch on/off features in containerized environments
  • new module for full management of SIP headers using variables
  • keepalive mechanism done by user location module for all contacts, tracking round trip between SIP server and end points for QoS monitoring
  • STIR/SHAKEN implementation in secsipid module (secure telephony identity extensions)
  • associate names to listen sockets and perform socket selection management using the names (e.g., force send socket, socket specification for dispatcher gateways, …)
  • many new classes of variables, among them: $xavu(…) – XAVP with unique value and $xavi(…) – XAVPs with case insensitive names

Summary Of New Features

  • five new modules:
    • dlgs – track active calls in stateless mode and export corresponding statistics
    • kafka – connector to Kafka server
    • pv_headers – flexible SIP header management with variables, simplifying configuration file
    • secsipid – implementation of STIR and SHAKEN IETF extensions, see RFC 8224 and RFC 8588 for details
    • systemdops – facilitate integration with systemd
  • dialog-based CDRs in JSON format
  • updates to JavaScript and Squirrel interpreters
  • several RPC commands to carrierroute modules to facilitate runtime management
  • corex module provides parameters to insert records in DNS cache at startup (e.g., add your own A or AAAA records, without needing a real DNS server)
  • encryption and decryption of SIP traffic using a shared key via crypto module
  • per gateway keepalive interval for drouting using keepalive module API
  • asynchronous insert support for db_cluster module
  • control SSL mode for db_mysql connection via modparam
  • many extensions added to Diamemter and IMS-related modules
  • database persistency for mqueue (the internal message queuing module)
  • several new variables and enhancements in the pv module
    • $xavu() – XAVPs with unique value (single value XAPVs)
    • $xavi() – XAVPs with case insensitive name
    • $fsn – send socket management using the name
    • variables to get the length for username in O-URI/R-URI/From/To addresses
    • functions to return xavp values in an array or dictionary to KEMI scripts
    • transformations to encode/decode base64 values with optional trailing padding
    • transformations to encode/decode base64url values
    • transformation to remove white spaces in a value
    • variable to return the message type as string value
  • TLS support for mqtt and exposure of QoS via variable
  • major enhancements for siptrace module to automatically track SIP traffic to database, or mirroring to a SIP address or HEP/Homer SIP capture server
  • usrloc module can send keepalive OPTIONS to all contacts and track the round trip for QoS monitoring
  • dispatcher module enhancements
    • new variable to get keepalive response attributes
    • ability to set outbound proxy per destination address
    • insert attributes per records via RPC add command
    • set destination address state using RPC command and the unique id
  • option to set the network interface to be used by http_client module
  • ability to load address records from a text file for permissions module
  • new features in the dialog module
    • dump all the details of active calls to a file upon an RPC command
    • new RPC command to get a summary of active dialogs
    • ability to set the dialog state via RPC command
    • config functions to reset the dialog properties
  • RPC commands to list and clean in-memory reports for cfgt module
  • rtpengine module enhancements:
    • play DTMF functions
    •  kemi support for block/unblock media/dtmf, and play/stop media functions
    • support for new T.38 options
  • new Contact address encoding/decoding functions – replace/restore Contact address with SIP server address, by encoding/decoding old address in a parameter
  • run event route on received/sent messages for sipdump module
  • additions to htable module:
    • function for atomic increment/decrement of htable values
    • RPC command to trigger saving of htable content to database
    • KEMI exports to test null values and get the timestamps
  • significant additions to tls module: new variables and selects, options to control random number generator engine, new very_client parameter for fine control on checking the peer-presented certificate
  • presence module can work in memory-only mode, with no database needed at all, with RPC command to dump the memory records
  • rr and path modules can store the local socket name in a SIP URI parameter to be used for routing subsequent requests
  • weight-based call routing distribution for t_load_contacts()/t_next_contacts() functions in tm module
  • RPC command to trigger transactions cleanup and ability to drop local requests in tm module
  • many new config functions and RPC commands for keepalive module for runtime management of addresses in the list for seending keepalives
  • more core parameters for more elasticity on containerised environments:
    • load modules with –loadmodule parameter
    • set module parameter with –modparam parameter
    • specify integer debug level with –debug parameter
    • specify the log engine with –log-engine parameter
  • new global parameter to specify additional characters allowed in SIP URI host part
  • details of the previous fragment on tail overwritten case
  • relocated the small very used internal libraries to the core
  • option to use rtpengine instead of rtpproxy with default kamailio.cfg
  • new subcommands in kamctl and kamli tools

Project achievements during v5.4.0 development cycle

  • the development of the project spans over 19 years of activity
  • it is the 22nd 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, (April 27-29, 2020, in Berlin) had to be cancelled due to pandemic restrictions
  • many presentations at in-person and online world wide events: Astricon, Cluecon, Fosdem, CommCon, ITExpo, TAD Hack, FUSECO Forum, Call Center World
  • continuous development at high pace – it was a shorter development cycle for 5.4.0 release, but the project just about to get to 31500 commits to the master branch (about 1400 commits done for v5.4.0 alone from more than 50 different contributors)
  • the project organised the 2nd edition of Kamailio Developers Meetup in Dusseldorf, November 14-15, 2019 – more about 15 developers came and spent two days of coding for Kamailio
  • the project is about to organize an online event to celebrate 19 years of continuous development on the 3rd of September, 2020 (the first code commit for the project was done on the 3rd of September, 2001). More details will be announced during the next days.

Downloading v5.4.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!