Kamailio SIP Server - New Features in v5.5.x
Previous version was 5.4.x (released on July, 2020), 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.
A few parameters and also modules were renamed in this release. For details please refer to the module documentation .
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
sworker
New module to delegate sip message processing to a group of workers
lrkproxy
New rtp relay module, use kernel based forwarding controlled via an external application
jwt
New module providing json web token generation and validation functions
stirshaken
New module adding support to implement STIR-Shaken authentication and verification functions
lwsc
New module adding websocket client connector for interaction with external system, not for usual SIP forwarding
secsipid_proc
Pseudo-module providing per-proces STIR/SHAKEN API from libsecsipid.
New in existing Modules
acc
add to-tag for locally generated replies
use sent reason phrase for locally generated replies
new parameter acc_extra_nullable to set NULL for variables that are $null
adapt database scheme to support for acc_extra_nullable and cdr_extra_nullable
acc_json
app_lua
app_python3
app_jsdt
auth_radius
async
carrierroute
cfgutils
cfgt
crypto
corex
ctl
cplc
permanent contacts are not skipped by lookup anymore
add new redirect and add ignore3xx parameter
rpc command and documentation improvements
db_postgres
dmq
new parameter notification_channel to set the channel id for peer notifications
use more standard terms in documentation
add support for additional transport protocols for DMQ, like TCP or TLS
add support to specify a notification address multiple times, to be able to specify multiple servers in the configuration
new function dmq_process_message(), similar to dmq_handle_message(), but processes the dmq message immediately
add dmq.remove rpc command
dmq_usrloc
dialog
dispatcher
update state if sending keepalive OPTIONS fails
sync on updating last used fields
internal refactoring
add an attribute to preset the latency estimator
congestion control logic refactoring, to handle misconfiguration gracefully
add test no-dns flag to skip ip matching for hostnames
dispatcher add new algorithm 13, latency optimized round-robin with failover
drouting
evapi
htable
http_client
add http_client_get() function to do explicit GET request with headers (and body)
improve http_client_request to include default clientcert, clientkey etc..
http_client_request (api) content-type header support, including a content-type argument implemented as new function
http_async_client
set curl memory callbacks in module initialization
add http_time pseudovariable
disable HTTP/2 multiplexing
fix build with older versionss of libcurl
add curl_follow_redirect parameter
imc
ims_charging
ims_usrloc_scscf
add a new contact state, udomain/impu and cleanup timer improvements
add a new parameter for reverse search in get_pcontact
ims_registrar_scscf
added a new registrar event, notification improvements
update_contacts, if the reply doesn't include contact alias, get received info from the request
fix extraction of received host in save()
ims_ipsec_pcscf
add a new function parameter to delete unused tunnels before creation of new ipsec connection
add new global parameters for ipsec listen addresses.
extension related to reverse search functionality
ims_qos
jansson
janssonrpcc
jsonrpcs
kemix
export function get_rcvadvip() and get_rcvadvport()
export functions to get socket string and name
add functions to get contact header uri
export functions to get define values
export get_srcuri() to kemi
kex
use mutex to sync the mod mem stats rpc commands
add pkg.info rpc command, to get details about pkg manager
internal refactoring and optimization
keepalive
logging improvements
improvements in internal data structure passing to other modules
prevent race condition when deleting a destination
improve module initialization logic
log_custom
lost
add Geolocation header value list support
new features and attributes for LoST redirect, dynamic HELD url resolving and LoST NAPTR
nathelper
ndb_redis
mohqueue
misc_radius
msrp
mqueue
path
permissions
export allow_trusted() to kemi
enforce limit in reload interval time, add reload_delta parameter to configure rate limit
pike
add rpc function pike.top, support for case insensitive match of parameter
add pike_check_ip(ipaddr), check the parameter ipaddr in the pike tree
pipelimit
pua
pua_dialoginfo
add publish_dialog_req_within parameter
add callee_entity_when_publish_disabled parameter
new parameter attribute_display to configure display name setting
skip requests that do not control call state
pv
new transformation {uri.suri} to get the simple routing uri, keep only transport parameter, if exists
new transformation {uri.duri} to get the uri needed for destination address (e.g., sip:host:port;transport=tcp)
new transformation {uri.saor} to get the sip aor (sip:[user@]domain)
add xavp_slist_explode(), breaks a string in tokens by separators, storing them in xavp
new variable $Rn - return receiving socket name
new variable $defn(name), return the value of a define converted to number
add $fsp, return send socket port, or 0 if $fs not set
new transformations {s.after,char} and {s.before,char}
new transformation class urialias, encode/decode uri alias values (addr~port~proto)
p_usrloc
registrar
documentation improvements
add functionality to store advertised address instead of bind address in socket field, default is existing behavior
allow taking expires value from xavp_cfg expires field
rtpengine
support new codec flags, adds explicit support for codec-set and codec-except.
add CRC32 hash algorithm for message hashing
query round-trip-time per call leg
improve IPv6 handling for database mode and in other situations
improve node fallback if node ran out of ports
improve node connection for any skipped nodes due to dns or connection issues on kamailio startup
rr
new function loose_route_mode(vmode), to specify certain loose routing behavior
use safer msg_ctx_id_t checks for asserting validity of cached param value
update to mediastreamer 4.4.0
state transition improvement, fix disconnection while in bridge,
sanity
extended check 4 (required headers) for uniqueness, Call-ID, CSeq, From and To have to present only once
secsipid
add parameter to set url file cache options
add secsipid_check_identity_pubkey(pubkeyVal) function to check the identity header validity with a public key
new function secsipid_get_url(url, ovar), convenience function to get the content of an
URL and store the result
improve build process by using pkg-config
redesign to use per-process
API functions
make it possible to verify certificates
sl
smsops
use proper length for concatenated SMS according to TS 23.040, section 9.2.3.16
fix parsing of validity period
improvements in decode_3gpp_sms() and pv_sms_body()
sipdump
if drop executed in event route, skip writing to file
refactoring to support more storage engines, like writing UDP pcap files or adding P-KSR-SIPDump header
siptrace
sqlops
textops
correct behaviour for append_hf, adds header after last header occurrence
added functions to manipulate the message body in the exported api
add ends_with() function
add search_str(), similar to search(), but performs the regex match over the parameter
added str_find and str_ifind() functions to find a string inside another one
topoh
remove the Via cookie when skipping topoh via event route
event route is now executed with parsed sip message to be sent out
execute msg-outgoing and msg-sending event routes, similar to topos module
topos
update to-tag and record-route on reply even to-tag is already set
store branch record before dialog record
added rr_update modparam, to control if record-route should be updated for requests within dialog
handle 100 response completely, as they might be needed from other modules
add functionality to set a variable host part for the Contact header
use a common xavu variable instead of different AVPs to control Contact header creation
uniform processing for requests during early dialog, requests that are handled during 1xx state, like PRACK, UPDATE, BYE
topos_redis
tls
support compilation without deprecated OpenSSL APIs
export function KSR.tls.cget(aname) to kemi
add ca_path config option to configure tls certificate paths
add tls_set_connect_server_id(srvid) function, set the server id of the tls profile to be used by next client connect
don't use OpenSSL < 1.0.2 fallback on version 1.1+
tm
logging improvements
do not add duplicate headers in local requests
Instead of passing the to be evaluated reply as the “best” reply, pass the actual “best” reply
fix ordering of contact loading after proportional loading extensions
export t_relay_to_xxx protocol functions to kemi
export t_relay_to_<proto>(host, port) functions to kemi
correct 200 OK processing by proxy after a final non-2xx reply
implemented t_uac_wait_block rpc command
new parameter reply_relay_mode, default is 1, new behavior
tmx
textops
topos
uac
added uac_event_callback for kemi
restore first display name then uri with dialog callback
support to set contact address in uacreg database record, enable per registration contact address
allow empty contact addr in rpc add command for uacreg, it has to be set to .
logging and documentation improvements
new rpc command uac.reg_unregister to unregister records
uac_redirect
userblacklist
usrloc
export ka_logmsg parameter to kemi
print Route header name in keepalive when Path is present
export modparam to set keepalive timeout
use unsigned int for rpc output for the fields having this type
do keepalive-based contact expire on internal callback
set last keepalive value to current time on new records
also send keepalive over ws and wss connections
new parameter load_rank, allow to set the rank of the child to load the location records, default is current behavior
xhttp
xhttp_server
xhttp_prom
xmlrpc
New in Core
add websocket event support
several build infrastructure improvements for MacOS with clang compiler
support for gcc 10.x compiler in build infrastructure
build improvements for FreeBSD
remove internal abort() calls in certain lump handling related functions
improve http/2 support, support also requests, internal refactoring
logging improvements for core utility functions, DB1
API and other
SIP parser
Command line arguments
new command line parameter –cfg-print to output the config file by evaluating includes ifdefs, subst and define pre-processor directive
add –atexit=val cli parameter, to skip atexit callbacks execution from external libraries, default is existing behavior
Config interpreter
export core route function to kemi
new preprocessor directive #!defenv ID=ENVVAR, define an ID to the value of an environment variable with the name ENVVAR, also possible to use #!defenv ENVVAR
new event_route[core:pre-routing], executed before running config script for SIP messages, if received from the network
add $envn(name) - return environment variable as int number
add selval(evalexpr, valexp1, valexpr2) to return second or third parameter depending on first parameter evaluation
new core directive modparamx() alternative, where all its parameters are evaluated for config script variables
Config parameters
add sip_parser_log core parameter to log parser error with a certain log level
add hdr_name_extra_chars parameter to allow specific characters in header names
new parameter ipv6_hex_style, default is the now lowercase and compact, to follow recommendations of RFC5952, section 4.2.1 and 4.3
new parameter sip_parser_mode, allow to control how sip parser behaves and how strict it is, default is existing mode
add local_rport parameter, similar to add_local_rport() but set globally
new parameter async_workers_group to define groups of async worker processes
new parameters to enable waiting for child one worker initialization
Internal functions
add utility helper functions to search variants of str in another str
add parser wrapper function to parse str header name
add kemi function hdr.match_content(hname, op, mval, hidx)
add helper function to parse all contact headers
add functionality to delegate sip processing to a group of workers
add tcp helper function to send data over ws/wss connection
add utility helper function to search a token before an end pointer
add xavu_serialize_fields function
add functions to shm-duplicate str in a block
add module version control function
Memory Managers
define mem_counter struct in meminfo for all memory managers
synchronize tlsf malloc with upstream version 3.1
debugging output improvements
Architecture
further migration of many modules to use core SHM_MEM_ERROR and PKG_MEM_ERROR defines
add CAP_CHOWN capability to Kamailio systemd service files to allow chown needed for some modules
add a global flag in shared memory to detect server shutdown
relocation and refactoring on core ip addr handling code
Zero terminate str copies made with pkg_str_dup() and shm_str_dup()
Refactor tcp flags to enum, add more typedefs
Improvements in
DNS support for NAPTR records
improve signal handling from system
increase network interface handling buffer from 8kb to 32kb, improve logging
improve automatic binding for IPv6 addresses
new option BUILD_NEW_LOCAL_VIA to recreate the local via
improve to tag suffix generation to use more input values for randomness
kamailio.cfg
set load_backends to 1 for permissions module, the config uses only address table
improve checks related to SIP scanning tools
pdbt: use more relaxed permission when creating files
misc/tools/kemi: lua tools useful for using Kamailio with KEMI Lua scripts
support for fuzzing integration based on oss-fuzz
use github worker for continous integration instead of travis-ci
kamcmd
kamctl
option for rpc command to replace tokens in parameters
use tm.t_uac_wait_block rpc for ping command
added srv debug subcommand to control server debug level
kamdbctl
proper id format for dbtext records
increased contact_addr_len entity to 255, e.g. for IMS use-cases
db scheme updates to usrbloclist and topos modules
kamcli
major enhancements and many new features
embedded interactive shell
tab completions and history suggestions in embedded shell
command line syntax highlighting in embedded shell
command aliases and remapping
new subcommands: pstrap, pkg, shm, pipelimit, sipreq
supported backend databases: mysql, mariadb, postgres, sqlite