====== 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:**
* http://www.kamailio.org/wiki/features/new-in-4.3.x
===== New Modules =====
==== cfgt ====
* reports config execution for unit test evaluation
* http://kamailio.org/docs/modules/devel/modules/cfgt.html
==== crypto ====
* cryptographic functions for use in config file
* http://kamailio.org/docs/modules/devel/modules/crypto.html
==== http_async_client ====
* async http queries using curl library
* http://kamailio.org/docs/modules/devel/modules/http_async_client.html
==== http_client ====
* http queries using curl library
* http://kamailio.org/docs/modules/devel/modules/http_client.html
==== ims_dialog ====
* rename of dialog_ng
* http://kamailio.org/docs/modules/devel/modules/ims_dialog.html
==== log_custom ====
* send log messages to custom backend
* http://kamailio.org/docs/modules/devel/modules/log_custom.html
==== log_systemd ====
* send log messages to systemd journal
* http://kamailio.org/docs/modules/devel/modules/log_systemd.html
==== smsops ====
* sms operations for sip messages
* http://kamailio.org/docs/modules/devel/modules/smsops.html
==== statsc ====
* statistics collector providing reports
* http://kamailio.org/docs/modules/devel/modules/statsc.html
===== 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 [[http://lists.sip-router.org/pipermail/sr-users/2015-July/089191.html|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