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
Next revision Both sides next revision
features:new-in-5.2.x [2018/11/27 09:41]
miconda
features:new-in-5.2.x [2018/11/28 14:21]
miconda
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   * defaut value for reload parameter set to 1
     * reload feature enabbled by default, set to 0 to disable     * 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 52: Line 72:
  
   * new RPC commands timer_list and timer_name_list   * new RPC commands timer_list and timer_name_list
- 
  
 ==== cfg_rpc ==== ==== cfg_rpc ====
Line 73: Line 92:
   * send() renamed to send_udp()   * send() renamed to send_udp()
     * reflect better that it uses UDP always, similar to send_tcp()     * 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 87: 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 109: Line 143:
   * new function ds_select_routing(rules, mode, [limit])   * 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     * 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 ==== ==== htable ====
Line 114: Line 157:
   * added parameter event_callback_mode    * 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)     * 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 ==== ==== ims_diameter_server ====
Line 135: Line 184:
  
   * set pretty_format param to 1 by default   * 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 ==== ==== p_usrloc ====
  
   * new parameter "mdb_availability_control" - overwrites the "write_on_db" parameter based on the availability of master database.   * 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 149: Line 221:
     * 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   * 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 155: 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 170: Line 250:
     *  serialize the subbfields of $xavp(xname) in params format (name=value;) and set the output to variable 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 variable $mbu - the message buffer after applying changes, but the original buffer stays unchanged
-  * pv: new class of variables - $ksr(attr)+  * new class of variables - $ksr(attr)
     * get attributes of kamailio sip router instance     * get attributes of kamailio sip router instance
     * implemented attributes:     * implemented attributes:
         * ver - return version string         * ver - return version string
         * verval - return version value         * 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 <>
  
  
Line 181: 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 189: 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 ==== ==== sipcapture ====
Line 194: Line 302:
   * added sip_capture_forward(uri)    * added sip_capture_forward(uri) 
     * forward the hep packet to another address     * forward the hep packet to another address
-    * the address has to bbe provided as parameter in sip uri format+    * the address has to be provided as parameter in sip uri format
     * the function should be used inside event_route[sipcapture:request]     * the function should be used inside event_route[sipcapture:request]
 <code c> <code c>
Line 209: Line 317:
   * added functions to work with forwarding info   * added functions to work with forwarding info
     * new variables as part of $sipt(...)     * new variables as part of $sipt(...)
 +
 +==== smsops ====
 +
 +  * added support for concatenated SMS in decode_3gpp_sms()
  
 ==== stun ==== ==== stun ====
Line 220: Line 332:
     * connection id is set in pvar paraemter     * connection id is set in pvar paraemter
  
-==== topos ====+==== textops ====
  
-  * execute event_route[topos:sending] with current sip message to be sent  +  * new function msg_set_buffer(...) to kemi framework 
-    * if drop is used, then the message processing with topos is skipped +  * is_audio_on_hold() returns hold type 
-    * event route is executed after event_route[topos:outgoing] +    * 1 - RFC2543 hold type (the connection IP is set to null IP) 
-    * new parameter event_mode to control what event_route blocks are executed+    * 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 238: 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 260: Line 384:
  
   * 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 ==== ==== uac ====
Line 266: Line 399:
     * alternatives to the RPC commands to enable/disable remote registrations from kamailio.cfg (e.g., when receiving a registration from upstream)     * 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)   * 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 274: Line 411:
   * new parameter version_table   * new parameter version_table
     * set it to 0 to disable checking the version for location 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
  
  
Line 293: Line 431:
   * added config defines for application version   * added config defines for application version
     * three tokens are defined for version X.Y.Z: KAMAILIO_X, KAMAILIO_X_Y, KAMAILIO_X_Y_Z     * 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 299: 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 328: Line 466:
   * new core parameter xavp_via_params   * new core parameter xavp_via_params
     * set the name of the xavp whose subfields will be added as 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 336: 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 344: 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.txt · Last modified: 2019/09/04 20:30 by henningw