Login | Register

About

About -> Available Versions -> 3.0.x Releases -> Release 3.0.0

This page has been visited 10780 times.


Get familiar with the philosophy behind this release by reading the OpenSIPS 3.0 Overview.

1.  Migration from 2.4.x to 3.0.0


2.  What is new in 3.0.0

2.1  OpenSIPS script

  • new core pseudo-variable $hdr_name (details here) that returns the name of a SIP header at a given index.
  • new SDP transformation {sdp.stream,media} which returns a specific stream from an SDP body. Read more here.
  • new SDP transformation {sdp.stream-delete,media} used to delete a stream based on its index or media type. Read more here.
  • global parameter xlog_default_level was renamed as xlog_print_level'
  • added interface tagging (see the updated docs for the listen statement), which may be useful in certain clustering scenarios, where nodes use different IP addresses but the same conceptual interface (e.g. "local")
  • added new global parameter xlog_level - similar to log_level but independently controls the verbosity of the xlog() functions.
  • added new script variable $xlog_level to set/reset per process bases the value of the xlog'ing threshold.
  • added new string transformation {s.reverse} to reverse a string
  • added new IP transformation {ip.matches,ip/masklen} for checking IPs against network masks (in short format).

2.2  OpenSIPS core

  • added xlog_level MI command added to set/reset the global value for the xlog'ing threshold.
  • added restart_persistency_cache_file and restart_persistency_size parameters that control the restart persistence mechanism.

2.3  Routing Script Reload

OpenSIPS 3.0 exposes the valuable ability of reloading the routes (not the module configuration) during runtime, with zero penalties and with zero SIP traffic losses. See the documentation of the MI "reload_routes" function.

2.4  Processes Auto-Scaling Support

This is the ability of OpenSIPS to scale up and down the number of processes at runtime. Basically OpenSIPS is able to automatically scale up (by forking new processes) according to the volume of traffic, or to scale down (terminating some worker processes) if the internal load is low. This means you do not have to worry if your estimation on the number for worker processes is correct or not (will my OpenSIPS hold to the traffic??) or to worry about planning restarts during the night (to manually resize the number of processes).
Read a full description of this feature here.

2.5  Generic Preprocessor Support

This feature adds full built-in pre-processing support for the OpenSIPS script, allowing any external pre-processor to be seamlessly integrated without the need for an additional, encapsulating file type. This simplifies the management of the script, the script's portability across multiple servers and not to mention the entire deployment process of more complex platforms, where OpenSIPS is just a part of them. In addition, you are now able to use your preferred pre-processor and align OpenSIPS templating with the rest of your system (M4, Jinja, Embedded Ruby or others).
Read a full description of this feature here.

2.6  New OpenSIPS CLI (Command Line Interface) tool

Starting with OpenSIPS 3.0, the old opensipsctl tool becomes deprecated (as functionality and as software) and it is replaced by the new opensips-cli - a powerful Python3-based console environment that allows you to interact in a smart way with OpenSIPS, to invoke advanced tools such as diagnose or tracer, as well as to perform DB provisioning. Read a full description of opensips-cli here.

2.7  Selectable Memory Allocator Support

This feature allows the internal memory manager to be selected at startup time. In OpenSIPS 3.0, the memory manager selection becomes a startup option, via command line arguments, allowing you to change it without any need to recompile or redeploy. Read a full description of this feature here.

2.8  Internal Memory Persistence during Restart

As there are several modules caching (in OpenSIPS internal memory, not in external no-sql cachers) large chunks of data, like Dynamic Routing, Dialplan, Dispatcher or Permissions, OpenSIPS 3.0 is able to avoid the data loading and caching penalty during a restart - this segments of the internal memory do "survive" during the restart. This dramatically reduces the time to restart of the entire service.
Read a full description of this feature here.

2.9  MI Interaction Standardization

An extensive rework of the Management Interface in an attempt to standardize and speed up development of external applications which need to interact with OpenSIPS. The custom, JSON-based HTTP calls of OpenSIPS 2.X are now replaced with the JSON-RPC version 2 standard. The custom, line-oriented syntax was completely dropped. XMLRPC and mi_html (former mi_http) were kept backwards-compatible. Read a detailed description of the new interactions here

2.10  Module Functions Now Benefit From a New Parameter Interface

As a response to frequent mailing list complaints of wildly varying behaviors across different module functions (e.g. some accept integers/strings as inputs while others accept both integers/strings or variables holding such values), we've introduced an abstract layer which handles the parameter passing task for all module functions, effectively making all of them more powerful by globally allowing flexible input. An added benefit is that new OpenSIPS modules are now even faster to develop. See the new function calling conventions here.

2.11  SMPP module (NEW)

OpenSIPS 3.0 provides a new SMPP module that allows you to do bidirectional gatewaying between SIP and SMPP traffic - this is a powerful but flexible way to integrate with most of the SMS providers / gateways. Read a full description of this feature here.

2.12  RABBITMQ_CONSUMER (NEW)

A new RabbitMQ consumer module which manages connections with one or more brokers, subscribes for events and propagates them at OpenSIPS script level via the event interface.

2.13  TLS_MGM module

  • The mechanism for matching an incoming/outgoing TLS connection with a virtual TLS domain(both server and client) is now more flexible and relies on two new DB columns/module parameters: match_ip_address and match_ip_address.
  • Added TLS SNI(Server Name Indication) support for matching TLS server domains.
  • Added match_ip_address and match_sip_domain module parameters which accept a list of IP:port address and respectively, a list of FQDNs, that are used in the TLS domain matching process.
  • Added client_sip_domain_avp module parameter that the defines the AVP to use in the TLS client domain matching process.

2.14  AUTH_AAA module

  • functions aaa_does_uri_exist() and aaa_does_uri_user_exist() imported from the old URI module.

2.15  AUTH_DB module

  • functions db_does_uri_exist(), db_is_to_authorized(), db_is_from_authorized() and db_get_auth_id() imported from the URI module

2.16  AVPOPS module

  • avp_insert() was dropped in favour of the equivalent, already existing syntax: $(avp(foo)[append]) = "bar"; (for appending to end-of-list) and $(avp(foo)[3]) = "bar"; (for writing at a specific AVP index)

2.17  CACHEDB_LOCAL module

2.18  CLUSTERER module

  • the module provides now an unified sharing tag support - it is the only one responsible for managing the sharing tags (definitions, cluster ops, etc). The other module that needs to check the sharing tags can do it via the clusterer API. The sharing tag managing from presence and dialog modules was removed.

2.19  DB_MYSQL module

  • New module parameter: use_tls that allows the use of TLS for MySQL connections.
  • In order to enable TLS for a specific MySQL connection the syntax for DB URLs now supports the tls_domain=dom_name parameter.

2.20  DB_POSTGRES module

  • New module parameter: timeout that allows configuration of a timeout threshold for the PostgreSQL connections.
  • async support for running raw postgres queries from script level via avp_db_query()

2.21  DIALOG module

  • The sharing tag management was moved into the clusterer module:
    • removed the module parameter dlg_sharing_tag (provided now by clusterer module)
    • removed the MI commands dlg_set_sharing_tag_active and dlg_list_sharing_tags (provided now by clusterer module)
  • the default value of dlg_match_mode has been switched from DID_ONLY to DID_FALLBACK.
  • full control over CANCEL/200 OK race conditions via the new race_condition_timeout modparam and "E" flag of create_dialog()

2.22  DISPATCHER module

  • Added clustering support for deciding (based on sharing tags) which is the node to perform the pinging and for replicating the changes of the destinations:
    • added the new module parameter cluster_id
    • added the new module parameter cluster_sharing_tag to define which is the sharing tag governing the actions taken by the module (like pinging gateways or replicating the status of the gateways)

2.23  DROUTING module

  • New module parameter probing_socket to globally force a specific socket/listener for sending the SIP probing to the gateways.
  • enhanced the clustering support in the module:
    • module parameter status_replication_cluster replaced with cluster_id with the same meaning
    • added the new module parameter cluster_sharing_tag to define which is the sharing tag governing the actions taken by the module (like pinging gateways or replicating the status of the gateways)
  • added support for restart persistency memory to cache data duriing restart. This can be enabled using the enable_restart_persistency parameter.

2.24  EVENT_FLATSTORE module

  • A new module parameter suppress_event_name was added to configure whether the event's name should be dumped in the file or not.

2.25  EVENT_ROUTING module

  • the notify_on_event and wait_for_event functions accept variables for the timeout parameter.

2.26  LOAD_BALANCER module

  • enhanced the clustering support in the module:
    • module parameter status_replication_cluster replaced with cluster_id with the same meaning
    • added the new module parameter cluster_sharing_tag to define which is the sharing tag governing the actions taken by the module (like pinging destinations or replicating the status of the destinations)

2.27  NAT_TRAVERSAL module

  • Added clustering support for controlling which is the node responsible for pinging inside a cluster (via sharing tags). New module parameters cluster_id and cluster_sharing_tag were added.

2.28  NATHELPER module

  • Added clustering support for controlling which is the node responsible for pinging inside a cluster (via sharing tags). New module parameters cluster_id and cluster_sharing_tag were added.

2.29  PRESENCE module

  • The sharing tag management was moved into the clusterer module:
    • removed the module parameter cluster_sharing_tags (provided now by clusterer module)
    • removed the MI commands pres_set_sharing_tag_active and pres_list_sharing_tags (provided now by clusterer module)

2.30  REGISTRAR module

  • in clustered user location scenarios, save() may now receive an optional "ownership tag" parameter to mark contacts with. Since at most one node may own the tag at any given point in time, this is useful in order to determine which node of an active/backup pair is responsible for issuing ping messages.

2.31  REST_CLIENT module

  • enhanced the error codes to better accomodate the various possible failures during an HTTP transfer. Script writers can now distinguish between connection refused, connect timeout or transfer timeout. See the rest_get() & friends docs for more details. Due to its significant importance, this patch has been backported into 2.4.

2.32  RTPPROXY module

  • The rtpproxy_sock parameter, as well as DB entries, now support an extra IP that will be used instead of the one indicated by RTPProxy. This is useful in NATTed environments where RTPProxy listens on a private IP, but you need to advertise a public IP.

2.33  RTPENGINE module

  • rtpengine_offer(), rtpengine_answer(), rtpengine_manage() now can receive the SDP body to send to rtpengine as a parameter. This is useful when you want to manipulate the SDP body sent to RTPengine (i.e. to remove, or add additional streams).

2.34  SIPMSGOPS module

  • functions has_totag(), ruri_has_param(), ruri_has_param(), ruri_del_param(), ruri_tel2sip(), is_uri_user_e164() imported from the URI module.
  • remove_hf() was split into remove_hf(), remove_hf_re() and remove_hf_glob(). As a result, the "flags" parameter was dropped.

2.35  URI module (removed)

  • function is_user() obsoleted as it can simply and more flexible be replaced with $au==$var(username)
  • functions has_totag(), uri_param(), add_uri_param(), del_uri_param(), tel2sip(), is_uri_user_e164() moved into the SIPMSGOPS module. Note that their names were slightly changes for a better understanding.
  • functions db_check_to(), db_check_from(), db_does_uri_exist(), db_get_auth_id() and all DB related module parameters moved to the AUTH_DB modules. Note that their names or prototypes may have been changed for a better integration.
  • functions aaa_does_uri_exist() and aaa_does_uri_user_exist() moved into the AUTH_AAA module.

2.36  USRLOC module

  • the shared_pinging module parameter has been obsoleted in favour of the pinging_mode, which more accurately describes/explains the different pinging heuristics of the module.
  • the Apache Cassandra NoSQL database can now be used to hold the federation metadata as the required API endpoints were implemented in the cachedb_cassandra module.


Page last modified on January 13, 2021, at 01:00 PM