This page has been visited 1030 times.
2. What is new in 2.2.0
2.1 OpenSIPS core
- default DB engine for MySQL was moved from MyISAM to InnoDB
- debug MI command was renamed to log_level (same functionality, input and output)
- when dns_try_ipv6 is set, try to resolve first as IPv6 (AAA record) instead of IPv4 (A record)
- auto-correction of timer drifting - correlate and keep the internal timer in sync with the OS timer
- the memory dump for Q_MALLOC gives you the list of used memory chunks (and the list of free memory chunks as previously)
- memory dump via SIGUSR1 is now possible when also using the HP_MALLOC or F_MALLOC memory managers (listing the used memory chunks)
2.2 OpenSIPS script
- debug global parameter was renamed to log_level global parameter (same behavior and values)
- new $log_level script variable to replace the setdebug() script function (same functionality and input)
- new debug_mode parameter to replace the outdated fork parameter
- script flags and functions have been removed
- global parameters user/uid and group/gid were removed (use the command line options for these settings)
- new string transformations:
- ViM syntax highlighting for OpenSIPS config script
- add support for folded strings in the config file (multi line strings). Now you can have a multi-chunk (even multi line folded) string as parameter to a script function
- for-each statement: add support for $json iterators
- new $cfg_file, $cfg_line script variables to return the name of the config file and the line inside the file.
- new memgroup global parameter for configurable statistics about shared memory usage ; groups of modules can be defined in the .cfg file that would lead to statistics being generated with the number of fragments, used memory and real-used memory by those modules. The global fragments statistics now show the number of fragments allocated and in use.
- new xlog_default_level parameter to configure the default logging level for all xlog() prints.
2.3 OpenSIPS troubleshooting / development
- support for locking debugging - compile with DBG_LOCK (from menuconfig for example) and each lock will stored information regarding the place from where the lock was acquired (file, function, line) - this is useful when debugging deadlocks.
- overall allocator rework
- three allocators: F_MALLOC, QM_MALLOC, HP_MALLOC. Any of them can be run in troubleshooting mode with -DDBG_MALLOC
- reworked QM_MALLOC memory fragment dump output - it is now much more human-friendly
- fixed and made F_MALLOC work in debug mode again, since it remains one the best troubleshooting options in high-traffic environments
- improved menuconfig allocator selection (less error-prone)
- logging improvements on out-of-memory errors, DB errors, TCP errors, parsing errors, memory logging
For detecting incompatibilities at BIN level, a version field was added to the header of the protocol to stop errors from occurring when two OpenSIPS instances with different version of the protocol exchange BIN messages. So please note that BIN in 2.2 is not backward compatible !
2.4 CLUSTERER module (new)
- The new clusterer allows you to group multiple OpenSIPS nodes in a cluster in order to share the same information in your entire platform. This module can be used by the dialog module to replicate dialog profiles to other nodes, or by the usrloc module to share contact information across multiple nodes.
2.5 DB_SQLITE module (new)
New DB module to provides SQLite backend support for OpenSIPS.
2.6 PROTO_BIN module (new)
OpenSIPS 2.2 switched to TCP transport for BIN interface. (the UDP transport for BIN showed significant package loss under high traffic even in a private network, being unable to meet the requirements for a high-traffic data exchange between multiple OpenSIPS).
Even more, the TCP transport in BIN engine takes advantage of the Asynchronous Reactor, avoiding any potential blocking on reading/writing to the BIN connections.
The old UDP transport support from OpenSIPS core was dropped.
See module documentation
2.7 PROTO_HEP module (new)
Provides support for all hep protocols - HEPv1/2 and HEPv3. It concentrate all the HEP protocol related operations (async send and receive via TCP). The siptrace and sipcapture modules do require this module in order to perform the HEP read/write operations.
2.8 PROTO_WSS module (new)
The Secure WebScoket module allows HTTPS enabled browsers to make or receive VoIP calls using the WebSocket protocol through a secure, TLS encrypted channel.
2.9 SQL_CACHER module (new)
This new module allows you to cache an arbitrary number of tables from your preferred SQL database into the OpenSIPS-supported cache database of your choice.
The amount OpenSIPS of script coding it requires is minimal, with only a few module parameters, a scripting variable used to access the data and the optional possibility of triggering SQL->NoSQL transfers externally, through the MI interface.
See the module documentation
2.10 EVENT_FLATSTORE module (new)
The module provides a logging facility for different events, triggered through the OpenSIPS Event Interface, directly from the OpenSIPS script. The module logs the events along with their parameters in regular text files.
2.11 EVENT_VIRTUAL module (new)
The event_virtual module provides a solution for detecting the failure of events delivery and for doing the failover. Even more, beside failure handling, the module addresses the issue of load balancing (or dispatching) for events across multiple backends.
Shortly, the new event_virtual module provides the possibility to create virtual backends for the OpenSIPS Event Interface. A virtual backend can aggregate multiple real backends (transport protocols that are implemented by different OpenSIPS modules) such as: event_xmlrpc, event_rabbitmq etc. The main advantage brought by this module is that when an event is triggered, the virtual module pushes the event to the read backends with different policies (parallel, failover, round-robin) which can be specified in the virtual subscription socket.
See module documentation
2.12 ACC module
- added millisecond precision for the duration of generated CDRs - a new field ms_duration is populated by the module when CDR-based accounting is done
- do_accounting - function through which one can enable all accounting types at once(database, aaa, syslog, event interface, diameter) in multiple ways: if no parameters used normal accounting shall be made else one can enable cdr, missed calls and failed transaction accounting; the function also allows setting the accounting table for database accounting type;
- drop_accounting - disable accounting types and flags set with do_accounting(); if no parameter provided all accounting shall be stopped; if only the type is provided all acounting for that type shall be stopped; if all flags are dropped(cdr, missed, failed) with the second parameter, normal accounting will still be enabled;
- read more in the official announcement and the documentation
2.13 ALIAS_DB module
- allow alias_db_find in STARTUP route
- the functions alias_db_find and alias_db_lookup accept now in the table parameter any combination of variables and strings.
2.14 AVPOPS module
- the avp_db_query function returns string "<null>" into multi-fields query for a fields with NULL DB value - this helps keeping the data consistency in multi-row queries, like index n in AVPs will hold the values in row n.
2.15 B2B_ENTITIES module
- fixed the handling for nested requests by properly implementing "491 Pending" support.
- the parameter table_name moved to default value b2b_sca (from sca)
- the connect_timeout parameter has been added to control the connection time to a Redis server. This prevents OpenSIPS from blocking indefinitely until the Redis server times out.
2.18 CFGUTILS module
- new asynchronous sleep() and usleep() functions. OpenSIPS will not block anymore while performing a sleep operation.
2.19 CPL-C module
- module is renamed to cpl_c without any additional changes.
- new parameter max_db_queries to define how many time a DB query should be retried.
- new parameter max_db_retries to define how many attempts should be perform in setting the DB connection.
- new parameter max_db_queries to define how many time a DB query should be retried.
2.22 DB_TEXT module
- new dbt_reload MI function to force the reload of the cached tables from disk. Depending on parameters it could be a whole cache or a specified database or a single table. If any table cannot be reloaded from disk - the old version preserved and error reported.
2.23 DIALOG module
- added Re-INVITE in-dialog pinging support; controlled via the new "R" and "r" flags available to create_dialog() as well as the new reinvite_ping_interval module parameter. It properly handle late negociation between endpoints, it ensure SDP persistency ( DB and BIN replication ), it ensure compatibility with topology hiding, it has support for whitelist or blacklist logic ( terminate call for 481 and 408 timeout, or terminate call for anything else other than 200 and 491 ).
- integrated with the clusterer module for dialog state replication and dialog profile sharing. The sharing is not done anymore via a NoSQL database, but directly between OpenSIPS instances (via BIN protocol encapsulated in Clusterer module). New parameters were added to control the clustering : accept_replicated_profile_timeout(the time between two successive incoming packets) and auth_check (ip authentication check for incoming packets)
- allow unset_dlg_profile(profile,[value]) to be used from REQUEST route too.
- new profile_end_dlgs MI command to terminate all the dialogs for a profile (a value may be also provided).
2.24 DIALPLAN module
- new dp_show_partiton MI command to list all the details on the defined partitions.
2.25 DISPATCHER module
- new ds_probing_list module parameter allows OpenSIPS to ping/probe only some certain groups of destinations. This optional parameter contains the list of groups (by ID) to be probe; if missing, all groups are probed (it is backward compatible)
- new parameter full to the ds_list MI command. This new optional parameter additionally print the weight, priority and description for the listed destinations.
- the partitions parameter can now be given as a multi-line string
2.26 DB_TEXT module
- new dbt_reload MI command - causes db_text module to reload cached tables from disk.
2.27 DB_VIRTUAL module
- added async raw query support
2.28 DROUTING module
- wildcard support for partitions - when using partitions, the lookup-kind functions (do_routing(), is_from_gw(), goes_to_gw()) accept now a wildcard for the name of the partition - this means the search will be done in all the existing partitions, instead of a single one. This allows you to search prefixes or gateways in all partitions, when you do not have any information to help identifying the right partition to look into.
- new no_concurrent_reload module parameter (boolean, default off) to prevent multiple data reloads in the same time (from multiple processes). If you have a large routing set (millions of rules/prefixes), you should consider disabling concurrent reload as they will exhaust the shared memory (by reloading into memory, in the same time, multiple instances of routing data).
2.29 EMERGENCY module
- added support for subscriber / notify functions.
2.30 EVENT_RABBITMQ module
- new sync_mode module parameter to switch to asynchronous sending of the rabbitmq messages - when an event is raised in synchronous mode (sync_mode is set ON) the triggering process waits for the status of the operation from the actual worker process.
2.31 LDAP module
- async ldap_search() - since ldap library has built-in support for async operations, ldap_search can be called at time t, and function result can be checked at t + x time. Also, in the resume route you can also call ldap_result() to retrieve the results from the ldap server. Full documentation here
2.32 LOAD BALANCER module
- lb_start() / load_balance() has new flag s to pick a random destinations within equal loads, if multiple destinations selected. This could help to offload an excessive load from first destination and distribute load in situations when calls duration is near to zero (like failed calls) and counts in resources are almost always zero and does not reflect an actual calls flow.
- lb_is_destination accepts as port parameter a static value, rather than variables only - lb_is_destination("$si","0") is also a valid call now.
2.33 MATHOPS module
- additional operations are available now addition (+), subtraction/negation (-), multiplication (*), division (/), exponentiation (^) and modulus (%)
- additional C math functions abs (calls to fabs), acos, asin, atan, ceil, cos, cosh, exp, floor, ln (calls to log), log (calls to log10), sin, sinh, sqrt, tan, tanh
- mi_xmlrpc_ng_root module parameter was renamed to http_root
- new format_version module parameter to control if the XMLRPC output should be or not XML wise formating - the MI content is split (nodes and attributes) and encapsulated in XML tags. Instead of the long and monolithic string response, now the module provides a proper exploded XML tree; that means the result no longer requires the client to do any custom parsing (beside simple XML parsing, of course). Default value is 1 (do XML wise formating) and not 0 (no formating, be backward compatible).
- params xml node is not anymore mandatory in the XML request (if no parameters are actually provided to the command). This ensures backward compatibility with the outdated mi_xmlrpc module
2.35 NATHELPER module
- stateful pinging for nathelper - each SIP OPTIONS ping reply can now be matched using the branch from the VIA header. Using the new contact_id feature, this allows us to remove the contacts that don't respond to a certain amount of pings, releasing memory and also improving contact search performances, location table size and also memory consumption. You can read the documentation here. Read paragraph two of the Overview section to understand how to use this feature.
2.36 NET_TCP module
- tcp_accept_aliases is now by default set to on/enabled
2.37 OSP module
- new module parameters for STIR support : request_date_avp, sdp_fingerprint_avp, identity_signature_avp, identity_algorithm_avp, identity_information_avp, identity_type_avp, identity_canon_avp
- new function for STIR support setrequestdate()
2.38 PIKE module
- new pike_rm MI command to unblock a detected IP address.
2.39 PROTO_TCP module
- parameter tcp_async is now by default on !
2.40 PROTO_TLS module
- fix the CRLF ping-pong regression by adding the new module parameters tls_crlf_pingpong and tls_crlf_drop
- new tls_max_msg_chunks parameter - the maximum number of chunks that a SIP message is expected to arrive via TLS.
2.41 PROTO_WS module
- The WebSocket protocol module has been added client support. This allows OpenSIPS to connect to a different WebSocket server and relay SIP messages towards it.
2.42 RATELIMT module
- integrated with the clusterer module for pipes sharing. The sharing is not done anymore via a NoSQL database, but directly between OpenSIPS instances (via BIN protocol encapsulated in Clusterer module). New parameters were added to control the clustering : replicate_pipes_to(the cluster ID where to to share the pipes), accept_pipes_from(the cluster ID of the incoming sharing traffic), accept_pipes_timeout(the time between two successive incoming packets), repl_pipes_auth_check (ip authentication check for incoming packets) and repl_timer_interval (how often the pipe information should be shared within the cluster)
2.43 REGISTRAR module
- lookup() force lookup on all branches flag - a new flag for lookup() function has been added which allows you to force lookup() function to expand not only the RURI to contacts, but also all the AORs that can be found inside branches. The flag is called r from bRanch lookup and you can readFull documentation here
2.44 RADIUS module
- Async authentication and accounting functions for radius_send_auth() and radius_send_acct() functions can now be used asynchronously. In order to do this, one must patch the radius library, because, for the moment, they do not offer async support. You have a full tutorial about how to do this here.
2.45 REST_CLIENT module
- New function: rest_append_hf() - add custom HTTP headers before performing REST actions. Details about the function can be found in the module doc.
2.46 SIPTRACE module
- trace_id - tracing destinations can be defined using this parameter(database, sip duplication, hep duplication) via a generic uri; it also allows nesting multiple types of tracing under the same trace_id;
- capture_on improvement - the flag can now enable/disable trace_ids via mi; if no parameter used it shall affect all the trace_ids; by default it is enabled for all the ids
- sip_trace has a new design - the function can now trace on multiple levels - message tracing, transaction tracing(tm module) and dialog tracing(dialog module); transaction aware tracing can also be made in stateless mode(internally generated replies are traced);
- read the docs and the official announcement for more information;
2.47 SIPCAPTURE module
- integration with proto_hep - sipcapture now uses proto_hep for communication; the receiving interface for hep messages has to be set up using the module;
- hep_route - hep packets manipulation became much simpler; now one can define a special route through which all messages coming through hep defined interfaces should go; if none is used, sip_capture shall automatically be called for all the packets; setting sip, which is also the default behavior, will pass the packets through the main request route;
- hep proxy - OpenSIPS can now act as a full hep proxy; one can set the destination uri and call hep_relay() function; the routing is being made the same way tm module does it, leaving you with the option to use the whole routing logic already available;
- hep packet manipulation - version 3 only - since the new, chunk based, design of the hep protocol, packet manipulation is now available from the script; hep_get(), hep_set() and hep_del() functions give you the possibility to add new chunks, modify old ones, read their value and also remove them; still you have to know the data type of the header when reading it, since that is not possible only with the means provided by the protocol;
- read the docs and the official announcement for more information;
2.48 TM module
- the behavior for the auto 100 Giving a try reply changed. Instead of sending this reply when performing the SIP relay (usually at the end of the processing), now is done when entering in stateful mode (the SIP transaction is created), usually when t_newtran is called directly from script or indirectly via other functions (like load_balancing, b2b, osp, etc). Now, the 100 reply may be sent quite early in the script, reducing the changes of retransmissions. Also an consistent behavior is achieved now - same 100 reply is automatically sent when doing t_relay() and t_newtran()+t_relay() in script.
- allow retransmissions and wait for reply/timeout on canceled branches - do not do anything about branches with no received reply; better continue the retransmission hoping to get something back; if still not, we will generate the 408 Timeout based on FR timer; this helps with better coping with missed/lated provisional replies in the context of canceling the transaction (see more in the commit log).
2.49 TOPOLOGY HIDING module
- the contacts in the final 3xx replies (for initial INVITEs) are not hided any more - this allow SIP redirects (3xx based) to work through the TH module.
2.50 UAC module
- CSEQ is properly increased during the authentication process.
2.51 USRLOC module
- introduce the Contact ID concept - each contact created using usrloc module now has a unique identifier called contact_id which dramatically improves the performance mostly when using databases. The contact_id also stands as UNIQUE PRIMARY KEY for the location table which holds all the contacts. The performance improvement comes from the fact that now, when a contact is searched/deleted/updated, a numerical index shall be used instead of a string. Moreover, finding a contact in memory shall take less time since the identifier holds inside indexes that makes moving through data structures a less time consuming operation.
- combine multiple deletes in a single query when timer is called; since we now have the contact_id to identify a contact, we can easily combine multiple database delete requests into a single query based on this identifier. You also have the max_contact_delete parameter to specify how many delete requests shall be put together inside a single query.
- domain DB column is now by default NULL (to save DB space) versus empty string.
- integrated with the clusterer module for contacts replication. The parameter replicate_contacts_to points now to a cluster ID, instead to a list of destinations.
2.52 URI module
- del_uri_param function - enables you to remove a parameter from SIP URI taking the key name as argument. All parameters from URI are parsed and, if found, the parameter with the given key is removed. If the parameter is not being found or the URI contains no parameters you shall be notified. Docs here