User Tools

Site Tools


This is an old revision of the document!

Kamailio SIP Server (SER) - New Features in 5.2.0

Previous stable version was 5.1.x, see what was new in that release at:

This is a draft of new features added in devel version, manually updated, thus not always synchronized with what is new in source code repository.

New Modules





New in Old Modules


  • use acc.time_mode to save cdrs in gmt time


  • LUAJIT variable to build agains LuaJIT compiler
  • defaut value for reload parameter set to 1
    • reload feature enabbled by default, set to 0 to disable


  • implemented rpc command to list kemi functions
    • kamctl rpc app_python.api_list
  • rpc command to reload the routing script


  • new RPC commands timer_list and timer_name_list


  • rpc command cfg.get can accept only the group name to list all its vars


  • functions to manage extended flags
    • setxflag(idx), resetxflag(idx), isxflagset(idx)
    • idx can be between 0 and 63
  • added set_send_socket() and set_recv_socket()
    • options to set send and recv sockets with parameters containing variables
  • added set_source_address() function
  • added via_add_srvid() function
  • new function via_add_xavp_params(flags)
    • control the flag for adding xavp fields to via params
  • added sendx(uri, socket, data)
    • send data to destination uri by using local socket
  • send() renamed to send_udp()
    • reflect better that it uses UDP always, similar to send_tcp()


  • create projection field to set the list of returned column


  • added function dlg_db_load_callid(val)
    • load dialog from database based on callid parameter
  • added h_id_start and h_id_step parameters
    • allow to control how internal dialog hash id is generated to avoid overlapping values across many instances of kamailio
  • added dlg_db_load_extra() function
    • load dialogs from database that are not yet in memory of current kamailio instance


  • add methoded to reinit state for all destinations in group
  • allow 'all' to update all destinations in group via RPC
  • added ds_list_exists() as alias to ds_list_exist()
  • congestion detection load balancing
  • new param ds_attrs_none
    • if set to 1, “none=yes” is set in the attrs for those records that have no attrs value, to ensure that corresponding avps for records don't get mixed up
  • use xavps instead of avps
    • removed avp names parameters
    • new parameters:
      • xavp_dst - name of the xavp to store destination records
      • xavp_dst_mode - control the fields added to xavp_dst
      • xavp_ctx - name of the xavp to store context attributes
      • xavp_ctx_mode - control the fields added to xavp_ctx
  • added ds_set_dst() and dst_set_domain()
    • unlike the ds_next_…() variants, these functions just push to destination the current xavp_dst, without consuming it
  • new paraemter ds_db_extra_attrs
    • allow specifying database table columns to be loaded in the attrs field
  • new function ds_select_routing(rules, mode, [limit])
    • select target addresses from a combination of groups and algorithms, control where the first destination is pushed and optionally set a limit


  • added parameter event_callback_mode
    • control when event_route[htable:init] is executed: 0 - after all modules were initialized; 1 - in first worker process; (default 0)


  • handle binary data in json/Diameter messages


  • update security on sec-agree


  • support for as NATed source


  • new transformation to access json fields
  • new function json_get_string() to return string value without quotes


  • set pretty_format param to 1 by default


  • allow variable for flags parameter of fix_nated_sdp(), add_rcv_param(), nat_uac_test()


  • new parameter “mdb_availability_control” - overwrites the “write_on_db” parameter based on the availability of master database.


  • new function phonenum_match_cn(…)
    • match a phone number within a specific country provided by country code two letter
  • added ccname attribute - get code for country name


  • dmq integration - replication of presentity updates over DMQ
    • adds ruid column for matching across cluster
    • new parameter enable_dmq


  • added pua.send_publish rpc command
    • send a PUBLISH request without waiting for response


  • new config variable $sas - return source address in socket format (proto:address:port)
  • added new transformation {uri.tosocket}
    • converts a sip uri to socket address format
    • from sip:address:port;transport=proto to proto:address:port
  • new function - xavp_params_implode(xname, pv)
    • serialize the subbfields of $xavp(xname) in params format (name=value;) and set the output to variable pv
  • new variable $mbu - the message buffer after applying changes, but the original buffer stays unchanged
  • pv: new class of variables - $ksr(attr)
    • get attributes of kamailio sip router instance
    • implemented attributes:
      • ver - return version string
      • verval - return version value


  • new parameter force_send_socket
    • if set to 1, the socket is also forced for single rr


  • added aggressive_redetection param
  • setting tos value for the control commands - new parameter “control_cmd_tos”
  • added support for DTLS transports - added ability to explicitly request DTLS transports:
  • explicitly handle new option flags (transcoding)


  • added sip_capture_forward(uri)
    • forward the hep packet to another address
    • the address has to bbe provided as parameter in sip uri format
    • the function should be used inside event_route[sipcapture:request]
    event_route[sipcapture:request] {
        if(src_ip== {
            return 0;


  • added functions to work with forwarding info
    • new variables as part of $sipt(…)


  • catch udp ping 0000 when trying to parse stun headers


  • added function to get connection id based on target host:port
    • tcp_get_connid(hostport, pvname)
    • connection id is set in pvar paraemter


  • execute event_route[topos:sending] with current sip message to be sent
    • if drop is used, then the message processing with topos is skipped
    • event route is executed after event_route[topos:outgoing]
    • new parameter event_mode to control what event_route blocks are executed


  • added support for OpenSSL engine and private keys in HSM
    • add support for OpenSSL engine and loading private keys from HSM
    • for when kamailio is a TLS edge proxy and needs to use HSM
    • currently we initialize the engine in worker processes as PKCS#11 libraries are not guaranteed to be fork() safe
    • new config params
      • engine: name the OpenSSL engine
      • engine_config: an OpenSSL config format file used to bootstrap engines
      • engine_algorithms: list of algorithms to delegate to the engine
    • tested with Gemalto SafeNet Luna (AWS CloudHSM) with RSA and EC private keys TLSv1.2 and PFS cipher suites


  • new function msg_set_buffer(…) to kemi framework
  • is_audio_on_hold() returns hold type
    • 1 - RFC2543 hold type (the connection IP is set to null IP)
    • 2 - RFC3264 hold type (inactive or sendonly attr)
  • added function append_body_part_hex(…)
    • add a new part to the body, with its content provided in hexa (it is converted to decimal before appending)


  • make processing of event routes for local requests reentrant
  • rpc tm.t_uac_start option to work with From and To headers only
  • added t_send_reply(code, reason)
    • create the transaction if it doesn't exist and send a stateful reply
  • addes relay_100 config parameter to support stateless operations


  • added t_flush_xflags() function


  • remote registrations - added uac_reg_enable() and uac_reg_disable()
    • alternatives to the RPC commands to enable/disable remote registrations from kamailio.cfg (e.g., when receiving a registration from upstream)
  • exported cfg function uac_reg_refresh(luuid)


  • partition column name can be set via modparam
  • new parameter rm_expired_delay - set how many seconds to delay the removal of an expired record (DB_ONLY mode)
  • execute cleanup by server_id
  • new parameter version_table
    • set it to 0 to disable checking the version for location table

New in Core

  • new module exports interface
    • unified from Kamailio and SER module exports interfaces
  • locking - added api functions for recursive lock sets
  • added xflags field to sip_msg_t - holds extended flags - 64 new flags in addition to the old 32 flags
  • new internal msg flag to add srvid param to local via
  • added internal flag for adding xavp fields to via params
  • parser - assign ids for more methods
    • KDMQ and HTTP method types GET, POST, PUT and DELETE
  • pv - default number of buffer slots set to 40
  • new rpc command - core.ppdefines_full
    • print preprocess defines with their details
  • xavp - extended to hold a bare void pointer value
    • useful to link data that doesn't need cloning or freeing
  • added config defines for application version
    • three tokens are defined for version X.Y.Z: KAMAILIO_X, KAMAILIO_X_Y, KAMAILIO_X_Y_Z


  • kemi - more core functions exported to kemi framework
  • kemi - added KSR.is_method_in(“mflags”)
    • check if current method matches one listed in the flags
    • flags are: I (INVITE), A (ACK), B (BYE), C (CANCEL), R (REGISTER),


  • KSR.is_method_in(“IABC”)
  • kemi - renamed KSR.drop() to KSR.set_drop()


  • new parameters to control the size of pv cache
    • pv_cache_limit - the limit how many pv declarations in the cache after which an action is taken. Default value is 2048
    • pv_cache_action - specify what action to be done when the size of pv cache is exceeded. If 0, print an warning log message when the limit is exceeded. If 1, warning log messages is printed and the cache systems tries to drop a $sht(…) declaration. Default is 0
  • aliased global param ip_free_bind to ip_nonlocal_bind - match better with linux system control option
  • new parameter kemi.onsend_route_callback
    • allow setting the name of the function to be called by kemi framework as equivalent of onsend_route {}
    • default value: ksr_onsend_route
    • set to empty string or “none” to skip the execution of this kemi callback
  • new parameter kemi.reply_route_callback
    • set the name of kemi callback function to be executed on receiving a sip reply (equivalent of reply_route)
    • default: ksr_reply_route
    • set to empty or “none” to skip execution of this callback
  • new parameter route_locks_size
    • if set, kamailio creates a group of recursive locks used to sync on execution of request_route and reply_route based on hashing ID of Call-ID header. In other words, if a message has triggered the execution of request_route or reply_route, any other message with the same Call-ID waits until the other one finishes the execution.
  • new parameter kemi.event_route_callback
    • set the name of kemi function to be executed for core event route equivalent
    • default value is not set (no callback function name). If set to “none”, it is also not executed.
    • callback function receives a string parameter with the name of the event
    • execute kemi event callback for “core:worker-one-init”
  • new core parameter xavp_via_params
    • set the name of the xavp whose subfields will be added as via params


  • core functions exported to kemi interface

Memory Managers



  • added log_prefix parameter to print call-id, cseq, message type during SIP message processing
  • do not relay to foreign network if auth is not enabled




  • default PID_FILE set to /var/run/kamailio/
  • kamdbctl - remove not working db migrate command


  • support to generate tls.cfg from database table
  • packaged for debian and ubuntu distributions

Testing Framework

features/new-in-5.2.x.1543308102.txt.gz · Last modified: 2018/11/27 09:41 by miconda