====== Kamailio SIP Server (SER) - New Features in 4.2.x Version ====== **First release in this series is numbered 4.2.0, released on October 16, 2014.** **Previous stable version was 4.1.x (released on December 04, 2013), see what was new in that release at:** * http://www.kamailio.org/wiki/features/new-in-4.1.x //This is a draft of new features added in 4.2.x version, manually updated, thus not fully synchronized with what is new in source code repository.// ===== New Modules ===== ==== evapi ==== * push details of events to remote applications via tcp * http://kamailio.org/docs/modules/4.2.x/modules/evapi.html ==== db_mongodb ==== * DB APIv1 connector implementation for MongoDB NoSQL engine * http://kamailio.org/docs/modules/4.2.x/modules/db_mongodb.html ==== jsonrcp-s ==== * implementation of JSONRPC server over HTTP * http://kamailio.org/docs/modules/4.2.x/modules/jsonrpc-s.html ==== kazoo ==== * middle layer communication message queue for Kazoo platform * http://kamailio.org/docs/modules/4.2.x/modules/kazoo.html ==== ndb_cassandra ==== * configuration script connector for Cassandra NoSQL engine * http://kamailio.org/docs/modules/4.2.x/modules/ndb_cassandra.html ==== ndb_mongodb ==== * configuration script connector for MongoDB NoSQL engine * http://kamailio.org/docs/modules/4.2.x/modules/ndb_mongodb.html ==== nosip ==== * allow handling non-sip traffic via event_route * http://kamailio.org/docs/modules/4.2.x/modules/nosip.html ==== rtpengine ==== * control rtpengine application for RTP relaying or WebRTC gatewaying * successor of rtpproxy-ng * http://kamailio.org/docs/modules/4.2.x/modules/rtpengine.html ==== tsilo ==== * attach attributes and add new branches to ongoing transaction * http://kamailio.org/docs/modules/4.2.x/modules/tsilo.html ==== uuid ==== * variables returning unique variables using libuid * http://kamailio.org/docs/modules/4.2.x/modules/uuid.html ===== New in Old Modules ===== ==== acc ==== * acc functions can now be used with strings containing pseudo variables * if db_insert_mode==2, use async db insert to store the record * added reason_from_hf module parameter to fill the reason filed from header * added the cdr_expired_dlg_enable module parameter to toggle on/off the cdr writing feature (default is off=0) * if enabled, only the dlg_vars in the cdr_extra will get printed on dialog expiry; the other parameters' values in the cdr extra will be left empty ==== app_lua ==== * sr.xavp.get now can return all indexes and can be used with indx <0 to return values counting from the end. ==== app_perl ==== * option to reset embedded interpreter after a number of executions * ability to run on Mac OS X - Darwin * new param perl_destroy_func to specify Perl function to be executed before destroying the embedded interpreter * new parameter reset_cycles to specify after how many executions the embedded interpreter is going to be re-initialized * synchronized log level values ==== async ==== * new function async_task_route(rname) - execute actions in a routing block via core async framework ==== auth_db ==== * new flag for auth_check() to skip caller id check for forwarding requests * caller id check is skipped for INVITE, BYE, PRACK, UPDATE, MESSAGE -- these requests can come with an anonymous caller id * load_credentials defaults now to empty list (null value) ==== carrierroute ==== * removed dependency on libconfuse ==== cdp ==== * new RPC commands to disable/enable a peer dynamically * added RPC cmd to list diameter information, including peers and their details * added loadbalancing across diameter peers within the same realm and with the same metric ==== corex ==== * corex.shm_status and corex.shm_summary rpc commands * new function send_data(uri, data) * send arbitrary formated data to uri * uri param has to be a valid sip uri * both parameters can include pseudo-variables * functions for management of msg internal flags * msg_iflag_set("flagname") * msg_iflag_reset("flagname") * msg_iflag_is_set("flagname") * flagname can be: USE_UAC_FROM, USE_UAC_TO or UAC_AUTH * these functions should not be used in configuration file for (re)setting the flags, those are done by various functions internally, however, in very particular cases they might be useful (e.g., changing From/To via textops functions) ==== ctl ==== * fifo server implementation was lacking adding struct values- specifier '{' was not handled for adding values * implemented adding array with '[' specifier ==== db_cluster ==== * new parameter max_query_length - set threshold in second after which a connection is marked inactive if the query fails * allow to let connectioncs being active if the error is due to some sql mistake - default is 0 (set connection inactive immediately, same behavior as so far) ==== db_mysql ==== * implemented async raw query and async insert - both use the core async framework ==== db_text ==== * refactoring to store result in private container, instead of connection structure ==== debugger ==== * show route name in cfgtrace output * new parameter log_level_name - allow overwriting default log level name for cfgtrace messages ==== dialog ==== * added parameter and dialog property to disable timeout reset * option to run dialog main timer tasks via dedicated process * timer_procs - new parameter, if set to 1, a dedicated timer process is used, if set to 0 (default), the core timer is used (existing behavior) * if ACK for 200ok is not coming in 60sec, dialog lifetime is shortened for 10 more seconds * refactored json serialization format for dialog profiles * add a unique id for each profile item - internal sruid is used for generating uids * internal refactoring to allow adding remote profile - this is a profile item without a local dialog - allow operations to add or remove such profiles * added cleanup of expired remote profiles via internal timer * new config function - dlg_remote_profile - dlg_remote_profile(cmd, profile, value, uid, expires * manage non-local profiles from configuration file * cmd can be add (insert a remote profile) and rm (remove a remote profile) * allow '_' in dlg profile names * replicate profiles to other nodes via dmq module * add option to increment cseq upon local authentication to next hop * feature has to be enabled via module parameter track_cseq_updates * it does it only for downstream direction (requests from caller and callee, as it is the typical use case of calling via a provider, after authenticating the caller locally, provider asks for another 'trunk' authentication * diff of cseq value is stored in dialog var named 'cseq_diff', therefore be sure it is not overwritten from config ==== dialog_ng ==== * added DB support for dialog_ng ==== dispatcher ==== * expand attrs while running rpc command dispatcher.list * ds_select_dst/domain can take args as string (not only int) - internal conversion of string->int (if possible) * new variant - ds_is_from_list(groupid, mode, uri) * can match against records in dispatcher groups * if groupid==1 - will match against all groups * if uri is empty, then will match against source address (ip, port, proto). Otherwise it has to be a full SIP URI value. The matching is not taking in consideration any parameter apart of transport * mode is a bitmask to tell the matching rules * if it is 0, will match everything: ip, port and protocol * if bit one is set, will skip matching the port * if bit two is set, will skip matching the protocol ==== dmq ==== * added function to broadcast message from config file * added RPC interface to query the nodes in the cluster * new function: dmq_t_replicate() - replicates current SIP message to all active DMQ nodes. Includes built-in loop detection which can be skipped with optional parameter * new function: dmq_is_from_node() - Checks whether current message has come from another node, based on source IP ==== htable ==== * add event route when htable entries expire * event_route[htable:expired:] called when an entry expires * pseudo-vars $shtrecord(key) and $shtrecord(value) access the expired content * new config function sht_reset("tname") - remove all items in the hash table * iterator implementation for hash tables * new functions: * sht_iterator_start(iname, hname) * sht_iterator_next(iname) * sht_iterator_end(iname) * the current item in the iterator is accessible via: * $shtitkey(iname) * $shtitval(iname) ==== ims_auth ==== * ims_www_challenge() allows specification of auth algorithm from cfg ==== ims_charging ==== * allow E164 to be used as subscription-type in CCR requests * new capability to add dialog data to contact when charging session is created ==== ims_registrar_pcscf ==== * new features to support P-CSCF subscription and publishing reg event * new modparam hashing_type - hash storage based on IP:PORT * new exported function pcscf_assert_called_identity() - used to assert the identity for SIP responses * function retrieves Called-Party-ID AVP from SIP request and adds to SIP response as P-Asserted-Identity as per TS 24.229 section 5.2.6.4.4 * new param ue_unsubscribe_on_dereg: for UEs that do no send UNSUBSCRIBE for reg event when de-registering * option to disable the "received check" upon lookup * new module parameter ignore_contact_rxport_check to ignore check on received port * new module parameter force_icscf_uri - if set we use it as the ICSCF next hop - if not set (default) we use DNS SRV to find ICSCF next hop * new module function lookup_transport() - this allows terminating P-CSCF to check(and possibly) change the transport for the request before relaying/fwding to terminating UE * option to ignore "REGISTERED STATE", when checking for a registered client ==== ims_registrar_scscf ==== * new features to fully support subscription to reg_event ==== ims_qos ==== * use p_asserted_identity as default subscription-id for AAR requests * allow E164 to be used as subscription type for AAR requests * store AAR flow descriptions in CDP session * new parameter: authorize_video_flows - a flag that specifies whether or not to authorize video flows ==== ims_usrloc_pcscf ==== * added DB support for persistent storage * added storage for security data (IPSEC/TLS) ==== ims_usrloc_scscf ==== * new features to fully support subscription to reg_event * add dialog data to contact and tear down dialog when contact is removed * new match mode CONTACT_PORT_IP_ONLY allows to match contact based only on port and IP - ignoring user part * added ability to do AKA resync of auth vectors ==== ipops ==== * new pv to get hostname details: * $HN(n) - hostname * $HN(d) - domain * $HN(f) - fullname * $HN(i) - ip address * based on gethsontname and resolving it ==== kex ==== * rpc commands for statistics ==== lcr ==== * added capability to inactive a faulty gateway and re-activate it automatically by successful response to OPTIONS ping ==== maxfwd ==== * max_limit default value set to 70 - recommended value by RFC ==== memcached ==== * new parameter 'stringify' to the memcached module to force the module to evaluate all returned values as strings. This is useful if other parts of the memcached infrastructure are not able to set the correct value flags ==== mqueue ==== * new psuedo-variable to return mqueue size ==== mtree ==== * added 'multi' param to mtree definition * new 'multi' param makes it possible to store both integer and string typed mtrees into single db table * added mi/rpc command to match against records in memory trees * store reload count and timestamp for trees - print these details via mi/rpc summary command ==== nathelper ==== * added matching carrier grade nat address space (rfc6598) ==== permissions ==== * set peer tag avp for allow_address_group(), also for allow_source_address_group() ==== pipelimit ==== * run timer at 1000ms - proper execution on timer_interval * added pl_check(pipeid, alg, limit) * when alg and limit parameters are given, pl_check() creates the pipe if it doesn't exists * if exists, then no change is done to existing pipe (alg and limit are not changed) * added hash_size parameter * can be used to set the number of slots for the internal hash table, which is computed as 2^hash_size (aka 1<