Kamailio SIP Server (SER) - New Features in v4.4.x

Current stable version is numbered 4.4.x and it was released in March 30, 2016.

\ Previous version was 4.3.x (released on June 10, 2015), see what was new in that release at: \

New Modules

cfgt

crypto

http_async_client

http_client

ims_dialog

log_custom

log_systemd

smsops

statsc

New in Old Modules

acc

  • new acc_prepare_always parameter to allow preparation of the request no matter if the acc_prepare_flag is set at the moment of the transaction creation. See sr-user discussion

acc_radius

  • added radius time mode parameter: rad_time_mode - format can be set to seconds.microseconds
  • support radcli library

app_lua

  • export registrar.lookup_to_dset to app_lua interface
  • export many sdpops functions to LUA

async

  • module timer processes based on workers parameter

auth_radius

  • append_realm_to_username parameter - allows the unmolested digest username to be passed to RADIUS in the User-Name attribute

carrierroute

  • addind db_load_description parameter
  • toggle on/off loading in memory the description column in the carrierroute/carrierfailureroute database tables. This reduces the shared memory used by the module

cdp

  • added class of auth session to know more info about auth session - for example: ims_qos can now report Rx session for Reg or for media
  • CER/CEA retry if send/receive FD disappeared
  • evaluate the supported_vendor_id-AVP during CER/CEA
  • load balancing timer has millisecond resolution

cfgutils

  • sleep() and usleep() accept vars as parameter

cnxcc

  • locks re-entrant for simplifying the upper layer APIs

corex

  • added file_read() and file_write() functions
  • file_read(fpath, var) - read content of a text file into a variable
  • file_write(fpat, content) - write content of parameter to a text file
  • added corex.pkg_summary command
  • dump pkg usage summary to syslog for a specific pid or process index
    kamcmd corex.pkg_summary pid 12345
    kamcmd corex.pkg_summary idx 1

ctl

  • increased default buffers size for rpc responses
  • binrpc_max_body_size = 32
  • binrpc_struct_max_body_size = 8
  • support for u specifier (unsigned int)

db_text

  • support 'order by' in raw query
  • flexibility for column type comparison - compare DB1_STR, DB1_STRING, DB1_BLOB as equal
  • add support for replace - implements replace with update/insert
  • implemented raw query for UPDATE/DELETE/REPLACE

debugger

  • add support for static and dynamic, module specific, logging facility
  • new dbg_sip_msg() config function, which prints how the sip message would look like if it were to be sent out at that point in config
  • added mi commands for module level/facility setters
  • added rpc commands for module level/facility setters

dialog

  • re-entrant mutex for dialogs hash table slots
  • run event_route[dialog:end] in case of dialog termination by interface commands
  • make dialog context available in event route tm:local-request
  • new parameter db_skip_load to skip loading dialogs on startup
  • safety bump of cseq for bye if prack was involved in call setup

dialog_ng

  • renamed to ims_dialog

dispatcher

  • relative weight distribution added - it is possible to assign "rweight" (relative weight) param to each host in destination group. rweight is in the integer range from 1 to 100
  • added new probing_mode=3 to always probe flagged gateways
  • ds_timer_mode - new param to specify the timer proc
  • if set to 0 (default), main timer is used
  • if set to 1, secondary timer is used
  • rpc command dispatcher.ping_active
  • manage global pinging state (send or not the keepalive to destinations)
  • kamcmd dispatcher.ping_active 0 - don't send keepalive requests
  • kamcmd dispatcher.ping_active 1 - send keepalive requests
  • default value is 1

dmq_usrloc

  • implement deleted contact replication
  • new param sync - control sync'ing all contacts at startup
  • default 1 - require sync'ing of all contacts at startup, set to 0 to disable
  • support for throttling sync of all usrloc records
  • batch_size and batch_usleep parameters can control how many records can be sent out at once, after that sleep for batch_usleep microseconds before sending the next batch

domain

  • allow 'type' field in domain_attrs to be a DB1_BIGINT, makes it work with MySQL views on 64bit systems

drouting

  • support for symbols "#*+" in drouting trees

enum

  • single digit is now valid in function enum_query
  • is_e164() returns true for a single digit (previously two digits)

evapi

  • implemented receive buffering per connected client

htable

  • improved error message when loading from database
  • htable.dump - added the type of the value to the result
  • allow specifying column names per hash table
  • at least two columns must be specified, first is the one corresponding to key_name
  • the values of following columns are concatenated with a comma delimiter
  • columns can be specified with cols attribute in htable definition and they must be enclosed in quotes in order to be a valid sip parameter value and be separated by comma
  • don't sync back to db when cols per htable is set
    modparam("htable", "htable",
        "a=>size=4;dbtable=a;cols='key_name,val1,val2,val3'")

ims_auth

  • added option to set destination host for MAR requests
  • allow different qop setting for INVITE

ims_charging

  • added Multiple-Services Indicator
  • allow ro session id to be used from cfg file as avp
  • added the possibility to omit the rating-group
  • added ability to send vendor-specific charge information
  • added ability to retrieve the Diameter-Status-Code for the Charging-Session

ims_qos

  • make Release-Reason from QoS configurable
  • option to add Extra-Header, in case QoS fails during a session
  • added Rx-Specific-Action AVPs to work with some PCRFs
  • new mod param terminate_dialog_on_rx_failure - terminate_dialog_on_rx_failure this parameter determines if a dialog is torn down if a media Rx session is terminated

ims_registrar_pcscf

  • added functionality to unREGISTER a contact, eg. based on a failed network ping
  • set received host, proto and port when searching for pcontact

ims_registrar_scscf

  • new function to pass extra argument to lookup (ue_type) - useful if looking for a specific type of UE ie VoLTE vs SIP for example

ims_usrloc_scscf

  • added counters for reporting hashtable usage - collision slot count for contacts and subscriptions
  • implemented overwrite oldest contact behaviour
  • added support for UE types required by registrar

janssonrpc-c

  • allow null json error property in rpc response

jsonrpc-c

  • add max_conn_attempt parameter to control max number of reconnections

kazoo

  • support alternative federated exchanges
  • allow multiple simultaneous servers
  • add async query feature - suspend the transaction on send and continue on return or timeout

kex

  • support VERSION_NODATE and VERSION_DATE for reproducible builds
  • per module memory statistics when in debugging mode
  • return details about memory used by each module via rpc commands

lcr

  • added priority_ordering module parameter - allows ordering of matched gateways only by priority and weight

misc_radius

  • support radcli library

mtree

  • allow for larger (max 64) prefix values to be used (e.g., case of uuid, ipv6)
  • allow specifying column names per tree
  • at least two columns must be specified, first is the one corresponding to tprefix
  • if more than two, then the values of those columns are concatenated with a comma delimiter
  • columns can be specified with cols attribute in mtree definition and they must be enclosed in quotes in order to be a valid sip parameter value and be separated by comma
    modparam("mtree", "mtree",
      "name=mt;dbtable=mtree;cols='tprefix,tvalue1,tvalue2'")

nathelper

  • support filter contacts by server_id

p_usrloc

  • added path and +instance support

pdb

  • new protocol between pdb_server and kama pdb module

permissions

  • match trusted rules considering priority and regexp over r-uri
  • two new columns to set priority of the rule as well as regular expression matching over r-uri
  • max_subnets - new parameter
  • specify the max size for address subnets array, default value: 512
  • if there are more subnet records in address tables than the value of max_subnets, increase it

presence

  • added presence:notify-reply event
  • implemented $notify_reply for handling in presence:notify-reply event
  • added flags, user_agent columns to active_watchers
  • extended $subs to other subscription properties

presence_xml

  • added optional param force_dummy_presence
  • module parameter to send empty presence notify body when there isn't any record in presentity

pua_dialoginfo

  • support for sending "Trying" state for callee
  • implemented callee_trying parameter in pua_dialoginfo which causes a "Trying" state to be sent for both the caller and callee when a new dialog is created

pua_reginfo

  • added support for custom params as contact parameters (e.g. \\)

pv

  • pv_var_to_xavp script function to copy $var values to $xavp
  • transformation to remove all non-numeric parts of a string
  • add auth digest pseudo variables
  • $adn - auth nonce
  • $adc - auth cnonce
  • $adr - auth response
  • $ado - auth opaque
  • pv_var_to_xavp() - copy script variables values to xavps
  • added $utime and $utimef pv's to retrieve time in UTC
  • $utime is the UTC equivalent to $time for localtime
  • $utimef is the UTC equivalent to $timef for localtime
  • $snd(sproto) returns sending protocol as string

registrar

  • add contact and received values to xavp_rcd
  • set xavp_rcd on registered()
  • export lookup_to_dset with uri to config
  • allow registered() in any route
  • send 400 response if the reg-id value is invalid

rr

  • add enable_double_rr_always option

rtpengine

  • new fifo command, namely nh_ping_rtpp, which pings the given proxy or all proxies, and if a proxy does not respond, disable it temporarily
  • try the next media relay available if the limit reached reply is received
  • unset "don't fragment" ip header flag
  • new read_sdp_pv parameter - this parameter allows to specify a script var or AVP for rtpengine to get the SDP from, instead of the SIP message body
  • hash table to keep the selected nodes
  • added rtpengine_allow_op modparam - when the param is enabled, allow current sessions to finish and deny new sessions for manually deactivated rtpengine nodes via kamctl i.e. "disabled(permanent)" nodes
  • added setid_default modparam - option to change the default set id.
  • if setid_avp is configured, the active set used is the avp value.
  • if setid_avp is not configured, the active set used is setid_default value
  • added kamctl nh_reload_rtpp - mi command to allow reload from database node table

sipcapture

  • insert From URI domain, To URI domain and request URI domain to database
  • added homer5 functionality to sipcapture module
  • accept a list of headers for callid_aleg_header
  • added async support for storing in asynchronous mode if supported by database backend
  • new parameter topoh_unmask - if set to 1, call-id will be unmasked using topoh module api

siptrace

  • new parameter trace_mode
  • if set to 1, is using the SREV_NET_DATA_SEND event for sending HEP packets to sipcapture server for packets sent to the network

sipt

  • added ability to check charging indicator

siputils

  • exported $pcv(name) variable for P-Charging-Vector header and sip_p_charging_vector() function
  • $pcv(all) = whole field
  • $pcv(value) = icid-value field (see RFC3455 section 5.6)
  • $pcv(genaddr) = icid-generated-at field (see RFC3455 section 5.6)

sst

  • add refresher parameter in order to follow RFC 4028

statsd

  • can use IPv6 as server address

tcpops

  • keepalive functions enabled on BSD
  • add tcp_conid_state function to check connection state
  • framework to execute event_route[tcp:closed]
  • per-connection control over execution of event route tcp:closed
  • added "disabled mode" to closed_event param - this mode will bypass the event callback registration to improve performances when the "tcp:closed" route feature is not needed

textops

  • new functions to get part of a multipart body
  • get_body_part() - return only the body part content
  • get_body_part_raw() - get body part with headers and boundary

textopsx

  • if no param is given to keep_hf(re), then keep only mandatory headers

tls

  • option to match TLS client config profile based on server_id
  • server_id can be any string that uniquely identifies a client config profile, overriding the attempt to match on ip:port (+sni). This makes it easier to select the desired config profile, because the port is hard to guess for stream connections
  • prameter xavp_cfg has to be enabled and inner xavp 'server_id' has to be set before relaying the sip message (before opening the client connection)

tm

  • use xavps for t_load_contacts/t_next_contacts/t_next_contact_flow
  • execute the onsend_route for responses forwarded by tm module - not executed for local generated sip responses
  • enable drop in onsend_route for tm replies
  • support to add text in Reason header for local generated CANCEL
  • use core sip routing api callid generator if available
  • added t_is_request_route() config function

tmx

  • added $T(ruid) - return current branch ruid attribute
  • new counter/statistics
  • consistent naming of counters - simplify the names of the tmx counters to "rpl_*"

tsilo

  • added module specific satistics
  • t_store(...) accepts uri as parameter
  • ts_append_to() can take uri as parameter
  • removed usrloc dependency
  • added use_domain parameter

uac

  • uac.reg_dump returns an array rpc result
  • uacreg table has two new columns - flags, reg_delay
  • store the flags for runtime behavior
  • delay intial registration (allow to spread registrations over an interval of time, not to flood the registrar at the same time)

usrloc

  • support filter by server_id at get_all_ucontacts
  • new module option to support preload using server_id as filter
  • new matching mode: CALLID_ONLY
  • new param to skip non-local location record - yf set, kamailio will skip record if socket value doesn't in listening socket list when loading record from database
  • option to clean up database on write back/through modes
  • enabled by db_timer_clean parameter

utils

  • added optional parameter for setting additional http headers
  • option to trim leading and trailing white spaces in http response - new parameter http_response_trim to control it; default is 0 - don't trim (backward compatible); set to 1 for enabling trimming
  • new parameter http_response_mode to control what response part is returned
  • if http_response_mode=0, only the first line is returned
  • if http_response_mode=1, all the response is returned

websocket

  • added support for SIP message fragmentation
  • websocket connections are created with a BUF_SIZE (64K) buffer used for concatenating frames
  • continuation frames (fragments) are supported for the SIP sub-protocol

xlog

  • convenience functions for various log levels
  • xinfo(), xnotice(), xwarn(), xerr(), xbug(), xcrit(), xalert()

New in Core

  • print tos value if socket option for it cannot be set

Interpreter

  • new feature to execute event_route[core:worker-one-init] - the event_route[core:worker-one-init] is executed if defined in kamailio.cfg after the first udp sip worker process executed the child_init() for all modules, before starting to process sip traffic
  • cast operator (int) converts hex strings as well - in addition to dec string
  • name of the structure exported by a module can be prefixed with module name
  • added framework to allow replacing logging to syslog
  • this enables a module to replace all logging to syslog with another logging mechanism
  • it is not enabled when log_stderror=yes or the system is detected as __SUNPRO_C
  • trigger event_route execution for unexpectedly-closed and client-closed tcp connections

Parameters

  • new parameter async_usleep - add option to do usleep() before processing async tasks
  • could help saving cpu usage on vms with immediate interruptions triggered to recvfrom()
  • added parameters log_engine_type and log_engine_data
  • can be used to specify what logging engine to be used and its initialization data
  • see readme of log_custom module for a same of usage

Functions

Memory Managers

  • display the 2 levels matrix in TLSF status
  • shared (shm) memory manager can be selected with -x command line parameter at startup
  • private (pkg) memory manager can be selected with -X command line parameter at startup. If this parameter is omitted, the value of -x is used

Architecture

  • wheel timer implementation
  • shared by modules needing to execute timer tasks, don't want to interfere with main core timers, but don't do lots of operations to create own timer
  • wheel timer is advertised as secondary timer

kamailio.cfg

  • use flag 'r' for rtpproxy if ip in sdp is not private
  • skip learning mode, advertised media ip is routable

Tools

kamcmd

  • support VERSION_NODATE and VERSION_DATE for reproducible builds

kamctl

  • added mongodb schema files
  • custom json format specifying structure of collections/tables
  • version-create.mongo - a script with mongo commands to fill the version collection/table