Kamailio SIP Server - New Features in v5.4.x
Previous version was 5.3.x (released on October, 2019), see what was new in that release at:
This is a draft of new features added in this version, manually updated, thus not always synchronized with what is new in source code repository.
Documentation
Many fixes were done to the modules, missing parameter were added, wrong parameter or function names fixed and explanation or clarifications added. Furthermore many debug messages in the core and modules were extended, to help analyzing problems or bugs. The full details can be found in the release Changelog or with the “git log” command.
Bugfixes
Countless bugfixes were implemented for this release in core, tools and modules. Furthermore the code base was scanned with several static analyzers, to detect otherwise hard to find bugs. The full details can be found in the release Changelog or with the “git log” command.
New Modules
Flexible headers management $x_hdr exported variables, to offload header processing and to simplify SIP header modifications
kafka
New module to produce and send messages to a Kafka server:
secsipid
new module implementing STIR and SHAKEN IETF extensions, see
RFC 8224 and
RFC 8588 for details
systemdops
New module to facilitate integration with systemd:
dlgs
New module to enable lightwight, stateless dialog tracking and statistics
New in existing Modules
acc
adding CDR engine functionality, to allows the extension of the acc module for other formats or backends
new skip_cdr modparam to prevent cdr generation for certain calls
auth_db
avpops
add avp_subst_pv(), same functionality as avp_subst() but second parameter will be evaluated before calling subst
export avp_check and avp_copy functions to KEMI
app_python
app_lua
app_ruby
app_jsdt
acc_json
* adding CDR as JSON functionality
call_control
carrierroute
organize and add new RPC commands, cr.add_host, cr.delete_host, cr.activate_host, cr.deactivate_host and cr.replace_host
remove obselete FIFO commands implementation
cdt
cfgt
Added new cfgt.list and cfgt.clean RPC commands
corex
add functions to set socket by name
new function is_faked_msg()
new param dns_cache to add values to the internal dns cache
export file read/write functions to kemi
ctl
crypto
drouting
db_cluster
* support for insert_async DB API
db_mysql
switch from deprecated /var/run to /run
new parameter opt_ssl_mode - allow controling ssl mode, can disable or enforce use of SSL
db_redis
dispatcher
switch from deprecated /var/run to /run
add state to mode in ds_list_exists, adds Bit 3 to allow the check of active/inactive entries in ds_list
option to set add socket as string in the dst xavp
new variable $dsv(…) to access attributes related to response code when executing event routes
add new parameter ds_default_sockname, to set the send socket by name
add new gateway attribute “obproxy”
add RPC command dispatcher.hash, compute the hash id of the value and do modulo operation if first parameter is not 0
new RPC command dispatcher.set_duid_state, to set the state of a destination by matching on duid attribute
add attrs param to RPC 'add' call
dialog
adding dlg.set_state command, which can be used e.g. to force the killing of active dialogs
add dlg.briefing RPC command, list fewer details for the dialog records in memory
customizable list of fields for dlg.briefing rpc command, it can take an optional parameter to specify what fields to be add
new dlg_reset_property() function is add to disable the previously enabled dialog module behaviour, e.g. stop sending keep-alive OPTIONS messages
export dlg_reset_property() to KEMI
add RCP command dlg.dump, an alternative command to output dialogs data to file, far much faster than dlg.list
dmq
dmq_usrloc
replicate_socket_info using dmq, useful for anycast scenarios
add new parameter `usrloc_delete` to disable synchronizing delete actions
htable
export sht_is_null() function to KEMI
export functions to inc and dec hash table values to KEMI
export function to get timestamp to KEMI
new RPC command htable.store, to save the content of a hash table to DB
http_client
http_async_client
log_custom
lost
add civic address parsing via xpath, with fallback to point or circle attributes
new module parameters to set HeLD request attributes, parameters are exact_type, response_time, and location_type
mqueue
mqtt
permissions
path
new param sockname_mode, socket name is add to Path
URI in 'sn' param
presence
new parameter pres_subs_mode, allow disabling cloning subscription structure for pv use to save run-time memory
add delete_same_subs module parameter, to enable deleting of subscriptions with the same presence uri and callid
timer_mode, new module parameter to control what timer process to use
add support to keep presentity records in memory instead of DB
add new parameter publ_cache parameter to define caching mode
add RCP command presence.presentity_list [mode] to print all attributes of the presentity record
presence_xml
pua_dialoginfo
pv
Add new pseudo-variables:
$xavi: Similar to XAVPs, but with key names are case insensitive. XAVIs are also stored in transaction context and destroyed when the transaction is terminated.
$xavu: Similar to XAVPs, but with single value items, therefore there are no indexes in the naming format. XAVUs are also stored in transaction context and destroyed when the transaction is terminated.
add new function xavp_copy
new transformations s.encode.base64t and s.decode.base64t, base64 encode/decode with optional trailing padding
new transformation {s.rmsw} - remove whitespaces from value, removes all occurences of ' ', '\t', '\r', '\n'
KEMI functions for $shv(…) management
export xavp copy variants to KEMI
export functions for $var(…) management to KEMI
add transformations for base64-url encode/decode variants
add config and kemi functions to print xavu vars
new config variable $fsn - forced send socket name
add KEMI functions pvx.xavp_get_keys and pvx.xavp_getd
add $xavi(…) config variables implementation, same as $xavp but case insensitive for keys
new var $mts, return msg type as string
add vars to get the length for o-uri/r-uri/f-uri/t-uri username, $oUl, $rUl, $fUl, $tUl
p_usrloc
add matching_mode modparam, to specify the Contact matching
add a new uniq column to support new update modes
change “-” for “_” in stats name to be prometheus compliant
ratelimit
registrar
Add path value to xavp_rcd location record
Add xavp_rcd_mask parameter to control what values to skip
-
control what values to add to xavp_rcd via xavp_rcd_mask parameter
option to send 423 when expires less than min_expires with the min_expires_mode parameter
add use_expired_contacts config param to allow or disallow the usage of the expired contacts
rr
export record_route_preset_one() to KEMI
new function rr_next_hop_route(), return true if there is a route header for next hop address
new param sockname_mode, socket name is add to Path
URI in 'sn' param
new convenience function loose_route_preloaded()
export record_route_advertised_address() to KEMI
rtpengine
add play_dtmf() command
update/fix via-branch=next ID generation, via-branch=next should not use a hard-coded branch index of zero, but instead use the actual branch index from the tm module
adds via-branch=auto-next and via-branch=auto-extra for easier processing in scripts
add support for new T.38 options
enable handling of PRACK requests
add kemi support for block/unblock media/dtmf, and play/stop media functions
sdpops
siputils
contact encoding functions export to KEMI
new function contact_param_rm(“param-name”), remove parameter by name from Contact header
URI
new function uri_param_rm(pname), remove parameter from request
URI
new function uri_param_any(param), check if r-uri has the param, with or without value
sipcapture
sipdump
switch from deprecated /var/run to /run
option to run event_route[sipdump:msg] on received/send messages
KEMI functions to return buf and tag values
KEMI exports to get src/dst ip of the message
siptrace
add functionality to duplicate via HEP with any protocol
the trace_mode can now be used to automatically store traffic to db or mirror via SIP
URI
add parameter trace_init_mode, to control the tracing initialization for the module
use the send socket also for duplication via SIP
send_sock_name, new parameter to specify send socket by name
support for using async-insert to store records to database, new parameter trace_db_mode to control the mode
sqlops
textops
tcpops
new variabale $tcp(key), return attributes related to tcp connection
add function to control use of outbound tcp connection id, tcp_set_otcpid() and tcp_set_otcpid_flag()
tm
add support for dropping messages in local-request event route
new weight-based call-termination distribution, extended t_load_contacts function. It can be used to define the algorithm to use for ordering the contacts
add new t_clean() script function, as low-level helper to cleanup transactions in certain situations, also export it to KEMI
add support for using socket names in UAC
new parameter exec_time_check for safety checks on lenghtly callbacks, try to detect when failure callbacks execution take too long and do safety check of the transaction
tls
use internal cryptographic algorithm for pseudo-random number generation, prevent crashes on newer libssl versions
add fall-back fastrand and kamailio mutex protection pseudo-random number generation as well
use TLSv1.2 in default configuration
set default tls method (version) to 1+
add verify_client support parameter
add support for urlencoded cert PVs and select,
new PVs: $tls_peer_raw_cert, $tls_peer_urlencoded_cert, $tls_my_raw_cert, $tls_my_urlencoded_cert
new selects: @tls.peer.raw_cert, @tls.peer.urlencoded_cert, @tls.my.raw_cert, @tls.my.urlencoded_cert
add select for tls verified cert chain (requires OpenSSL 1.1+)
add support to link against static libraries in Makefile
ims_charging
add support for Application-Provided-Called-Party-Address AVP
add support for destination_host parameter, implementation was incomplete
ims_usrloc_pcscf
ims_ipsec_pcscf
new parameter in ipsec_forward() to set or not 'send force socket' for request messages, useful for IPSEC or TCP connections
new config param - ipsec_reuse_server_port, to specify the re-use of the PCSCF server port for UA Re-registration
ims_diameter_server
ims_ocs
ims_qos
janssonrpcc
jsonrpcc
jsonrpcs
kazoo
keepalive
add new function del_destination and add cfg functions
add keepalive.add, keepalive.del, keepalive.get and keepalive.flush RPC commands
add custom pinging interval per destination
add early start of OPTIONS checking
kex
kemix
export functions to get dst-uri variants to KEMI
export function to get next hop
URI to KEMI
convenience function KS.is_proto() to test many transport protocols with KEMI
export get_conid() function to retrieve tcp connection id to KEMI
nathelper
add new function set_alias_to_avp
add new parameter nat_addr_mode, to include/exlude reserved addresses in nat_uac_test()
add optional set_contact_alias([trim]) parameter
nat_traversal
ndb_redis
uac
extended use of mode param for uac_reg_request_to(), to control the matching and authentication mode
optional param for uac_auth() to specify auth mode, to support password in HA1 format
usrloc
add the ability to send keep alive requests
add options to do keepalive for natted or udp contacts only, similar to nathelper module
add internal keepalive support for db only mode
change “-” for “_” in stats name to be prometheus compliant
userblacklist
xmpp
New in Core
detect if IPv6 address is between square brackets in internal DB
API, to support MySQL cfg group names
fixup helpers to get dynamic string parameter in own buffer
function to get the size of the value for strings with vars for PVs
better evaluation of error return for pv_printf_s()
add support for parsing http/2 replies parsing
add two new string handling functions to copy chars and str
internal flag to mark sip request if there is a route for next hop
add support functions to encode/decode base64-url
strutils - add urlencode and urldecode functions
core parser - new internal flag FL_USE_OTCPID
new conditional lump types SUBST_RCV_ALL_EX and SUBST_SND_ALL_EX
functions for light comparison of uri values
Command line arguments
add –loadmodule=name, enable the option to load a module from command line
add –modparam, to allow setting a module parameter via command line
add –log-engine, to allow setting the log engine from command line
add –debug=val command line parameter to control the value for debug global parameter as alternative to -d switch
Interpreter
Parameters
Functions
Memory Managers
Architecture
add internal cryptographic algorithm implementation (MD5, SHA, AES, Fortuna PRNG)
moved lib/srutils functions to core/utils
further migration of many modules to use core SHM_MEM_ERROR and PKG_MEM_ERROR defines
events - support for basic void core callbacks, can be used to allow modules execute their code from core for specific needs
removal of several old core functions which were deactivated since many years
simplified core log macros (dprint), remove old and unused code
add support for structured logging, to provide JSON logging format
add option to print callid as attribute in structure json logging
log macro to print message without function name (dprint) with LOG_FN(…)
duplicated parameter definition cleanups in many modules
add description columns and id column to version table
better support for compilation on NetBSD
add module prefix to internal functions and structures in many modules
add core support for xavi and xavu PVs
add core support to assign names to listen sockets
KEMI suport for ARRAY and DICT types
implementation for executing route blocks on send out events moved to onsend.c
kamailio.cfg
switch from deprecated /var/run to /run
option to use rtpengine for nat traversal
define WITH_NAT
define WITH_RTPENGINE
set disable_sctp to yes
update IMS kamailio.cfg examples (in other folder)
pdbt: switch from deprecated /var/run to /run
pdbt: add pdb server message check
Makefile: add better support for EMACS
Makefile: use pgk-config if xml2-config can not be found for certain modules
kemi: add script to generate mock api for kemi python testing
kemi: add support for invoking function pointers in tool
kamcmd
kamctl
add trap command output to TXT file, to help with debugging over e-mail or ticket
kamctl: switch from deprecated /var/run to /run
adjustment to RPC fifo file to match default naming
try to locate RPC fifo file in /var/run/ or /run/ folders, to cope better with old or non-linux systems
added pstrap command, use ps to get list of PIDs for Kamailio instance, instead of RPC core.psx
kamdbctl
add support for DB creation on MySQL 8
new option DBINITASK to control the steps for db init
removed kamailio-extensions.xml file from DB schema sources
kamcli