User Tools

Site Tools


features:new-in-4.1.x

This is an old revision of the document!


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

First release in this series is to be numbered 4.1.0 and it is planned to be released in by end of November 2013.

Previous stable version was 4.0.x (released in March 2013), see what was new in that release at:

This is a draft of new features added for v.4.1.x, manually updated, thus not always synchronized with what is new in source code repository.

New Modules

app_java

auth_ephemeral

cnxcc

dnssec

gzcompress

mohqueue

rtpproxy-ng

sctp

sipt

stun

New in Old Modules

app_lua

  • app_lua.list and app_lua.reload rpc commands
  • added sr.xavp.get_keys function
  • added sr.xavp.get function - get a table with all the values of a xavp

avpops

  • avp_check re operation can now use a pseudo variable as second parameter.
  • avp_check with xavp as second parameter can now be used with [*] index on the second key.

cdp

  • framework for Credit Control Application - initial support for RFC 4006, used for IMS Ro charging interface TS32.299

cfgutils

  • new functions
    • route_if_exists() calls a routing block only if it exists in the configuration script
    • check_route_exists() checks if a routing block exists in the script.

db_mysql

  • new module parameter - insert_delayed - if set to 1, then all INSERT API queries will be converted in INSERT DELAYED (only DB API insert, not for raw queries)
  • sql transaction support

db_postgres

  • handle prepare statements in DB APIv2

debugger

  • new parametes:
    • per module debug level
    • log_assign. Enables the log of every single assign action on config
    • reset_msgid. Enables the ability to reset the msgid ( $mi ) through the RPC command.
  • new functions:
    • dbg_pv_dump() dumps the pv_cache content in json format.
  • new RPC commands:
    • options to enable/disable per module log level as well as set per module log level at runtime.
    • dbg.reset_msg: resets the msgid ( $mi ).

dialog

  • SDP can be passed to MI/RPC dlg_bridge command
  • added timer process to clean unconfirmed dialogs older than 5min

dispatcher

  • new parameter to specify the pv where to store attrs for matched address in ds_is_from_list()
    • attrs_pvname can be set to get attributes of matched address in config file
  • allow pv in ds_is_from_list(setid) parameter

htable

  • new htable.sets and htable.seti RPC commands
  • new htable.reload rpc command
  • cross-server replication via DMQ module integration
  • two new functions to lock htable slots based on item name
    • sht_lock(“htable⇒key”) and sht_unlock(“htable⇒key”)
    • useful to update existing items without additional locks

ipops

  • dns_sys_match_ip(hostname, ipaddr) - do dns query for the hostname and compare the result to see if is a match with ipaddr
  • dsn_int_match_ip(hostname, ipaddr) - function that uses the internal resolver to match a hostname with an ip (similar operation like 'scr_ip==“hostname”')
  • new function dns_query(hostname, pvid) - store the result of dns query in a variable $dns(pvid⇒key)
    • dns query is using getaddrinfo()
    • $dns(pvid⇒key) - new pv allowing to navigate through the result of a dns query
    • key can be:
      • count - number of addresses
      • ipv4 - set to 1 if at least one ipv4 address (otherwise 0)
      • ipv6 - set to 1 if at least one ipv6 address (otherwise 0)
      • addr[index] - the address as string from position index in the list (0 based indexing)
      • type[index] - the type of address from position index in the list (0 based indexing), the value is 4 for ipv4 and 6 for ipv6
      • example:
    	if(dns_query("test.com", "xyz"))
    	{
    		xlog("===== number of addresses: $dns(xyz=>count)\n");
    		xlog("===== ipv4 address found: $dns(xyz=>ipv4)\n");
    		xlog("===== ipv6 address found: $dns(xyz=>ipv6)\n");
    		$var(i) = 0;
    		while($var(i)<$dns(xyz=>count)) {
    			xlog("===== #[$var(i)] type ($dns(xyz=>addr[$var(i)])) addr [$dns(xyz=>addr[$var(i)])]\n");
    			$var(i) = $var(i) + 1;
    		}
    	}

memcached

  • use the newer libmemcached library

misc_radius

  • new parameter - common_response - get the radius response specific attributes in avps

mtree

  • mtree.reload rpc command

nathelper

  • new option - natping_disable_bflag can be set on a per-registration basis to disable NAT pings completely
  • removed natping_proceses limit

outbound

  • flow-token key is now automatically generated

path

  • support for variables in add_path*() parameters

permissions

  • DNS domain names in address table - possibility to check also against DNS domain names with allow_address() function.Now in the address table one group can have exact IPs, subnet IPs and DNS domain names

pike

  • counter for blocked IP addresses

presence

  • RPC command presence.cleanup

pv

  • RPC commands shvGet and shvSet to manipulate and list shared variables
  • new transformations - encode.base64 and decode.base64
  • new $conid PV - returns the TCP connection ID that the current message arrived on (for TCP/TLS/WS/WSS) or $null (for UDP/SCTP)
  • PV to provide access to the user-agent string retrieved from usrloc
  • added $_s(format) variable - evaluate the format as a dynamic string ($var(x) = “sip:” + $rU + “@” + $fd; is equivalent of: $var(x) = $_s(sip:$rU@$fd);)
  • added transformations for url encode/decode

registrar

  • add Supported headers for outbound extensions in replies
  • RFC 5626 section 6 support - behaviour when outbound in use but first edge proxy does not support it
  • added additional unregister() exported function to allow the removal of a specific contact - contact is removed by using the ruid (unique ID for the location record)
  • set_q_override API function - override the value of the q parameter from the Contact header in subsequent calls to the save() function for the current request
  • regid_mode parameter - control if REGISTER contact regid (if present) is used when REGISTER request is saved even if request does not indicate support for outbound

rr

  • use sips to build RR headers if R-URI has sips

rtpproxy

  • database support to rtpproxy
    • if db_url modparam is set rtpproxy sets will be loaded from database
    • if the instance is marked as disabled in database it will be loaded as disabled

sca

  • private hold handling

sdpops

  • new functions:
    • sdp_with_transport(string) - hecks if is a media with the transport string.
    • sdp_remove_transport(string) - emoves the media info from the SDP that matches string transport.
    • sdp_get_line_startswith(avpvar, string)

sipcapture

  • table param for sip_capture() function
  • allow customization for X-CID header
  • added support for multiple capture modes

siputils

  • new functions:
    • is_supported(option) that can be used to check if request has a Supported header listing the given option.
    • is_first_hop() - detect if it is first hop after original sender

snmpstats

  • the SNMPstats module has been extended with a large set of new data, and the KAMAILIO-MIB has been extended with new OIDs
  • the new data reflects the Kamailio server process (memory, configuration at compile time), network transports and modules.

textopsx

  • enable usage of msg_apply_changes() for sip replies

tls

  • config param can now specify a file or directory

tm

  • new event route to be executed for each branch failure
    • branch failure routes must be named with the format:
      • event_route[tm:branch-failure:myroute]
      • and enabled with the function: t_on_branch_failure(“myroute”)
  • asynchronous processing of SIP responses in configuration file
  • use angle brackets around From/To URI for local generated requests
  • new parameter - failure_exec_mode
    • specify whether to consider or not execution of failure routing blocks for branches that had local delivery error (e.g., no open tcp connection and set_forward_no_connect() used in config)
  • new module parameter - dns_reuse_rcv_socket
    • control reuse of the receive socket for additional branches added by dns failover
    • if 1, the rcv socket is used, if not it depends on mhomed - when that is 0, the first socket is used, otherwise will be selected based on routing table
    • default is 0

tmx

  • $T_reply_ruid - pv to return ruid for a branch reply

uac

  • added possibility to authenticate generated requests
    • $uac_req(auser) - specify the authentication username
    • $uac_req(apasswd) - specify the authentication password
    • if both attributes above are set and the request is challenged with 401/407, then the request is resent with auth header
  • ability to set Call-Id through $uac_req(callid)
  • $uac_req(sock) - new attribute to set local send socket for generated requests
    • $uac_req(sock) = “udp:127.0.0.1:5060”;

usrloc

  • new RPC commands:
    • ul.rm
    • ul.rm_contact
    • ul.flush
    • ul.add
  • ul.add RPC and ul_add MI commands modified to be able to set the contact path
  • new option for db_mode - DB_READONLY (4)
    • location records are loaded only at startup
    • no write back to database, not even at shutdown
    • useful when registrations are replicated to another node that does the db storage at runtime
  • new parameter db_obs_ruid - if set to 1, db update/delete operations are done using ruid value
    • if paramter set to 0 (default) the old style using aor, contact and call-id is done
  • added two new rpc commands ul.db_users and ul.db_contacts - for accessing number of different AoRs and contacts in a location table
  • new command ul.db_expired_contacts tells number of expired contacts

websocket

  • added “cors_mode” parameter to enable “Cross-origin resource sharing” on WebSocket handshakes
  • new function ws_close() - enables immediate closure of a WebSocket connection from the configuration file.

New in Core

  • IPv6 compile time flag removed - it is not possible to compile Kamailio without IPv6 anymore, improving the code maintainability in the core and several modules
  • set TOS for IPv6 sctp sockets
  • the syn_branch parameter has been removed from the core, as Kamailio was not fully standard compliant if this was activated.
  • auto-define cfg directive MOD_modname for each loaded module
    • example: if acc module is loaded, MOD_acc is defined in cfg
  • new parameters:
    • modinit_delay - specify microseconds to sleep after initializing a module in order to cope with systems having rate limits on new connections to db or other servers
  • removed syn_branch functionality for calculating Via branch parameter
  • allow c++ style of one line comments (i.e., / / comment …) - can make easier the read of config files with defines and comments

Components

  • SCTP support implementation from core was moved as a module. No need to recompile everything to get SCTP support, just load sctp module
  • STUN implementation from core was moved as a module

Makefile

  • added install-initd-centos target - install centos specific init.d scripts

kamailio.cfg

  • use “co” flags for engaging rtpproxy
  • route SUBSCRIBE for event message-summary to voicemail server
  • reset $du for voicemail re-routing in failure route

Tools

kamctl

  • added parameters to add the contact path: kamctl ul add <user> <uri> <expires> <path>
  • command for dialog module management
  • added show command to display user attributes in subscriber table
  • new commands can be defined in separate files
    • write new kamctl commands either in CFGDIR/kamctl.newcmd.ext or ~/.kamctl/kamctl.newcmd.ext
    • 'newcmd' has to be replaced with the name of the command
    • the file must include cmd_newcmd() function which is executed with the parameters after the command name

kamdbctl

  • new command 'add-tables <gid>' to create only specific table grouped under same <gid> name
features/new-in-4.1.x.1384522020.txt.gz · Last modified: 2013/11/15 14:27 by miconda