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.
\
\
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_contacts
- 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:
- 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 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\""'