====== Kamailio SIP Server (SER) - New Features in v4.3.x ====== **First release in this series is numbered 4.3.x and it was released in June 10, 2015**. **Previous stable version was 4.2.x (released on October 16, 2014), see what was new in that release at:** * http://www.kamailio.org/wiki/features/new-in-4.2.x //This is a draft of new features added in 4.3 version, manually updated, thus not always synchronized with what is new in source code repository.// ===== New Modules ===== ==== auth_xkeys ==== * API-like shared key peer-to-peer authentication using SHA hashing * http://kamailio.org/docs/modules/4.3.x/modules/auth_xkeys.html ==== dmq_usrloc ==== * distribute user location (usrloc) records between Kamailio servers using distributed message queue (dmq) * http://kamailio.org/docs/modules/4.3.x/modules/dmq_usrloc.html ==== erlang ==== * connector to Erlang node * http://kamailio.org/docs/modules/4.3.x/modules/erlang.html ==== geoip2 ==== * GeoIP API for configuration file using the new library with support for IPv6 * http://kamailio.org/docs/modules/4.3.x/modules/geoip2.html ==== jansson ==== * JSON document management using Jansson library * it has support for JSON-PATH * http://kamailio.org/docs/modules/4.3.x/modules/jansson.html ==== janssonrpc-c ==== * JSON-RPC over netstrings client using Jansson library * http://kamailio.org/docs/modules/4.3.x/modules/janssonrpc-c.html ==== statsd ==== * enables sending data to the statsd framework directly from kamailio.cfg * http://kamailio.org/docs/modules/4.3.x/modules/statsd.html ==== rtjson ==== * SIP routing based on JSON API * http://kamailio.org/docs/modules/4.3.x/modules/rtjson.html ==== tcpops ==== * enables control of the TCP options (such as the keepalive mechanism), on demand, and on a per-socket basis * http://kamailio.org/docs/modules/4.3.x/modules/tcpops.html ===== New in Old Modules ===== ==== acc ==== * new parameter cdr_on_failed to control writing cds for failed dialogs ==== app_lua ==== * exported additional tm functions * sr.tm.t_load_contacts * sr.tm.t_next_contatcs * sr.tm.t_on_branch_failure * exported the APIs from uac and ndb_mongodb modules ==== auth_radius ==== * added modparam radius_avps_mode parameter (int, true if not null) * reading all RADIUS AV-pairs to kamailio avp (not only SIP-AVP, if radius_avps_mode set to true) ==== cdp ==== * added support for incoming and outgoing trunk-group AVPs * new module parameter: workerq_length_threshold_percentage * added custom AVP to transport Call-ID in diameter request * added new counter(stat) for worker queue lenght - this will give an indication that workers are not keeping up with load if it gets too big * added stickiness to loadbalancing of diameter peers ==== cdpavp ==== * added support for incoming and outgoing trunk-group AVPs ==== cfgutils ==== * rpc commands for gflags management ==== cnxcc ==== * added Redis support for distributed cnxcc nodes ==== ctl ==== * default path for ctl socket file is: /var/run/kamailio/kamailio_ctl ==== db_mysql ==== * added parameter to change affected rows value for UPDATE queries * when enabled will return the number of matched/foudn rows as opposed to the number of updated rows * set back tick as quoting char for table and column names ==== db_postgres ==== * new module parameters "timeout" and "tcp_keepalive" ==== db_text ==== * added affected rows capability * support for OP_NEQ * simple raw query support for select operation ==== dialog ==== * option to add custom headers for local requests to callee * don't send keepalive if dialog not in confirmed state ==== dialog_ng ==== * added support for active and early dialog stats ==== dialplan ==== * new RPC command: dialplan.dump * list all entries in the dialplan * support $(avp("key")[+]) notation on dynamic match/subst rules: * ^(00|\+)?$(avp(s:pbx_cli)[+])([0-9]{3})$ will check every value of $(avp(s:pbx_cli) in the match one by one. * See https://github.com/kamailio/kamailio/issues/5 for more details * option to allow variables in match and substitution expressions - new parameter: match_dynamic to enable this feature ==== dispatcher ==== * new function ds_list_exist() to check if a dispatcher set exists * added per gateway and global send socket configuration ==== dmq ==== * resolve multiple IPv4/IPv6 addresses for a single notification address * optionally enabled by new parameter "multi_notify" * includes addresses from DNS SRV records, A and AAAA records ==== geoip ==== * return continent id via contid attribute ==== ims_charging ==== * added realtime DB support for Ro sessions * added support for trunk ID in Ro CCR * added access-network-information data to CCR - allows OCS to know location of UE when charge was made * added extra statistic: replies received for CCRs ==== ims_icscf ==== * new module param use_preferred_scscf_uri - allows ICSCF to have a preferred S-CSCF is HSS returns a list ==== ims_registrar-pcscf ==== * use separate process to manage reginfo subscribes and publishes * new pseude-variable to get username of Contact that was used during registration * added optinal extra parameter for lookup_transport - allows avp,pv,etc to be used as URI in search for lookup_transport ==== ims_registrar_scscf ==== * use dedicated process to send notifies * new parameter user_data_always - if set S-CSCF always requests user data from HSS * new mod_param subscription_expires_range - if set this parameter randomises the subscription expiry * new parameter notification_list_size_threshold * new function term_impu_has_contact - use this function to check if an IMPU has a valid contact * added support to receive RTR on Cx/Dx interface ==== ims_qos ==== * Rx_reg - use received IP for framed_ip_address AVP * Rx_AAR - new parameters that let you set sub-id and sub-id-type * new parameter cdp_event_list_size_threshold * added stats framework and basic stats * added new statistic aar_replies_received ==== ims_usrloc_pcscf ==== * added new parameter to contact match using only URI host and port ==== ims_usrloc_scscf ==== * added database support for subscriptions * callback when contact is deleted/removed ==== ipops ==== * added function to perform dns srv query in config * new config variable $srvquery(key) gives access to result ==== jsonrpc-s ==== * support to receive RPC commands via FIFO file * JSON-RPC commands can be sent now via a FIFO file, as alternative to (or together with) HTTP/S ==== mi_fifo ==== * default path to fifo file is /var/run/kamailio/kamailio_fifo ==== msilo ==== * new parameter skip_notification_flag * set to a flag value to be used to mark when the notification back to sender shouldn't be sent ==== nathelper ==== * add append_sdp_oldmediaip parameter * use always contact to build ruri and received field if available to send the ping ==== ndb_mongodb ==== * added mongodb_find_one() * find first matching document and return it * faster when knowing it is supposed to be only one, or needing only one ==== ndb_redis ==== * Redis authentication is now supported: * modparam("ndb_redis", "server", "name=srvX;addr=127.0.0.2;port=6379;db=4;pass=mypassword") * optionally allow starting without a connection to Redis server ==== pipelimit ==== * take in consideration number of cpus for load ==== presence ==== * configurable matching criteria to remove subscriptions from memory * added min_expires parameter * added min_expires_action parameter - action to take when min_expires > 0, possible values are: * 1 - RC compliant, return "423 Interval Too Brief" * 2 - force min_expires in the subscription * option to set priority for presentity documents * xavp_cfg - new parameter to specify the name of xavp use to store attributes for publish processing * priority can be set inside xavp_cfg with $xavp(xavp_cfg=>priority) * priority is stored in a new column inside database table presentity for each publish that has the xavp set * retrieve_order - new parameter to specify the order to retrieve the records from database. Default value is 0 (retrieve by received_time like so far). If set to 1, retrieve by priority value * if xavp_cfg parameter is set but priority field inside it is not, then inside the database is stored a value based on timestamp so the newest records will have a higher value, preserving the old behaviour even the retrieve_order=1 * added sip_uri_match module parameter * 0 - case sensitive (default) * 1 - case insensitive * added $subs(uri) - retrieve subscription uri, useful when handling subscribe updates ==== pua ==== * added outbound_proxy for publishing info * new parameter db_table_lock_write: enable (=1) or disable (=0) the locks for table during an transaction ==== pua_dialoginfo ==== * load dialogs for dialoginfo event upon restart * store pubruri for caller and callee in dlg vars ==== pv ==== * new variable type: $vn() that can hold a $NULL value. The existing $var() can not have a $NULL value. * similar to $var(name) and able to hold $null * default value is $null $vn(x) = 0; $vn(x) = "abc"; $vn(x) = $null; * $vz(name) aliased to $var(name) * $sut - new variable that returns full uri for source address * added 7Bit encoding/decoding transformations * new function xavp_params_explode(p, x) * convert a string formatted as SIP params in xavp attribute * e.g., xavp_params_explode("a=b;c=d;e=d", "x") results in: $xavp(x=>a) = "b"; $xavp(x=>c) = "d"; $xavp(x=>e) = "f"; * new config var - $sbranch(key) * a static branch structure that can be used for config operations * the key can be like for $branch(key) * the static branch is not used for outbound routing, it is just a local container * functions to manage ruri and branches using $sbranch(key) * sbranch_set_ruri() -- use the $sbranch(key) attributes to update first branch fields (corresponding to r-uri) * sbranch_append() -- use the $sbranch(key) attributes to append a branch (alternative to append_branch() which is not affecting r-uri branch) * sbranch_reset() -- reset the attributes of $sbranch(key) ==== registrar ==== * add optional check for local path during lookup() * when performing a lookup the Path (if present) is evaluated and if the first hop is local we skip it to avoid looping * add optional params to registered function * 3rd parameter as flag is used to optionally restrict contacts when searching values are: * 1 - match_callid * 2 - match_received * 3 - match_contact * 4th parameter as flag to optionally perform action on positive match values are: * 1 - set xavp_rcd with value from matched contact ==== rr ==== * new variable class $rdir(key) * return the direction of the request within dialog * $rdir(id) - returns integer 1 for downstream and 2 for upstream * $rdir(name) - returns the strings 'downstream' or 'upstream' * new config variables $fti and $tti * $fti - from tag as in initial INVITE * $tti - to tag as in the response to the initial INVITE ==== rtpengine ==== * rtpengine_tout is now rtpengine_tout_ms * rtpengine tout param is now expressed in milliseconds and renamed * new ''write_sdp_pv'' parameter, to return the new SDP in a $var() or $avp() instead of message body * new modparam force_send_interface * rtp_inst_pvar: pseudo variable to store the chosen RTP engine address * added queried_nodes_limit parameter - configure the total number of nodes inside a set to be tried before giving up selecting a rtpengine * support for IPv6 force_send_interface ==== sdpops ==== * new function sdp_with_active_media * return true of the SDP has 'media=type ...' line and the media is active. * active media means the port is non-zero and the direction is not "inactive" ==== siputils ==== * new function is_tel_number(val) * returns true if the parameter is a telephone number (optional leading + followed by digits) * new function is_numeric(val) ==== tls ==== * options to set TLS versions lower limit * example: if method is set to TLSv1.1+, then the connection must be TLSv1.1 or newer * reintroduced server side SNI support * added server_name to module parameter * set SNI for outbound connections via xavp * new parameter: xavp_cfg to set the name of the xavp that holds attributes for tls connections * server_name attribute can be used to specify SNI for outbound connections ==== tm ==== * new function t_is_retr_async_reply to check if a reply being processed is part of a transaction currently suspended * handle r-uri alias parameter for local generated requests within a dialog * default value for failure_reply_mode set to 3 - discard previous replies if a new serial forking step is done ==== tmx ==== * $T_branch(uri) - return uri of the branch when processing a reply in tm onreply_route ==== tsilo ==== * new MI and RPC commands * use use_domain inherited from usrloc ==== uac ==== * counters for active, disabled and total number of registrations * new fields in $uac_req() to allow execution of event route on reply * attributes: * evroute - set to 1 to enable execution of event route * evparam - generic string value that will be available in event route * evcode - sip reply code, available in event route * evtype - type of the reply - received or local generated (e.g., timeout) * option to execute event_route[uac:reply] for uac_req_send() replies * $uac(evroute) has to be set to 1 and event_route[uac:reply] defined * inside event_route[uac_reply] the $uac_req(...) variable is restored back as before uac_req_send(), having the values from that time, excepting: * $uac_req(evcode) is set to the reply code * $uac_req(evtype) is set to 1 if the reply was received or to 2 if the reply was self generated (e.g., case of transmission timeout) * if $uac_req(evtype)==1, the message processed inside the event route is the received reply, otherwise is a faked request with no relation to the request sent out by uac_req_send() ==== userblacklist ==== * adding new fifo commands * dump_blacklist, check_blacklist, check_whitelist, check_userblacklist, check_userwhitelist commands ==== usrloc ==== * new parameter: ''close_expired_tcp''. When set to 1, usrloc will close the corresponding TCP connection for expired entries * store server_id, connection id and keepalive values for location records * fetching of records for nat keepalives in db only is done using new partition column ==== xlog ==== * xlog: new log function xlogm(...) - logs with method filtering * same as xlog(level, message), fitering on methods * new parameter methods_filter - a bitmask with internal sip method ids to be skipped from printing logs. Default -1 (skip all) * parameter can be set at runtime via cfg reload framework kamcmd cfg.set_now_int xlog methods_filter 15 ===== New in Core ===== ==== Code ==== * execute onsend_route for replies before sending out * control execution of onsend_route block for replies via parameter onsend_route_reply * default tcp read buffer size set to 16kB * pv print default buffer size set to 8kB * default size for shared memory is 64MB * new parameter - max_branches * the maximum number of uac branches can be set via config * default value is 12 (old static value for MAX_BRNACHES) * the upper limit is 31, it has to be at least 1 * preprocessor subst rules are applied to pv names * add support for per-TCP connection lifetime * libsrdb1: mechanism to be able to quote table and column names === TLSF Memory Manager === * Two Level Segregated Fit memory allocator * http://tlsf.baisoku.org * bounded-time performance memory manager * malloc and free operations always done in O(1) * build with ''MEMMNG=2'' option to activate TLSF ==== Default Config ==== * parameters with the paths to fifo and unixsocket control file are pointing to /var/run/kamailio/ ===== Tools ===== ==== Kamctl ==== * support of fnmatch operator for dialplan * do not reload rules in memory after each change in database to allow batch updates. Reload command has to be done explicitely * parameters of addrule after match expression are optional ===== Build Process ===== Support [[https://wiki.debian.org/ReproducibleBuilds/|reproducible builds]] adding compile options to skip compile date or set a particular value * default is current behaviour, date and time included in version string * compile with no date and time: make CC_EXTRA_OPTS="-DVERSION_NODATE" * compile with a specific date and time: make CC_EXTRA_OPTS='"-DVERSION_DATE=\"19:30:40 Feb 8 2015\""'