features:new-in-5.2.x
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
features:new-in-5.2.x [2018/11/27 07:10] – miconda | features:new-in-5.2.x [2019/09/04 18:30] (current) – henningw | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Kamailio SIP Server | + | ====== Kamailio SIP Server - New Features in 5.2.0 ====== |
<fc #0000FF> | <fc #0000FF> | ||
Line 6: | Line 6: | ||
* <fc # | * <fc # | ||
- | <fc # | + | <fc # |
Line 13: | Line 13: | ||
==== acc_json ==== | ==== acc_json ==== | ||
+ | Generate accounting records in JSON format. | ||
* https:// | * https:// | ||
+ | |||
+ | ==== app_python3 ==== | ||
+ | |||
+ | KEMI interpreter implementation for Python3. | ||
+ | |||
+ | * https:// | ||
==== app_ruby ==== | ==== app_ruby ==== | ||
+ | KEMI interpreter implementation for Ruby. | ||
* https:// | * https:// | ||
Line 23: | Line 31: | ||
==== db_redis ==== | ==== db_redis ==== | ||
+ | Database APIv1 implementation with a REDIS backend. | ||
* https:// | * https:// | ||
+ | |||
+ | ==== ims_ipsec_pcscf ==== | ||
+ | |||
+ | IMS IPSec implementation for P-CSCF systems. | ||
+ | |||
+ | * https:// | ||
==== pua_json ==== | ==== pua_json ==== | ||
+ | Presence User Agent implementation with JSON messages. | ||
* https:// | * https:// | ||
+ | |||
===== 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 56: | Line 82: | ||
* setxflag(idx), | * setxflag(idx), | ||
* idx can be between 0 and 63 | * 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() | ||
+ | * 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 === | ||
+ | |||
+ | * 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 | ||
+ | * handle . for optional body parameter for rpc dlg.bridge_dlg | ||
+ | * consider as parameter not provided and use the default SDP string - "" | ||
+ | * new rpc command dlg.stats_active | ||
==== dispatcher ==== | ==== dispatcher ==== | ||
Line 65: | Line 126: | ||
* add methoded to reinit state for all destinations in group | * add methoded to reinit state for all destinations in group | ||
* allow ' | * allow ' | ||
+ | * added ds_list_exists() as alias to ds_list_exist() | ||
+ | * congestion detection load balancing | ||
+ | * new param ds_attrs_none | ||
+ | * if set to 1, " | ||
+ | * 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, | ||
+ | * 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 ' | ||
+ | * continue to probe nodes marked as inactive/ | ||
+ | * 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: | ||
+ | * new functions sht_has_name(...) and sht_has_str_value(...) | ||
+ | * sht_has_name(htable, | ||
+ | * sht_has_str_valye(htable, | ||
+ | * added sht_rm(htname, | ||
+ | * kemi functions to set values in hash table: sht_sets(), sht_seti(), sht_setxs(), | ||
+ | |||
+ | |||
+ | ==== ims_diameter_server ==== | ||
+ | |||
+ | * handle binary data in json/ | ||
+ | |||
+ | ==== ims_registrar_pcscf ==== | ||
+ | |||
+ | * update security on sec-agree | ||
+ | |||
+ | ==== ipops ==== | ||
+ | |||
+ | * support for 192.0.0.0/ | ||
==== json ==== | ==== json ==== | ||
Line 70: | 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(), | * allow variable for flags parameter of fix_nated_sdp(), | ||
+ | * 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 " | ||
+ | |||
+ | ==== permissions ==== | ||
+ | |||
+ | * allow_trusted() now can take optional parameter of value to match | ||
+ | |||
+ | ==== phonenum ==== | ||
+ | |||
+ | * 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 | ||
+ | |||
+ | ==== 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 80: | 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 86: | 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: | ||
+ | * added new transformation {uri.tosocket} | ||
+ | * converts a sip uri to socket address format | ||
+ | * from sip: | ||
+ | * new function - xavp_params_implode(xname, | ||
+ | * serialize the subbfields of $xavp(xname) in params format (name=value; | ||
+ | * 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/ | ||
+ | * increased transformation buffer slots from 4 to 8 | ||
+ | * added transformation {s.unbracket} | ||
+ | * return value without surrounding (), [], {} or <> | ||
+ | |||
==== rr ==== | ==== rr ==== | ||
Line 91: | 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 99: | Line 282: | ||
* UDP/ | * UDP/ | ||
* 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 ' | ||
+ | * 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: | ||
+ | <code c> | ||
+ | event_route[sipcapture: | ||
+ | if(src_ip==1.2.3.4) { | ||
+ | sip_capture_forward(" | ||
+ | return 0; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 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 110: | Line 336: | ||
* new function msg_set_buffer(...) to kemi framework | * new function msg_set_buffer(...) to kemi framework | ||
* is_audio_on_hold() returns hold type | * 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, | ||
+ | * replace a string with another in the message buffer after the first line. The parameter mode coltrols if first (" | ||
+ | * alternative to replace() that avoids regexp overhead when bare string can be matched | ||
+ | * new function replace_body_str(mkey, | ||
+ | * replace a string inside message body | ||
+ | * new function replace_hdrs_str() | ||
+ | * replace the matched string in the headers zone | ||
+ | * added replace_hdrs(re, | ||
+ | * replace matching regexp with sval inside sip headers part | ||
+ | |||
+ | ==== tls ==== | ||
+ | |||
+ | * 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# | ||
+ | * new config params | ||
+ | * engine: name the OpenSSL engine | ||
+ | * engine_config: | ||
+ | * engine_algorithms: | ||
+ | * 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 ' | ||
+ | * useful when the IP address/ | ||
+ | * such profiles can be defined many times and must have server_name attribute | ||
+ | * added server_name_mode attribute for tls domain profiles | ||
+ | * define how to match server_name (SNI): | ||
+ | * 0 - match only the domain | ||
+ | * 1 - match the domain and subdomains | ||
+ | * 2 - match only the subdomains | ||
+ | * 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 117: | 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, | ||
+ | * create the transaction if it doesn' | ||
+ | * 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: | ||
+ | * if drop is used, then the message processing with topos is skipped | ||
+ | * event route is executed after event_route[topos: | ||
+ | * 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/ | ||
+ | * 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 127: | 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 133: | 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' | ||
+ | * added config defines for application version | ||
+ | * three tokens are defined for version X.Y.Z: KAMAILIO_X, KAMAILIO_X_Y, | ||
+ | * print log_prefix after loglevel for more intuitive parsing | ||
==== Interpreter ==== | ==== Interpreter ==== | ||
Line 141: | Line 438: | ||
* kemi - added KSR.is_method_in(" | * kemi - added KSR.is_method_in(" | ||
* 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), |
- | | + | |
* KSR.is_method_in(" | * KSR.is_method_in(" | ||
+ | * kemi - renamed KSR.drop() to KSR.set_drop() | ||
Line 162: | Line 459: | ||
* new parameter route_locks_size | * 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, | * 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, | ||
+ | * 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 " | ||
+ | * callback function receives a string parameter with the name of the event | ||
+ | * execute kemi event callback for " | ||
+ | * 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 170: | 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 178: | Line 486: | ||
===== Tools ===== | ===== Tools ===== | ||
- | |||
- | ==== kamcmd ==== | ||
==== kamctl ==== | ==== kamctl ==== | ||
* default PID_FILE set to / | * default PID_FILE set to / | ||
+ | * 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.1543302621.txt.gz · Last modified: 2018/11/27 07:10 by miconda