User Tools

Site Tools


features:new-in-5.2.x

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
features:new-in-5.2.x [2018/11/27 08:27]
miconda
features:new-in-5.2.x [2019/09/04 20:30] (current)
henningw
Line 1: Line 1:
-====== Kamailio SIP Server (SER) - New Features in 5.2.0 ======+====== Kamailio SIP Server - New Features in 5.2.0 ======
  
 <fc #0000FF> <fc #0000FF>
Line 6: Line 6:
   * <fc #0000FF>http://www.kamailio.org/wiki/features/new-in-5.1.x</fc>   * <fc #0000FF>http://www.kamailio.org/wiki/features/new-in-5.1.x</fc>
  
-<fc #800000>//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.//</fc>+<fc #800000>//This is a draft of new features added in this version, manually updated, thus not always synchronized with what is new in source code repository.//</fc>
  
  
Line 13: Line 13:
 ==== acc_json ==== ==== acc_json ====
  
 +Generate accounting records in JSON format.
  
   * https://www.kamailio.org/docs/modules/devel/modules/acc_json.html   * https://www.kamailio.org/docs/modules/devel/modules/acc_json.html
 +
 +==== app_python3 ====
 +
 +KEMI interpreter implementation for Python3.
 +
 +  * https://www.kamailio.org/docs/modules/devel/modules/app_python3.html
  
 ==== app_ruby ==== ==== app_ruby ====
  
 +KEMI interpreter implementation for Ruby.
  
   * https://www.kamailio.org/docs/modules/devel/modules/app_ruby.html   * https://www.kamailio.org/docs/modules/devel/modules/app_ruby.html
Line 23: Line 31:
 ==== db_redis ==== ==== db_redis ====
  
 +Database APIv1 implementation with a REDIS backend.
  
   * https://www.kamailio.org/docs/modules/devel/modules/db_redis.html   * https://www.kamailio.org/docs/modules/devel/modules/db_redis.html
 +
 +==== ims_ipsec_pcscf ====
 +
 +IMS IPSec implementation for P-CSCF systems.
 +
 +  * https://kamailio.org/docs/modules/devel/modules/ims_ipsec_pcscf.html
  
 ==== pua_json ==== ==== pua_json ====
  
 +Presence User Agent implementation with JSON messages.
  
   * https://www.kamailio.org/docs/modules/devel/modules/pua_json.html   * https://www.kamailio.org/docs/modules/devel/modules/pua_json.html
 +
  
 ===== New in Old Modules ===== ===== New in Old Modules =====
  
-===== acc =====+==== acc ====
  
   * use acc.time_mode to save cdrs in gmt time   * use acc.time_mode to save cdrs in gmt time
  
-===== app_lua =====+==== app_lua ====
  
   * LUAJIT variable to build agains LuaJIT compiler   * 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
 +  * new module parameter - log_mode
 +    * control what is printed in log messages by module
 +    * if bit 1 is set, the it prints the KEMI exports
  
 ==== app_python ==== ==== app_python ====
Line 46: Line 68:
     * kamctl rpc app_python.api_list     * kamctl rpc app_python.api_list
   * rpc command to reload the routing script   * rpc command to reload the routing script
 +
 +==== benchmark ====
 +
 +  * new RPC commands timer_list and timer_name_list
  
 ==== cfg_rpc ==== ==== cfg_rpc ====
Line 59: Line 85:
     * options to set send and recv sockets with parameters containing variables     * options to set send and recv sockets with parameters containing variables
   * added set_source_address() function   * 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() 
 +  * new function via_use_xavp_fields(mode) 
 +    * set/unset the flag for building local Via using fields from via_xavp_fields xavp
  
 ==== db_mongodb ==== ==== db_mongodb ====
  
   * create projection field to set the list of returned column   * create projection field to set the list of returned column
 +
 +==== db_mysql ====
 +
 +  * added support for unsigned integers in INT and BIGINT DB1 API
 +  * added parameter unsigend_type
 +    * if set to 1, then the module converts unsigned column value to DB1_UINT or DB1_UBIGINT
 +
 +==== db_postgres ====
 +
 +  * new parameter bytea_output_escape
 +    * control escaping output for bytea fields - default 1 (do the escape)
  
 === dialog === === dialog ===
Line 73: Line 118:
   * added dlg_db_load_extra() function   * added dlg_db_load_extra() function
     * load dialogs from database that are not yet in memory of current kamailio instance     * load dialogs from database that are not yet in memory of current kamailio instance
 +  * handle . for optional body parameter for rpc dlg.bridge_dlg
 +    * consider as parameter not provided and use the default SDP string - "" or "_" behaves as provided body is empty string and the request has no body
 +  * new rpc command dlg.stats_active  - return stats about active dialogs by scanning internal hash table
  
 ==== dispatcher ==== ==== dispatcher ====
Line 79: Line 127:
   * allow 'all' to update all destinations in group via RPC   * allow 'all' to update all destinations in group via RPC
   * added ds_list_exists() as alias to ds_list_exist()   * 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 ping_from attribute
 +
 +==== dmq ====
 +
 +  * improved bus stability and reduce unnecessary state transfer
 +  * added 'pending' state for new, locally added nodes, until confirmed
 +  * continue to probe nodes marked as inactive/disabled
 +  * allow startup even if initial nodelist is empty
 +  * added optional target parameter to dmq_handle_message()
 +
 +==== htable ====
 +
 +  * 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)
 +  * new functions sht_has_name(...) and sht_has_str_value(...)
 +    * sht_has_name(htable, op, mval) - return >0 if there is an item matching its name with mval based on operator op
 +    * sht_has_str_valye(htable, op, mval) - return >0 if there is an item matching its string value with mval based on operator op
 +  * added sht_rm(htname, iname) - api function to remove an item from hash table
 +  * kemi functions to set values in hash table: sht_sets(), sht_seti(), sht_setxs(), sht_setxi() and sht_setex()
 +
 +
 +==== ims_diameter_server ====
 +
 +  * handle binary data in json/Diameter messages
 +
 +==== ims_registrar_pcscf ====
 +
 +  * update security on sec-agree
  
 ==== ipops ==== ==== ipops ====
Line 88: Line 180:
   * new transformation to access json fields   * new transformation to access json fields
   * new function json_get_string() to return string value without quotes   * new function json_get_string() to return string value without quotes
 +
 +==== jsonrpcs ====
 +
 +  * set pretty_format param to 1 by default
 +
 +==== kex ====
 +
 +  * extend kamailio rcv_replies statistics
 +    * ability to count reply groups for each SIP method added.
 +    * statistics for 2xx and 4xx replies on invite added
 +
 +==== mtree ====
 +
 +  * rpc reload without table name reloads all tables
  
 ==== nathelper ==== ==== nathelper ====
  
   * allow variable for flags parameter of fix_nated_sdp(), add_rcv_param(), nat_uac_test()   * allow variable for flags parameter of fix_nated_sdp(), add_rcv_param(), nat_uac_test()
 +  * send SIP ping if ping_nated_only=0 and sipping_flag is set
 +
 +==== ndb_redis ====
 +
 +  * $redisd(...) - pv that exports defined values by redis lib
 +
 +==== nsq ====
 +
 +  * deprecated json and pua funcs for json api and pua_json modules
 +
 +==== p_usrloc ====
 +
 +  * new parameter "mdb_availability_control" - overwrites the "write_on_db" parameter based on the availability of master database.
 +
 +==== permissions ====
 +
 +  * allow_trusted() now can take optional parameter of value to match
  
 ==== phonenum ==== ==== phonenum ====
Line 97: Line 220:
   * new function phonenum_match_cn(...)   * new function phonenum_match_cn(...)
     * match a phone number within a specific country provided by country code two letter     * match a phone number within a specific country provided by country code two letter
 +  * added ccname attribute - get code for country name
 +
 +==== pipelimit ====
 +
 +  * added rpc command pl.list 
 +    * get the details of one or all pipes in json format
 +  * allow offloading timer routine from fast timer to secondary wheel timer
 +  * allow to disable fetching cpu and network load
  
 ==== presence ==== ==== presence ====
Line 103: Line 234:
     * adds ruid column for matching across cluster     * adds ruid column for matching across cluster
     * new parameter enable_dmq     * new parameter enable_dmq
 +  * option to limit the number of subscriptions handled in timer_dbonly
  
 ==== pua_rpc ==== ==== pua_rpc ====
Line 108: Line 240:
   * added pua.send_publish rpc command   * added pua.send_publish rpc command
     * send a PUBLISH request without waiting for response     * send a PUBLISH request without waiting for response
 +
 +==== pv ====
 +
 +  * 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
 +  * new class of variables - $ksr(attr)
 +    * get attributes of kamailio sip router instance
 +    * implemented attributes:
 +        * ver - return version string
 +        * verval - return version value
 +  * using * for header name matches any header for $hdr(name)
 +    * $hdr(*) is body of first header, $(hdr(*)[-1]) is body of last header
 +  * $msg(hdrc) returns the number of headers in sip message
 +  * $msg(fpart) - return first line and the headers
 +  * $msg(hdrs_len) - return the length of all headers
 +  * new transformation {s.unquote}
 +    * return the value without surrounding double/single quotes (" or ')
 +  * increased transformation buffer slots from 4 to 8
 +  * added transformation {s.unbracket}
 +    * return value without surrounding (), [], {} or <>
 +
  
 ==== rr ==== ==== rr ====
Line 113: Line 271:
   * new parameter force_send_socket    * new parameter force_send_socket 
     * if set to 1, the socket is also forced for single rr     * if set to 1, the socket is also forced for single rr
 +  * ignore_sips - new parameter to control use of sips schema
 +    * if set to different than 0, then record-route headers will be added with sip schema even if r-uri comes with sips. Allow interoperability with some UAs messing up routing when sips is used
 +    * default is 0 - use sips schema if in r-uri (existing behaviour)
  
 ==== rtpengine ==== ==== rtpengine ====
Line 121: Line 282:
     * UDP/TLS/RTP/SAVP and UDP/TLS/RTP/SAVPF     * UDP/TLS/RTP/SAVP and UDP/TLS/RTP/SAVPF
   * explicitly handle new option flags (transcoding)   * explicitly handle new option flags (transcoding)
 +  * added options block_dtmf and unblock_dtmf
 +  * added block_media and unblock_media function calls
 +
 +==== sanity ====
 +
 +  * allow variables in params
 +  * new tests for parsing Top Via header
 +  * do not send reply if mandatory headers are missing
 +  * option to skip sending the reply internally
 +    * new mod param 'noreply' - if set to 1, no reply is sent internally; default is 0
 +  * new function - sanity_reply() that can be used in config to send a reply with a code and reason set by the module when detecting a problem inside sip message
 +
 +==== sdpops ====
 +
 +  * fetch and manipulate origin line sess-version through pseudo-variable
 +
 +==== sipcapture ====
 +
 +  * added sip_capture_forward(uri) 
 +    * forward the hep packet to another address
 +    * the address has to be provided as parameter in sip uri format
 +    * the function should be used inside event_route[sipcapture:request]
 +<code c>
 +    event_route[sipcapture:request] {
 +        if(src_ip==1.2.3.4) {
 +            sip_capture_forward("sip:2.3.4.5:5090");
 +            return 0;
 +        }
 +    }
 +</code>
 +
 +==== sipt ====
 +
 +  * added functions to work with forwarding info
 +    * new variables as part of $sipt(...)
 +
 +==== smsops ====
 +
 +  * added support for concatenated SMS in decode_3gpp_sms()
 +
 +==== stun ====
 +
 +  * catch udp ping 0000 when trying to parse stun headers
  
 ==== tcpops ==== ==== tcpops ====
Line 127: Line 331:
     * tcp_get_connid(hostport, pvname)     * tcp_get_connid(hostport, pvname)
     * connection id is set in pvar paraemter     * connection id is set in pvar paraemter
 +
 +==== textops ====
 +
 +  * 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)
 +  * added replace_str(match, repl, mode)
 +    * replace a string with another in the message buffer after the first line. The parameter mode coltrols if first ("f") match or all ("a") should be replaced
 +    * alternative to replace() that avoids regexp overhead when bare string can be matched
 +  * new function replace_body_str(mkey, rval, rmode)
 +    * replace a string inside message body
 +  * new function replace_hdrs_str()
 +    * replace the matched string in the headers zone
 +  * added replace_hdrs(re, sval)
 +    * replace matching regexp with sval inside sip headers part
  
 ==== tls ==== ==== tls ====
Line 139: Line 361:
       * engine_algorithms: list of algorithms to delegate to the engine       * 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     * tested with Gemalto SafeNet Luna (AWS CloudHSM) with RSA and EC private keys  TLSv1.2 and PFS cipher suites
- +  * allow defining a tls profile (domain) for any address 
- +    * token 'any' or 'all' can be used instead of the address [server:any] or [client:any] 
-==== textops ==== +    * useful when the IP address/port to listen on is not known upfront or many addresses are used to listen on 
- +    such profiles can be defined many times and must have server_name attribute  (for SNI
-  new function msg_set_buffer(...to kemi framework +  * added server_name_mode attribute for tls domain profiles 
-  * is_audio_on_hold() returns hold type +    * define how to match server_name (SNI)
-     * 1 - RFC2543 hold type (the connection IP is set to null IP) +      * 0 - match only the domain 
-     * 2 - RFC3264 hold type (inactive or sendonly attr) +      * 1 - match the domain and subdomains 
-   added function append_body_part_hex(...) +      * 2 - match only the subdomains 
-     add a new part to the body, with its content provided in hexa (it is converted to decimal before appending)+  tls.cfg - more examplea for tls domain profiles 
 +  renamed sip-router_cert.sh to tls_cert.sh - it is specific to the module, not the flavour of the application
  
 ==== tm ==== ==== tm ====
Line 154: Line 377:
   * make processing of event routes for local requests reentrant   * make processing of event routes for local requests reentrant
   * rpc tm.t_uac_start option to work with From and To headers only   * 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
  
 ==== tmx ==== ==== tmx ====
  
   * added t_flush_xflags() function   * added t_flush_xflags() function
 +
 +==== topos ====
 +
 +  * 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 param contact_host - set the address in Contact header
 +  * keep original contact in 3xx responses sent out
 +
 +==== uac ====
 +
 +  * 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)
 +  * call event route for uac_req_send() for second response
 +    * done in case the request is resent after a 401/407
 +  * reg_active - new parameter to control if remote registrations are active - default 1 (active)
 +    * can be changed at runtime via rpc command uac.reg_active 0|1
  
 ==== usrloc ==== ==== usrloc ====
Line 164: Line 409:
   * new parameter rm_expired_delay - set how many seconds to delay the removal of an expired record (DB_ONLY mode)   * 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   * execute cleanup by server_id
 +  * new parameter version_table
 +    * set it to 0 to disable checking the version for location table
 +  * call contact expired callback for a domain with db_mode DB_ONLY
 +
  
 ===== New in Core ===== ===== New in Core =====
Line 170: Line 419:
     * unified from Kamailio and SER module exports interfaces     * unified from Kamailio and SER module exports interfaces
   * locking - added api functions for recursive lock sets   * 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 +  * 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 
 +  * print log_prefix after loglevel for more intuitive parsing
  
 ==== Interpreter ==== ==== Interpreter ====
Line 178: Line 438:
   * kemi - added KSR.is_method_in("mflags")   * kemi - added KSR.is_method_in("mflags")
     * check if current method matches one listed in the flags     * check if current method matches one listed in the flags
-    * flags are: I (INVITE), A (ACK), B (BYE), C (CANCEL), R (REGISTER), +    * flags are: I (INVITE), A (ACK), B (BYE), C (CANCEL), R (REGISTER), P (PUBLISH), S (SUBSCRIBE), N (NOTIFY), O (OPTIONS)
-      P (PUBLISH), S (SUBSCRIBE), N (NOTIFY), O (OPTIONS)+
     * KSR.is_method_in("IABC")     * KSR.is_method_in("IABC")
   * kemi - renamed KSR.drop() to KSR.set_drop()   * kemi - renamed KSR.drop() to KSR.set_drop()
Line 205: Line 464:
     * callback function receives a string parameter with the name of the event     * callback function receives a string parameter with the name of the event
     * execute kemi event callback for "core:worker-one-init"     * 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
 +  * new global parameter xavp_via_fields
 +    * set the name of xavp from where to take Via header field: address and port
 +    * use them to build local Via header
  
  
Line 213: Line 477:
 ==== Memory Managers ==== ==== Memory Managers ====
  
-==== Architecture ====+  * mem - added shm_address_in(p) 
 +    * return 1 if pointer p is inside shared memory zone, 0 otherwise
  
 ==== kamailio.cfg ==== ==== kamailio.cfg ====
Line 221: Line 486:
  
 ===== Tools ===== ===== Tools =====
- 
-==== kamcmd ==== 
  
 ==== kamctl ==== ==== kamctl ====
  
   * default PID_FILE set to /var/run/kamailio/kamailio.pid   * default PID_FILE set to /var/run/kamailio/kamailio.pid
 +  * added mtree management command
 +  * more portable jsonrpc filter
   * kamdbctl - remove not working db migrate command   * kamdbctl - remove not working db migrate command
 +  * kamdbctl - schema - removed rpid and email_address columns from subscriber table
          
 ==== kamcli ==== ==== kamcli ====
features/new-in-5.2.x.1543303651.txt.gz · Last modified: 2018/11/27 08:27 by miconda