About

About.Version-2-4-0 History

Show minor edits - Show changes to markup

April 05, 2018, at 03:14 PM by liviu -
Changed line 94 from:
  • the module uses local time instead of UTC time. The former behavior can be restored by enabling use_utc_time.
to:
  • the module now uses local time instead of UTC time. The former behavior can be restored by enabling use_utc_time.
April 05, 2018, at 03:13 PM by liviu -
Added lines 92-94:

FRAUD_DETECTION module

  • the module uses local time instead of UTC time. The former behavior can be restored by enabling use_utc_time.
April 05, 2018, at 12:55 PM by liviu -
Changed lines 98-99 from:
  • $json_pretty(id) - dumps the JSON in a nice, readable form, by adding spaces and tabs to the output.
  • $json_compact(id) - outputs the JSON in a compact manner, avoiding any extra spaces in the output.
to:
  • $json_pretty(id) - dumps the JSON in a nice, readable form, by adding spaces and tabs to the output.
  • $json_compact(id) - outputs the JSON in a compact manner, avoiding any extra spaces in the output.
April 05, 2018, at 11:48 AM by liviu -
Changed lines 82-84 from:
  • Adapt to the newly added SessionV1 interface, which provides mechanisms to access enhanced CGRateS submodules (such as AttributeS or SuppplierS modules). One can activate each of these new features by setting the $cgr_opt(name) variable.
  • Provide a simple mechanism to access the values returned by CGRateS using the $cgr_ret(name) variable. The old $cgrret variable has been deprecated and replaced by the newly added $cgr_ret(name), although when used without a name (i.e. $cgr_ret) it has the same behavior as the old $cgrret).
to:
  • Adapt to the newly added SessionV1 interface, which provides mechanisms to access enhanced CGRateS submodules (such as AttributeS or SuppplierS modules). One can activate each of these new features by setting the $cgr_opt(name) variable.
  • Provide a simple mechanism to access the values returned by CGRateS using the $cgr_ret(name) variable. The old $cgrret variable has been deprecated and replaced by the newly added $cgr_ret(name), although when used without a name (i.e. $cgr_ret) it has the same behavior as the old $cgrret).
Changed line 87 from:
  • add callid, from_tag and to_tag to the E_DLG_STATE_CHANGED event parameters.
to:
  • add callid, from_tag and to_tag to the E_DLG_STATE_CHANGED event parameters.
Changed lines 102-103 from:
  • the public_ip parameter of the encode_contact() function now also accepts script variables.
to:
  • the public_ip parameter of the encode_contact() function now also accepts script variables.
Changed lines 109-111 from:
  • new modparam, sipping_latency_flag - Enables pinging latency computation (and event raising) for the current Contacts of a received REGISTER.
  • new modparam, sipping_ignore_rpl_codes - CSV string containing a series of SIP reply codes which are to be discarded. Useful for usrloc full-sharing topologies, where the location nodes are front-ended by a SIP entity of our own, hence it may reply to contact pings with status codes such as 408 (Request Timeout), which should be ignored.
to:
  • new modparam, sipping_latency_flag - Enables pinging latency computation (and event raising) for the current Contacts of a received REGISTER.
  • new modparam, sipping_ignore_rpl_codes - CSV string containing a series of SIP reply codes which are to be discarded. Useful for usrloc full-sharing topologies, where the location nodes are front-ended by a SIP entity of our own, hence it may reply to contact pings with status codes such as 408 (Request Timeout), which should be ignored.
Changed lines 120-121 from:

The subs_phtable_list MI command now includes in its output the Contact and the first proxy from Record-Route as next_hop; also listed subscriptions can be filtered by "From" and "To" URIs.

to:

The subs_phtable_list MI command now includes in its output the Contact and the first proxy from Record-Route as next_hop; also listed subscriptions can be filtered by "From" and "To" URIs.

Changed lines 123-124 from:
  • new module parameter limit_per_interval that selects if the limit parameter of the rl_check() function is specified per-timer_interval or per-second.
to:
  • new module parameter limit_per_interval that selects if the limit parameter of the rl_check() function is specified per-timer_interval or per-second.
Changed lines 126-129 from:
  • new lookup() flag, l (Local-only). Only valid within a federated user location cluster. Forces the lookup to result in local contacts only (no additional global branches are added).
  • new lookup() flag, yXXXX (Pinging latency filtering). Maximally accepted contact pinging latency (microseconds). Contacts of an AoR with a higher latency will be discarded during the lookup.
  • new lookup() flag, Y (Pinging latency sorting). The branches will be created in ascending order of their target contact's last successful ping latency (fastest ping -> slowest ping). This flag may work together with the "y" flag.
to:
  • new lookup() flag, l (Local-only). Only valid within a federated user location cluster. Forces the lookup to result in local contacts only (no additional global branches are added).
  • new lookup() flag, yXXXX (Pinging latency filtering). Maximally accepted contact pinging latency (microseconds). Contacts of an AoR with a higher latency will be discarded during the lookup.
  • new lookup() flag, Y (Pinging latency sorting). The branches will be created in ascending order of their target contact's last successful ping latency (fastest ping -> slowest ping). This flag may work together with the "y" flag.
Changed lines 131-132 from:
  • new function rest_init_client_tls() - forces a specific TLS client domain (cert / private key pair) for the next request.
to:
  • new function rest_init_client_tls() - forces a specific TLS client domain (cert / private key pair) for the next request.
Changed lines 136-137 from:
  • Provide access to the entire information of a RTPEngine session using the $rtpquery variable
  • Provide an easy way to get statistics from a RTP call such as MOS (Mean Opinion Score) value using the $rtpstat(name) variable.
to:
  • Provide access to the entire information of a RTPEngine session using the $rtpquery variable
  • Provide an easy way to get statistics from a RTP call such as MOS (Mean Opinion Score) value using the $rtpstat(name) variable.
Changed lines 142-144 from:
  • The new default_set parameter can be used to specify a custom default set, instead of the hardocoded 0.
  • The rtpproxy_offer() function can now return the IP and port used by rtpproxy to receive the media.
to:
  • The new default_set parameter can be used to specify a custom default set, instead of the hardocoded 0.
  • The rtpproxy_offer() function can now return the IP and port used by rtpproxy to receive the media.
Changed lines 147-148 from:
  • provided a way to parse and access ISUP parameters and subfields from an ISUP message contained in a script variable. This can be done via the script transformation {isup.param,param_name,[subfield_name]} directly exported by the module.
to:
  • provided a way to parse and access ISUP parameters and subfields from an ISUP message contained in a script variable. This can be done via the script transformation {isup.param,param_name,[subfield_name]} directly exported by the module.
Changed line 163 from:
  • added the media_ip parameter to the siprec_start_recording() function in order to include the "c=" line in the sdp body.
to:
  • added the media_ip parameter to the siprec_start_recording() function in order to include the "c=" line in the sdp body.
Changed lines 168-169 from:
  • the sql_cacher_reload MI function can now invalidate all keys when issued in the "on demand" mode when no specific key is passed as parameter.
to:
  • the sql_cacher_reload MI function can now invalidate all keys when issued in the "on demand" mode when no specific key is passed as parameter.
Changed lines 179-180 from:
  • new modparam: latency_event_min_us. Denotes a minimal pinging latency threshold (microseconds) beyond which the E_UL_LATENCY_UPDATE will start getting raised.
  • new modparam: latency_event_min_us_delta. Denotes a minimal pinging latency difference (microseconds, positive or negative) beyond which the E_UL_LATENCY_UPDATE will start getting raised.
to:
  • new modparam: latency_event_min_us. Denotes a minimal pinging latency threshold (microseconds) beyond which the E_UL_LATENCY_UPDATE will start getting raised.
  • new modparam: latency_event_min_us_delta. Denotes a minimal pinging latency difference (microseconds, positive or negative) beyond which the E_UL_LATENCY_UPDATE will start getting raised.
April 05, 2018, at 11:37 AM by liviu -
Changed lines 66-67 from:
  • OpenSIPS will now start even if Redis is unreachable. A new modparam, shutdown_on_error, can be enabled in order to revert to the old behavior.
to:
  • OpenSIPS will now start even if Redis is unreachable. A new modparam, shutdown_on_error, can be enabled in order to revert to the old behavior.
Changed line 70 from:
  • new parameters: db_mode, current_info and neighbor_info that add the possibility of dynamically learning the topology of the cluster without needing to provision any node information in a database. Describing at least one neighbor along with its own information is enough for a node to join a cluster.
to:
  • new parameters: db_mode, current_info and neighbor_info that add the possibility of dynamically learning the topology of the cluster without needing to provision any node information in a database. Describing at least one neighbor along with its own information is enough for a node to join a cluster.
Changed line 72 from:
  • Added a node capabilities layer that is used to keep track of the status of the higher-level clustering services (eg. dialog replication) along with the MI command clusterer_list_cap to list them.
to:
  • Added a node capabilities layer that is used to keep track of the status of the higher-level clustering services (eg. dialog replication) along with the MI command clusterer_list_cap to list them.
Changed lines 76-79 from:
  • script functions that send/broadcast a "request"-like message: cluster_send_req() / cluster_broadcast_req() or a "reply"-like message: cluster_send_rpl()
  • exported events that signal the receival of a request or reply message: E_CLUSTERER_REQ_RECEIVED and E_CLUSTERER_RPL_RECEIVED and provide the message in the event parameters.
  • new script function cluster_check_addr() that checks if an IP address belongs to one of the nodes in the cluster.
  • Added the ability to dispatch the execution of any MI command to all nodes or a single node in in the cluster with the cluster_send_mi and cluster_broadcast_mi MI commands.
to:
  • script functions that send/broadcast a "request"-like message: cluster_send_req() / cluster_broadcast_req() or a "reply"-like message: cluster_send_rpl()
  • exported events that signal the receival of a request or reply message: E_CLUSTERER_REQ_RECEIVED and E_CLUSTERER_RPL_RECEIVED and provide the message in the event parameters.
  • new script function cluster_check_addr() that checks if an IP address belongs to one of the nodes in the cluster.
  • Added the ability to dispatch the execution of any MI command to all nodes or a single node in in the cluster with the cluster_send_mi and cluster_broadcast_mi MI commands.
April 03, 2018, at 02:58 PM by liviu -
Changed line 105 from:
  • significant rework of the module in order to fit with even more scenarios. The Path-based insertion support was dropped -- the insertion is now exclusively performed by rewriting Contact URIs. More details in the updated mid_registrar docs.
to:
  • significant rework of the module in order to fit with even more scenarios. The Path-based insertion support was dropped -- the insertion is now exclusively performed by rewriting Contact URIs, with the option of replacing the Contact username as well, or simply append a ";ctid=" URI parameter. More details in the updated mid_registrar docs.
April 03, 2018, at 02:57 PM by liviu -
Added line 105:
  • significant rework of the module in order to fit with even more scenarios. The Path-based insertion support was dropped -- the insertion is now exclusively performed by rewriting Contact URIs. More details in the updated mid_registrar docs.
March 28, 2018, at 09:27 PM by liviu -
Changed line 108 from:
  • new modparam, sipping_latency_bflag - Enables pinging latency computation (and event raising) for the current Contacts of a received REGISTER.
to:
  • new modparam, sipping_latency_flag - Enables pinging latency computation (and event raising) for the current Contacts of a received REGISTER.
March 28, 2018, at 09:24 PM by liviu -
Changed line 130 from:
  • new function rest_client_init_tls() - forces a specific TLS client domain (cert / private key pair) for the next request.
to:
  • new function rest_init_client_tls() - forces a specific TLS client domain (cert / private key pair) for the next request.
March 28, 2018, at 09:23 PM by liviu -
Added lines 129-131:

REST_CLIENT module

  • new function rest_client_init_tls() - forces a specific TLS client domain (cert / private key pair) for the next request.
Added line 174:
  • major clustering additions to the module, featuring a "federated data" topology and two "full mesh" topology variants (OpenSIPS-oriented or NoSQL-oriented). Read this blog post for more details.
March 28, 2018, at 09:17 PM by liviu -
Added lines 106-109:

NATHELPER module

  • new modparam, sipping_latency_bflag - Enables pinging latency computation (and event raising) for the current Contacts of a received REGISTER.
  • new modparam, sipping_ignore_rpl_codes - CSV string containing a series of SIP reply codes which are to be discarded. Useful for usrloc full-sharing topologies, where the location nodes are front-ended by a SIP entity of our own, hence it may reply to contact pings with status codes such as 408 (Request Timeout), which should be ignored.
March 28, 2018, at 09:10 PM by liviu -
Added lines 104-106:

MID_REGISTRAR module

  • added restart persistency support. Currently only works with single-instance user location setups.
Added lines 120-124:

REGISTRAR module

  • new lookup() flag, l (Local-only). Only valid within a federated user location cluster. Forces the lookup to result in local contacts only (no additional global branches are added).
  • new lookup() flag, yXXXX (Pinging latency filtering). Maximally accepted contact pinging latency (microseconds). Contacts of an AoR with a higher latency will be discarded during the lookup.
  • new lookup() flag, Y (Pinging latency sorting). The branches will be created in ascending order of their target contact's last successful ping latency (fastest ping -> slowest ping). This flag may work together with the "y" flag.
Changed lines 169-171 from:
to:
  • new event: E_UL_LATENCY_UPDATE. Raised
  • new modparam: latency_event_min_us. Denotes a minimal pinging latency threshold (microseconds) beyond which the E_UL_LATENCY_UPDATE will start getting raised.
  • new modparam: latency_event_min_us_delta. Denotes a minimal pinging latency difference (microseconds, positive or negative) beyond which the E_UL_LATENCY_UPDATE will start getting raised.
March 28, 2018, at 09:00 PM by liviu -
Added lines 56-58:

NEW FREESWITCH_SCRIPTING module

FREESWITCH_SCRIPTING is a new module that provides the ability to subscribe to arbitrary FreeSWITCH ESL events and receive/manipulate them inside the OpenSIPS script. It also allows the script writer to run arbitrary FreeSWITCH ESL commands. Read this blog post for detailed explanations.

Added lines 92-94:

FREESWITCH module

  • new modparams for fine-grained control over the ESL interaction.
March 28, 2018, at 08:49 PM by liviu -
Changed line 51 from:
  • if DBG_MALLOC is enabled and you forgot to enable memdump and/or memlog, you may still extract a memory dump without restarting OpenSIPS by temporarily setting debugging levels to "log_level = 14" and "log_level = 15" respectively, perform the dump, then restore the logging back to original
to:
  • if DBG_MALLOC is enabled and you forgot to set the memdump and/or memlog levels, you may still extract a memory dump without restarting OpenSIPS by temporarily dropping OpenSIPS to "log_level = 14" and "log_level = 15" respectively, perform the dump, then restore the logging back to its original state.
March 28, 2018, at 08:48 PM by liviu -
Added lines 47-51:
Memory manager
  • auto-recovery from "double pointer free" errors in production environments
  • improved error reporting in "out of memory" situations
  • if DBG_MALLOC is enabled and you forgot to enable memdump and/or memlog, you may still extract a memory dump without restarting OpenSIPS by temporarily setting debugging levels to "log_level = 14" and "log_level = 15" respectively, perform the dump, then restore the logging back to original
March 28, 2018, at 08:42 PM by liviu -
Changed lines 22-32 from:
  • more multi-line strings, allowing for more readable code, such as:
avp_db_query("
    SELECT
        table_name,
        table_version
    FROM
        version",
    "$avp(tn),
    $avp(tv)");
to:
  • extended multi-line strings, allowing for more readable code such as in this example
March 28, 2018, at 08:40 PM by liviu -
Added lines 22-32:
  • more multi-line strings, allowing for more readable code, such as:
avp_db_query("
    SELECT
        table_name,
        table_version
    FROM
        version",
    "$avp(tn),
    $avp(tv)");
March 28, 2018, at 07:40 PM by rvlad_patrascu -
Changed line 66 from:
  • script functions that send/broadcast a "request"-like message: cluster_send_req()/cluster_broadcast_req() or a "reply"-like message: cluster_send_rpl()
to:
  • script functions that send/broadcast a "request"-like message: cluster_send_req() / cluster_broadcast_req() or a "reply"-like message: cluster_send_rpl()
Changed line 68 from:
  • new script function cluster_check_addr that checks if an IP address belongs to one of the nodes in the cluster.
to:
  • new script function cluster_check_addr() that checks if an IP address belongs to one of the nodes in the cluster.
March 28, 2018, at 07:19 PM by rvlad_patrascu -
March 28, 2018, at 07:18 PM by rvlad_patrascu -
Changed line 64 from:
  • Added a new column to the clusterer table, flags that can be set to the value seed in order to bootstrap the data sync'ing in the cluster.
to:
  • Added a new column to the clusterer table, flags that can be set to the value "seed" in order to bootstrap the data sync'ing in the cluster.
Changed line 78 from:
  • Added support for proper dialog distribution required in scenarios like Active-Active, Active-Backup and Anycast setups. This includes features like data synchronization at startup or dialog ownership and actions coordination. More details can be found in this article.
to:
  • Added support for proper dialog distribution required in scenarios like Active-Backup, Active-Active or Anycast setups. This roughly consists of the following features: data synchronization at OpenSIPS startup(or runtime if required) and dialog "ownership" and coordination of nodes in terms of taking actions on dialogs. More details can be found in this article.
March 28, 2018, at 07:07 PM by rvlad_patrascu -
Added lines 88-90:

MANGLER module

  • the public_ip parameter of the encode_contact() function now also accepts script variables.
Added lines 101-103:

RATELIMIT module

  • new module parameter limit_per_interval that selects if the limit parameter of the rl_check() function is specified per-timer_interval or per-second.
Added lines 132-139:

SIPREC module

  • added the media_ip parameter to the siprec_start_recording() function in order to include the "c=" line in the sdp body.
  • added the "t=0 0" line in the SDP body.
  • allow custom XML values for the caller and callee parameters of siprec_start_recording() function.

SQL_CACHER module

  • the sql_cacher_reload MI function can now invalidate all keys when issued in the "on demand" mode when no specific key is passed as parameter.
March 28, 2018, at 06:55 PM by rvlad_patrascu -
Changed lines 95-96 from:

For a detailed description of those scenarios, please refer to the this blog post.

to:

For a detailed description of those scenarios, please refer to the this blog post.
The subs_phtable_list MI command now includes in its output the Contact and the first proxy from Record-Route as next_hop; also listed subscriptions can be filtered by "From" and "To" URIs.

March 28, 2018, at 06:52 PM by rvlad_patrascu -
Added line 111:
  • provided a way to parse and access ISUP parameters and subfields from an ISUP message contained in a script variable. This can be done via the script transformation {isup.param,param_name,[subfield_name]} directly exported by the module.
March 28, 2018, at 06:49 PM by rvlad_patrascu -
Added line 78:
  • Added support for proper dialog distribution required in scenarios like Active-Active, Active-Backup and Anycast setups. This includes features like data synchronization at startup or dialog ownership and actions coordination. More details can be found in this article.
March 28, 2018, at 06:47 PM by rvlad_patrascu -
Changed line 66 from:
  • script functions that send/broadcast a "request"-like message: cluster_send_req/cluster_broadcast_req or a "reply"-like message: cluster_send_rpl
to:
  • script functions that send/broadcast a "request"-like message: cluster_send_req()/cluster_broadcast_req() or a "reply"-like message: cluster_send_rpl()
Added lines 74-77:

DIALOG module

  • accept script variables for the profile parameter of the is_in_profile(), get_profile_size(), set_dlg_profile() and unset_dlg_profile() functions.
  • add callid, from_tag and to_tag to the E_DLG_STATE_CHANGED event parameters.
March 28, 2018, at 06:40 PM by rvlad_patrascu -
Changed line 62 from:
  • Added a node capabilities layer that is used to keep track of the status of the higher-level clustering services (eg. dialog replication).
to:
  • Added a node capabilities layer that is used to keep track of the status of the higher-level clustering services (eg. dialog replication) along with the MI command clusterer_list_cap to list them.
Changed lines 66-67 from:
  • script functions that send/broadcast a "request"-like message: cluster_send_req/cluster_broadcast_req or a "reply"-like message: cluster_send_rpl.
to:
  • script functions that send/broadcast a "request"-like message: cluster_send_req/cluster_broadcast_req or a "reply"-like message: cluster_send_rpl
  • exported events that signal the receival of a request or reply message: E_CLUSTERER_REQ_RECEIVED and E_CLUSTERER_RPL_RECEIVED and provide the message in the event parameters.
Added line 69:
  • Added the ability to dispatch the execution of any MI command to all nodes or a single node in in the cluster with the cluster_send_mi and cluster_broadcast_mi MI commands.
March 28, 2018, at 06:32 PM by rvlad_patrascu -
Added line 67:
  • new script function cluster_check_addr that checks if an IP address belongs to one of the nodes in the cluster.
March 28, 2018, at 06:30 PM by rvlad_patrascu -
Added lines 65-66:
  • Introduced a generic way of cluster communication directly at script level. This can be achieved using:
    • script functions that send/broadcast a "request"-like message: cluster_send_req/cluster_broadcast_req or a "reply"-like message: cluster_send_rpl.
March 28, 2018, at 06:27 PM by rvlad_patrascu -
Added line 64:
  • Added a new column to the clusterer table, flags that can be set to the value seed in order to bootstrap the data sync'ing in the cluster.
March 28, 2018, at 06:25 PM by rvlad_patrascu -
Added lines 61-63:
  • The internal topology, in terms of the state of the links between nodes, was enhanced by advertising and keeping a bidirectional representation. This improves the topology consistency and convergence.
  • Added a node capabilities layer that is used to keep track of the status of the higher-level clustering services (eg. dialog replication).
  • Added a mechanism that allows modules that use the clustering API to perform data synchronization from an eligible node based on the capabilities layer.
March 28, 2018, at 06:21 PM by rvlad_patrascu -
Added lines 57-60:

CLUSTERER module

  • The topology establishing mechanism no longer requires any fields in the DB for persistency(removed ls_seq_no and top_seq_no).
  • new parameters: db_mode, current_info and neighbor_info that add the possibility of dynamically learning the topology of the cluster without needing to provision any node information in a database. Describing at least one neighbor along with its own information is enough for a node to join a cluster.
March 28, 2018, at 06:12 PM by rvlad_patrascu -
Changed lines 20-21 from:
  • you can now mark an interface as an anycast interface using the anycast keyword - doing so, the tm module will automatically detect replies that are not destined to the current OpenSIPS instance and will handle them accordingly.
to:
  • you can now mark an interface as an anycast interface using the anycast keyword - doing so, the tm module will automatically detect replies that are not destined to the current OpenSIPS instance and will handle them accordingly.
  • script transformations now accept NULL as input and also return NULL instead of empty string for unsuccessful operation or errors. This allows a more cleaner way of chaining transformations and checking the final result.
March 28, 2018, at 02:25 PM by razvancrainea -
Changed line 53 from:

JSONRPC is a new module in OpenSIPS 2.4 that provides functions to run JSON-RPC commands on a remote JSON-RPC server, and retrieve the response back.

to:

JSONRPC is a new module in OpenSIPS 2.4 that provides functions to run JSON-RPC commands on a remote JSON-RPC server, and retrieve the call's response back.

March 28, 2018, at 02:24 PM by razvancrainea -
Added lines 48-53:

NEW EVENT_JSONRPC module

The new EVENT_JSONRPC module in OpenSIPS 2.4 implements a transport protocol for the OpenSIPS Event Interface. Using this module, you can notify applications about OpenSIPS internal events using the JSON-RPC protocol.

NEW JSONRPC module

JSONRPC is a new module in OpenSIPS 2.4 that provides functions to run JSON-RPC commands on a remote JSON-RPC server, and retrieve the response back.

March 28, 2018, at 02:18 PM by razvancrainea -
Added line 20:
  • you can now mark an interface as an anycast interface using the anycast keyword - doing so, the tm module will automatically detect replies that are not destined to the current OpenSIPS instance and will handle them accordingly.
March 28, 2018, at 02:14 PM by razvancrainea -
Deleted line 57:
Added line 102:
  • Added support for handling transactions in a distributed environment, with multiple active-active servers, such as ANYCAST setups. Read more about the Full Anycast support on our blog.
March 28, 2018, at 02:04 PM by razvancrainea -
Changed line 53 from:
  • Provide a simple mechanism to access the values returned by CGRateS using the $cgr_ret(name) variable.
to:
  • Provide a simple mechanism to access the values returned by CGRateS using the $cgr_ret(name) variable. The old $cgrret variable has been deprecated and replaced by the newly added $cgr_ret(name), although when used without a name (i.e. $cgr_ret) it has the same behavior as the old $cgrret).
March 28, 2018, at 02:01 PM by razvancrainea -
Added lines 75-78:
  • Adapt with the latest transcoding features added in rtpengine.
  • Provide access to the entire information of a RTPEngine session using the $rtpquery variable
  • Provide an easy way to get statistics from a RTP call such as MOS (Mean Opinion Score) value using the $rtpstat(name) variable.
  • Make the RTPEngine provisioning more flexible by adding database support for specifying rtpengine sockets.
March 28, 2018, at 01:51 PM by razvancrainea -
Added lines 50-53:

CGRateS module

  • Adapt to the newly added SessionV1 interface, which provides mechanisms to access enhanced CGRateS submodules (such as AttributeS or SuppplierS modules). One can activate each of these new features by setting the $cgr_opt(name) variable.
  • Provide a simple mechanism to access the values returned by CGRateS using the $cgr_ret(name) variable.
March 28, 2018, at 01:27 PM by razvancrainea -
Added line 75:
  • The rtpproxy_offer() function can now return the IP and port used by rtpproxy to receive the media.
March 28, 2018, at 01:24 PM by razvancrainea -
Changed line 19 from:
  • OpenSIPS can now be configured to listen for a specific protocol on any interface using the * token (i.e. listen = udp:*:5060 will bind all available IPs on port 5060)
to:
  • OpenSIPS can now be configured to listen for a specific protocol on any interface, including IPv6, using the * token (i.e. listen = udp:*:5060 will bind all available IPs on port 5060)
March 28, 2018, at 01:23 PM by razvancrainea -
Changed lines 19-20 from:
to:
  • OpenSIPS can now be configured to listen for a specific protocol on any interface using the * token (i.e. listen = udp:*:5060 will bind all available IPs on port 5060)
Deleted line 43:
March 28, 2018, at 01:15 PM by razvancrainea -
Added line 74:
  • The new default_set parameter can be used to specify a custom default set, instead of the hardocoded 0.
March 28, 2018, at 12:09 PM by 109.99.227.30 -
Added lines 44-47:

NEW SIPREC module

The new SIPREC module in OpenSIPS 2.4 provides the means to do call recording to an external recorder using the SIPREC standard.

Deleted lines 89-91:

SIPREC module

  • The new SIPREC module in OpenSIPS 2.4 provides the means to do call recording to an external recorder using the SIPREC standard.
March 28, 2018, at 12:07 PM by 109.99.227.30 -
Changed line 14 from:
  • "-f -" config file via stdin
to:
  • "-f -" was introduced for reading the config file via stdin instead from a file.
Added line 18:
  • old keywords were dropped (src_ip, dst_ip, src_port, dst_port, uri, from_uri, to_uri, method, status, myself, proto and msg:len)
March 28, 2018, at 12:03 PM by 109.99.227.30 -
Added lines 72-81:

SIPTRACE module

The tracing capabilities were extended in order to capture the following SIP messages which were not traced so far:

  • 100 trying generated by OpenSIPS
  • incoming ACK for negative replies
  • outgoing ACK to negative replies
  • incoming replies to CANCEL requests
  • incoming request retransmissions
  • outgoing request retransmissions
  • outgoing reply retransmissions
March 28, 2018, at 11:36 AM by 109.99.227.30 -
Added lines 40-42:
SIP Parser
  • the "To" like headers (like PPI or PAI) are now properly parsed as multi-value (comma separated) name-addr/addr-spec headers
Added lines 46-49:

DNS_CACHE module

  • proper handling of TTL 0 in DNS answers. RFC1035 states that "zero TTL values are interpreted to mean that the RR can only be used for the transaction in progress, and should not be cached".
Added line 84:
  • a new extra field attr provided by the E_UL_CONTACT_INSERT event
March 28, 2018, at 11:20 AM by 109.99.227.30 -
Added lines 34-38:
InterProcess Communication (IPC) support
  • added the job dispatching capability - to send an internal job to be executed/handled by any available process (kind of a pseudo load-balancing of the internal jobs among the processes). The FreeSWITCH module is using this in order to execute the incoming FS events in any idle process.
  • added Remote Procedure Call (RPC) support via IPC - a process can trigger the execution of a function in a different process. This is used by the TCP core to "externalize" the execution of its functions responsible for generating statistics.
  • shutdown sequence is now implemented via RPC - the attendant/main process executes in all IPC aware processes a terminate function. This leads to a controlled process termination versus the old brutal approach based on simply killing the processes. Such killing may result in an inconsistent state of the shared resources and even more in a failed shutdown process with lost data. For the future, a per-process cleanup handler may be exported by each module.
March 27, 2018, at 04:18 PM by 109.99.227.30 -
Changed line 68 from:
  • Added support for Content-Disposition: no-cancel by forcing the "0x10" flag in t_relay() - as per RFC3841, section 9.1, the TM module may be instructed not to cancel all ongoing branches when a 2xx reply is received. It will keep the pending branches ongoing until (1) all branches will receive a final reply or (2) the transaction hits the timeout.
to:
  • Added support for Content-Disposition: no-cancel by forcing the "0x10" flag in t_relay() - as per RFC3841, section 9.1, the TM module may be instructed not to cancel all ongoing branches when a 2xx reply is received. It will keep the pending branches ongoing until (1) all branches will receive a final reply or (2) the transaction hits the timeout. This is work sponsored by Harris Corporation (https://www.harris.com).
March 27, 2018, at 04:17 PM by 109.99.227.30 -
Added lines 66-68:

TM module

  • Added support for Content-Disposition: no-cancel by forcing the "0x10" flag in t_relay() - as per RFC3841, section 9.1, the TM module may be instructed not to cancel all ongoing branches when a 2xx reply is received. It will keep the pending branches ongoing until (1) all branches will receive a final reply or (2) the transaction hits the timeout.
March 27, 2018, at 03:50 PM by 109.99.227.30 -
Added lines 66-69:

USRLOC module

  • migrate the "expires" column from DATETIME to INT. Instead of keeping the expires value as DATETIME, better keep it as UNIX timestamp in order to avoid any impact due TZ and DST changes.
March 27, 2018, at 03:47 PM by 109.99.227.30 -
Added lines 31-33:
DB interface
  • added the escaping/encoding of unsupported characters inside a DB URL. Using %xy hexa encoding, you can push any sort of characters in key fields of the URL as username and password.
March 27, 2018, at 03:44 PM by 109.99.227.30 -
Added lines 54-59:

SIP_I module

  • added the ability to push custom headers in body parts via the default_part_headers module parameter or as an optional extra parameter to add_isup_part([isup_msg_type][,extra_headers]) function - this is very useful for managing the "Content-Disposition" header per body part.

SIPMSGOPS module

  • added the ability to push custom headers in body parts as an option extra parameter to add_body_part(body,mime[,headers])' function - this is very useful for managing the "Content-Disposition" header per body part.
March 27, 2018, at 03:38 PM by 109.99.227.30 -
Changed lines 21-22 from:
"Load" statistics class reworked - the statistics giving information about the OpenSIPS internal load. The load is defined as percentage of time spent in doing processing versus total time. Following the model of "top", there are three load values, calculated over different periods of time:
to:
"Load" statistics

OpenSIPS 2.4 comes with a complete re-design of the statistics that gives information about the OpenSIPS internal load. The load is defined as percentage of time spent in doing processing versus total time. Following the model of "top", there are three load values, calculated over different periods of time:

March 27, 2018, at 03:35 PM by 109.99.227.30 -
Added lines 18-29:

OpenSIPS core

"Load" statistics class reworked - the statistics giving information about the OpenSIPS internal load. The load is defined as percentage of time spent in doing processing versus total time. Following the model of "top", there are three load values, calculated over different periods of time:
  • realtime load - calculated over the last 1 second
  • last minute load - calculated over the last 1 minute
  • last 10 minutes load - calculated over the last 10 minutes

The new load class overs a more granular access to the load information:

  • load per process
  • load per OpenSIPS core (covering only core/SIP processes)
  • load per entire OpenSIPS (covering all processes, core and modules)

Find the full list of available load statistics (and their description) here.

March 27, 2018, at 03:24 PM by 109.99.227.30 -
Added lines 26-34:

PRESENCE module

Added clustering capabilities in terms of full data sharing or/and federated clusters. The clustering support allows the presence node to share data between them (full sharing versus data partitioning with replication) and to synchronize/coordinate the nodes in terms of taking actions over data (broadcast & querying over the cluster, tag sharing).
The clustering support enabled several scenarios:

  • active - backup High Availability
  • multi-active Load Balancing
  • multi-active Federation (partitioning)
  • mix between HA and Federation scenarios

For a detailed description of those scenarios, please refer to the this blog post.

January 05, 2018, at 12:06 PM by razvancrainea -
Added lines 22-26:

JSON module

  • Two new variables that control the way the JSON object is printed as string have been added:
    • $json_pretty(id) - dumps the JSON in a nice, readable form, by adding spaces and tabs to the output.
    • $json_compact(id) - outputs the JSON in a compact manner, avoiding any extra spaces in the output.
Deleted line 31:
November 07, 2017, at 02:37 PM by razvancrainea -
Added lines 19-21:

CACHEDB_REDIS module

  • OpenSIPS will now start even if Redis is unreachable. A new modparam, shutdown_on_error, can be enabled in order to revert to the old behavior.
Changed lines 28-29 from:

CACHEDB_REDIS module

  • OpenSIPS will now start even if Redis is unreachable. A new modparam, shutdown_on_error, can be enabled in order to revert to the old behavior.
to:

SIPREC module

  • The new SIPREC module in OpenSIPS 2.4 provides the means to do call recording to an external recorder using the SIPREC standard.
October 09, 2017, at 11:07 AM by liviu -
Added lines 24-26:

CACHEDB_REDIS module

  • OpenSIPS will now start even if Redis is unreachable. A new modparam, shutdown_on_error, can be enabled in order to revert to the old behavior.
September 12, 2017, at 04:45 PM by rvlad_patrascu -
Changed line 17 from:
  • any script variable now supports comparison via the '==' and '!=' logical operators with IP addresses and netmasks (eg. $var(ip) == 10.10.0.0/24). This tests weather the IP address in the variable matches the subnet given in the expression.
to:
  • any script variable now supports comparison via the '==' and '!=' logical operators with IP addresses and netmasks (eg. $var(ip) == 10.10.0.0/24). This tests whether the IP address in the variable matches the subnet given in the expression.
July 14, 2017, at 05:25 PM by rvlad_patrascu -
Changed line 17 from:
  • any script variable supports comparison via the '==' and '!=' logical operators with IP addresses and subnet masks (eg. $var(ip) == 10.10.0.0/24). This tests weather the IP address in the variable is equal to the IP in the right operand (in case no subnet mask or '/32' is used) or matches the subnet of the given right operand.
to:
  • any script variable now supports comparison via the '==' and '!=' logical operators with IP addresses and netmasks (eg. $var(ip) == 10.10.0.0/24). This tests weather the IP address in the variable matches the subnet given in the expression.
July 14, 2017, at 02:42 PM by rvlad_patrascu -
Added lines 12-13:

OpenSIPS script

Added lines 15-17:
  • new core function is_myself that tests if a host is a local address that OpenSIPS listens on
  • new core variable $af that returns the address family (IPv6 or IPv4) of the received SIP message
  • any script variable supports comparison via the '==' and '!=' logical operators with IP addresses and subnet masks (eg. $var(ip) == 10.10.0.0/24). This tests weather the IP address in the variable is equal to the IP in the right operand (in case no subnet mask or '/32' is used) or matches the subnet of the given right operand.
July 03, 2017, at 06:04 PM by liviu -
Added lines 11-12:
  • "-f -" config file via stdin
June 26, 2017, at 07:30 PM by razvancrainea -
Added lines 14-16:

RTPPROXY module

  • The rtpproxy module can now instruct the RTPProxy server to duplicate the stream RTP to a remote destination.
May 11, 2017, at 07:56 PM by razvancrainea -
Changed lines 12-14 from:

TBA

  • TBA
to:

RTPENGINE module

  • The rtpengine has support for two new parameters: in-iface and out-iface that can be used to specify which listening interface rtpengine should advertise when running in bridge mode.

March 16, 2017, at 07:44 PM by razvancrainea -
Changed lines 12-14 from:

TBA

to:

TBA

  • TBA
March 16, 2017, at 07:39 PM by razvancrainea -
Changed lines 12-19 from:

OpenSIPS core

  • TBA

OpenSIPS script

  • TBA

to:

TBA

March 16, 2017, at 07:39 PM by razvancrainea -
Changed lines 6-7 from:
to:
Changed lines 14-24 from:
  • support for armv6 and armv7 locking
  • support for fast-locks on mips and mips64el architectures
  • support for native umutex in freebsd
  • added a new statistic for the SHM memory groups that prints the maximum memory used of a group
  • added content-aware body (multi-part) changing - this allows parsing and modification of the body via the "body parts" list; parts can be modified (with function or lumps), can be deleted and new ones can be added. Any type of modification (and any of them) is allowed. The body is completely rebuild based on the resulting list of body parts. Also we support transparent transitions from no body to body, single part body to multi-part body or the other way around - with automatic update of the Content-Type and Content-Len headers, of course.
  • major rework of body and SDP parsing - unified and consistent way of parsing and accessing the body parts (single or multi part body). This results in a transparent way of parsing and freeing the parts content (like SDP or ISUP).
  • address potential starvation for the timer tasks - even if the timer tasks have priority in the asyns reactor (for being handled), if all the worker processes are already busy in handling some SIP tasks which takes too long, may lead into a starvation of the timer tasks. For the moment we address this by creating a extra worker processes (similar to the SIP workers) which is dedicated to executing the timer tasks. Still, based on their availability and load, the SIP workers are able to consume timer tasks.
  • added the first basic version of an IPC support - this is an internal mechanism that allows any process to pass a job to another process. the IPC support is internally used by the Event Routing module and by the TCP stack. In the next version, more custom existing inter-process communication will be migrated to this generic IPC support. Also, the IPC mechanism opens new possibilities when comes to improvements or creation of new features.
to:
  • TBA
Changed lines 18-313 from:
  • new $xlog_level core pseudo-variable that prints the level of message printed at syslog
  • new custom index append for $avp variables to allow you to add new values at the end of the list (at the bottom of the stack) - $(avp(name)[append]) = "last value";
  • $rb can now take as name a mime, in order to access the body parts by mime : $rb(application/sdp) - get the first SDP body part ; $(rb(application/isup)[-1]) - get the last ISUP body part
  • the the xlog messages include now the time and process ID when printing to stderr (to be consistent with the syslog logging)

Async layer

  • new launch() statement to starts a function/job in async mode and continue the script immediately, without waiting for the job to be terminated. A "report" route may be triggered (outside the context of the msg launching the job) when the job is terminated to be able to access the return code and the possible returned data. See for more.
  • new internal (non-scripting) support for async I/O operations - internal functions can register FDs into the reactor in order to be triggered when data is available (and run a handler). For example this is internally used by the cgrates module in order to handle its communication with the external cgrates engine
  • enhanced the ASYNC API to allows resume via non-FD events (outside I/O reactor scope) ; The resume/suspect logic is reused, but the waiting and triggering can now by done via other means (like event based) rather than being I/O reactor based.

OpenSIPS Enhanced tracing

Starting with this versions multiple events can be traced, other than sip packets. There are two types of events:

  • events that take place when a certain type of SIP packet is processed, events happening in a '''sip context that can be controlled using siptrace module;
  • events that don't take place in a sip context that are controlled directly via proto_hep module;

At the moment, OpenSIPS 2.4 supports tracing for the following sip context events:

  • xlog messages;
  • rest_client module queries ( requests and replies );

These events are controlled via sip_trace function which was enhanced with a new parameter through which one can specify which of these events shall be traced. All these events will be traced in the sip context that is given to the function, that is if rest tracing is activated for a dialog, all rest requests and replies that will occur for that dialog shall be traced.

The following non sip events can be traced:

  • transport layer events( currently available for TCP, TLS, WS and WSS transport layers;
  • mi commands ( all mi protocols are available );

For these types of events the hep ids defined directly in proto_hep module, since there is no sip context( see mi_fifo exmaple). For the mi commands there is the posibilty to define blacklists or whitlists of commands to be traced in order to avoid tracing commands that are not useful( see mi_fifo example ). For transport layer protocols the unit we are working with is a connection. All protocol events such as connect or accept events, connection closed events for TCP, certificate information and master key for TLS and WSS and http request and reply used during the handshake for WS and WSS. Tracing can be activated via MI ( WSS example ) and the connections that will be traced can be controlled via a filter route in which users will ses source and destination IPs and ports for that connection ( WSS example ).

OpenSIPS troubleshooting / development

CGRATES module (new)

  • the cgrates module provides an interface to the CGRateS rating eninge. Using this module you can do multi-tenant prepaid and postpaid billing in the OpenSIPS script. Read more information here.

EVENT ROUTING module (new)

  • The Event (based) Routing module, or shortly the EBR module, provides a mechanism that allows different SIP processings (of messages in script) to communicate and synchronize between through OpenSIPS Events.
  • This mechanism is based on the Subscribe-Notify concept. Any SIP processing may subscribe to various OpenSIPS Events Upon Event raising, the subscriber will be notified, so it will be able to make use of the data attached to the Event. Note that the Event raising may take place in a completely different SIP processing context, completely unrelated to the subscriber processing.
  • The EBR support allows implementation of more advanced SIP scenarios like Push Notification or Call Pickup

FREESWITCH module (new)

  • the freeswitch module acts as a connection manager for FreeSWITCH Event Socket Layer sockets. It currently provides dynamic statistics from FreeSWITCH in order to update routing behavior for the dispatcher and load_balancer modules.

SIP_I module (new)

  • the SIP-I module provides SIP-I to SIP gatewaying and ISUP awarness by offering the possibility of processing ISDN User Part(ISUP) messages encapsulated in SIP. The available operations are: reading and modifying parameters from an ISUP message, removing or adding new optional parameters, adding an ISUP part to a SIP message body. This is done explicitly via script variables and functions. The supported ISUP message types are only the ones that can be included in a SIP message according to the SIP-I(SIP with encapsulated ISUP) protocol defined by ITU-T.

MID_REGISTRAR module (new)

  • the mid_registrar enables a series of scenarios in which OpenSIPS acts as a SIP registration front-end. This novel SIP platform component is able to throttle down SIP registration traffic rates on the way to existing farms of SIP registrars, by extending contact expiration intervals. Moreover, it can also be configured to take over all parallel forking duties for these existing SIP infrastructures.

RABBITMQ module (new)

  • a new RabbitMQ module provides a more flexible and easy to use interface to a RabbitMQ server. Check out more!

XML module (new)

  • the XML module allows the processing of XML documents from the script by exposing a variable that provides access to the elements and their contents and attributes. In this way you can modify, add or remove nodes in the XML tree.

ACC module

  • diameter support has been removed;
  • extra variables engine was reworked(including both extra and leg engine); *_extra and *_extra_bye parameters have been replaced with extra_fields with which you can define tags to be used in the script using acc_extra script variable; the variable can be set/modified until the accounting is being made;
  • leg variables engine was also reworked; now you can define leg variables for each of the available backends(log, db, aaa, evi); the modparam section is the same as for the extra_fields parameter whereas in the script you can use acc_leg variable to set the leg values; the variable can be indexed with the index of the leg; it accepts both positive index(0 is the first leg) and negative indexes(-1 is the last leg);
  • the leg accounting engine is not based anymore on AVPs; each time you want to create a new leg you have to call acc_new_leg function which will create a new leg for you; the value of the last leg shall be accessed with acc_current_leg variable;
  • for further information read the docs

Call Center module

  • new queue_pos_param module paramter to report the queue position - the parameter value is the name of an SIP URI parameter to be used to report the position in the waiting queue when sending the call to media server for onwait/queue playback. The position 0 means it is the next call to be delivered to an agent.

Clusterer module

  • the module was reworked and enhanced in order to provide a better node availability detection mechanism and inter-cluster routing of BIN messages (if the link between nodes A and B is down the message might be routed through node C). As there were no explicit probes at the clusterer module level, an active pinging mechanism was introduced which establishes the state of the connections of the current node with other nodes in the cluster at BIN interface level. Based on this, a link-state resembling protocol was implemented in order to learn the cluster topology and compute a routing 'table' used for sending BIN messages between nodes. Also the possibility of adding new nodes to the cluster without additional provisioning for the existing components was introduced.
  • new module parameters for tweaking the probing mechanism:
    • ping_interval - the interval in seconds between regular pings sent to a neighbour node
    • ping_timeout - the time in milliseconds to wait for a reply to a previously sent ping before retrying or considering the link with the neighbour node down. This is also the interval between successive retries if the send fails.
    • node_timeout - the time in seconds to wait before pinging is restarted for a failed node
  • the module's *_col parameters were changed to reflect the modified DB column names
  • the MI command clusterer_list now lists information about the other nodes in the cluster from the current node's perspective
  • new MI command clusterer_list_topology that lists the cluster's topology from the current node's perspective as an adjacency list
  • for further information read the module documentation

DB MYSQL module

  • new tls_client_domain module parameter - Quickly enable TLS usage for a given MySQL backend

Dialog module

  • the dlg_list and dlg_end_dlg MI commands are now also using (display and accept) the dialog ID as dialog identifier - this is a single unique numerical ID ; Still, the h_label and h_id are accepted as old way to identify the dialogs.
  • added new script function get_dialog_vals() for fetching all the values of a dialog found by callid string. The dialog values are returned as a parallel arrays of names and values.

Dispatcher module

  • the module now supports dynamically calculated weights for FreeSWITCH destinations! As such:
    • the weight column type is now "string", as it can hold either an integer weight or a FreeSWITCH ESL socket. However, OpenSIPS still retains internal backwards-compatibility with the previous schema
    • fetch_freeswitch_stats - enables the dynamic weight calculation engine
    • max_freeswitch_weight - control the maximum weight of a FreeSWITCH destination computed using its runtime resource usage
  • the round-robin algorithm now supports weights - each destination is chosen until its count reaches the weight, and only then moves to a different destination.
  • new module parameter ds_ping_maxfwd - this parameter allows you to set a custom value for inserted Max-Forward header in the SIP ping requests generated by dispatcher module. If not used, it will let TM to add a default value.

DROUTING module

  • the do_routing() accepts now any kind of variable for the routing group parameter; previously this was limited to AVP variables.
  • added support for replicating the gateways and carrier status (upon changes) to other OpenSIPS nodes inside a cluster (using the clusterer module and BIN interface). New control parameters were added:
    • replicate_status_to - the cluster ID for replication pool
    • accept_replicated_status - the cluster ID for accepting incoming replication data

Cachedb_local module

  • in previous versions the module had only one "database"(one hash); now multiple such databases can be defined, each of these representing an unique collection having it's own set of keys and values;
  • the collections can be defined using cache_collections module parameter;
  • each collection should be assigned to a cachedb_url; same collection can be assign to multiple cachedb_urls;
  • for more information check the official documentation

Load Balancer module

  • the module now supports dynamically calculated max resource values for FreeSWITCH destinations! As such:
    • resources may also be provisioned with a FreeSWITCH ESL socket URL as "max value" apart from an integer, as shown here
    • fetch_freeswitch_stats - enables the runtime max resource value calculation engine
    • initial_freeswitch_load - the starting "max resource" value, until the first batch of statistics arrive from FreeSWITCH
  • preserve destination's status during reload - preserve the status (enabled or not) of the destinations during a data reload from DB.
  • more detailed return code for functions starting/continuing the LB process. In case of LB failure, the ret code may be:
    • -1 generic internal error
    • -2 no capacity left
    • -3 no available destinations
    • -4 bad resources
  • added support for replicating the destination status (upon changes) to other OpenSIPS nodes inside a cluster (using the clusterer module and BIN interface). New control parameters were added:
    • replicate_status_to - the cluster ID for replication pool
    • accept_replicated_status - the cluster ID for accepting incoming replication data

MI FIFO module

  • trace mi datagram requests
    • command
    • parameters
    • module name
  • and replies
    • code
    • reason
    • part of the reply message
  • see official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI HTTP module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI JSON module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI XMLRPC NG module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI DATAGRAM module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

OSP module

  • Support for SUBSCRIBE/NOTIFY CNAM;
  • Updated for OSP Toolkit 4.12.0 (see official documentation for more information).

PRESENCE module

  • New E_PRESENCE_EXPOSED event that can be triggered over the MI interface and simulates the receiving of a PUBLISH message (see documentation);

PROTO HEP module

  • be able to define hep destinations ( called hep ids ) that will be used by other modules;
  • message payloads are now encapsulated using JSON format;
  • new extra_correlation chunk used for correlating different types of messages( such as sip with xlog or rest, or transport messages with sip messages);

PROTO TCP module

  • enable tracing for TCP connection events ( information about all accepted and created connections and information concerning closed connections );
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new tcp_trace mi function to control tracing ( on/off switch );

PROTO TLS module

  • enable tracing for TLS connection events ( trace certificate info, master key along with information about all accepted and created connections and information concerning closed connections);
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new tls_trace mi function to control tracing ( on/off switch );

PROTO WS module

  • enable tracing for WS connection events ( http request and reply used in web socket handshake along with information about all accepted and created connections and information concerning closed connections);
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new ws_trace mi function to control tracing ( on/off switch );

PROTO WSS module

  • enable tracing for WSS connection events ( http request and reply used in web socket handshake, certificate info, master key along with information about all accepted and created connections and information concerning closed connections);
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new wss_trace mi function to control tracing ( on/off switch );

Registrar module

  • the obsolete functions registered() and is_other_contact() finally removed. You should we their replacements 'is_registered() and is_ip_registered().

REST client module

  • Connection reusage support added for all synchronous requests (see commit 79d02f379
  • new connect_poll_interval module parameter - Allows complete control over how quickly we want to detect libcurl's completed TCP handshakes.
  • new max_async_transfers module parameter - Maximum number of asynchronous HTTP transfers a single OpenSIPS worker is allowed to run simultaneously.
  • new rest_put() script function, including async support (see commit c4807008b)
  • ability to trace HTTP traffic using the sip_trace() function from siptrace module

RTPProxy module

  • add support to specify RTPProxy to record both streams in a single file;
  • add support for the latest notification mechanism in the RTPProxy master branch;
  • add new rtpproxy_stats command that returns statistics about the call, such as packet loss, messages received from each side, etc.;
  • add new rtpproxy_all_stats command that returns advanced statistics about the call, such as SSRC changes. This is only available in the RTPProxy master branch.
  • add support for mangling RTP session TTL for both caller and callee.

RTPEngine module

  • pass the flags from the rtpengine_offer/answer() functions to rtpengine, even though they are not known by OpenSIPS - loose the flags check restrictions to relax integration with further extensions.
  • add new sock_pvar parameter to all rtpengine_* functions that can be used to return the rtpengine socket used for that call;
  • add new sdp_pvar parameter to rtpengine_offer/answer/manage() functions that will store the SDP returned by rtpengine - Note that if you store the SDP body in a pvar, it will not be reflected in the outgoing message automatically, you will have to do it manually.
  • added new teardown MI command as alias to dlg_end_dlg from dialog module

SIPMSGOPS module

  • following the work on the multi-part body support, the following functions has changed in the module:
    • old filter_body() and strip_body() functions merged under the new remove_body_part() function
    • old has_body() function (not yet removed) is replaced by the new has_body_part() function
    • old add_body() function removed and replaced by the new add_body_part() function

SIPTRACE module

  • use hep ids defined in proto_hep instead of defining the hep ids in siptrace using trace_id module parameter;
  • allow tracing multiple types of events(xlog messages, rest HTTP requests and replies) using sip_trace function;

STATISTICS module

  • add support for statistic groups and easy iteration over them in the OpenSIPS script. New control module parameters:
    • stat_groups - define the statistic groups before startup
    • stat_iter_init() - begin iteration over the statistics contained within a group
    • stat_iter_next() - fetch the current statistic, move on to the next one if possible
  • allow stats to be updated via variables - the update_stat() function accepts variables for passing the update value.

TOPOLOGY HIDING module

  • new D flag of the topology_hiding() function forces the insertion of the dialog ID (DID) into the Contact Username, rather than Contact URI parameters (as before).

TM module

  • Added support for dynamic branch manipulation - new functions were added to allow remote injecting of new branches into an ongoing transaction:
    • t_inject_branches(source, flags) - injects new branches;
    • t_wait_for_new_branches() - instruct the transaction to wait more (even if all current branches are completed) for possible new branch injections.
  • new script variable $T_id to expose the transaction internal ID as an opaque hexa string.
  • new t_add_cancel_reason() script function to allow the insertion of a custom Reason header into a CANCEL request.

TLS MGM module

  • support for the latest OpenSSL library version 1.1.0;
  • for all module parameters accepting a TLS domain ID in their value, the syntax was changed : "tls_dom:value" was replaced with "[tls_dom]value", to avoid any conflicts between the separator and the actual value.
  • 'full DB support added - instead of storing in DB the file path for certificate, private key, CA list and DH params, the DB holds the actual data (as BLOB). So, the TLS configuration is 100% DB driven, no files needed any more.

USRLOC module

  • The E_UL_CONTACT_INSERT, E_UL_CONTACT_UPDATE and E_UL_CONTACT_DELETE events have now more attributes (full set to describe the contact):
    • path string
    • q value
    • socket description
    • branch flags
    • expires
    • uri as former "address"
  • when listing contact records via MI command, the Contact ID is also printed (this helps with correlating the in-memory records with the DB records)
to:
  • TBA
March 16, 2017, at 06:25 PM by ionutionita92 -
Added line 43:
Added line 48:
March 16, 2017, at 06:24 PM by ionutionita92 -
Changed lines 6-7 from:
to:
Changed lines 13-20 from:
  • 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)
to:
  • support for armv6 and armv7 locking
  • support for fast-locks on mips and mips64el architectures
  • support for native umutex in freebsd
  • added a new statistic for the SHM memory groups that prints the maximum memory used of a group
  • added content-aware body (multi-part) changing - this allows parsing and modification of the body via the "body parts" list; parts can be modified (with function or lumps), can be deleted and new ones can be added. Any type of modification (and any of them) is allowed. The body is completely rebuild based on the resulting list of body parts. Also we support transparent transitions from no body to body, single part body to multi-part body or the other way around - with automatic update of the Content-Type and Content-Len headers, of course.
  • major rework of body and SDP parsing - unified and consistent way of parsing and accessing the body parts (single or multi part body). This results in a transparent way of parsing and freeing the parts content (like SDP or ISUP).
  • address potential starvation for the timer tasks - even if the timer tasks have priority in the asyns reactor (for being handled), if all the worker processes are already busy in handling some SIP tasks which takes too long, may lead into a starvation of the timer tasks. For the moment we address this by creating a extra worker processes (similar to the SIP workers) which is dedicated to executing the timer tasks. Still, based on their availability and load, the SIP workers are able to consume timer tasks.
  • added the first basic version of an IPC support - this is an internal mechanism that allows any process to pass a job to another process. the IPC support is internally used by the Event Routing module and by the TCP stack. In the next version, more custom existing inter-process communication will be migrated to this generic IPC support. Also, the IPC mechanism opens new possibilities when comes to improvements or creation of new features.
Changed lines 26-43 from:
  • 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:
    • {s.width} - truncates or expands the input to the given len
    • {s.b64encode} - represents binary input data into ASCII
    • {s.b64decode} - decodes Base64 input
    • {s.xor} - encodes the input by XOR'ing with a key
    • {s.trim}, {s.triml}, {s.trimr} - string trimming 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.
to:
  • new $xlog_level core pseudo-variable that prints the level of message printed at syslog
  • new custom index append for $avp variables to allow you to add new values at the end of the list (at the bottom of the stack) - $(avp(name)[append]) = "last value";
  • $rb can now take as name a mime, in order to access the body parts by mime : $rb(application/sdp) - get the first SDP body part ; $(rb(application/isup)[-1]) - get the last ISUP body part
  • the the xlog messages include now the time and process ID when printing to stderr (to be consistent with the syslog logging)

Async layer

  • new launch() statement to starts a function/job in async mode and continue the script immediately, without waiting for the job to be terminated. A "report" route may be triggered (outside the context of the msg launching the job) when the job is terminated to be able to access the return code and the possible returned data. See for more.
  • new internal (non-scripting) support for async I/O operations - internal functions can register FDs into the reactor in order to be triggered when data is available (and run a handler). For example this is internally used by the cgrates module in order to handle its communication with the external cgrates engine
  • enhanced the ASYNC API to allows resume via non-FD events (outside I/O reactor scope) ; The resume/suspect logic is reused, but the waiting and triggering can now by done via other means (like event based) rather than being I/O reactor based.

OpenSIPS Enhanced tracing

Starting with this versions multiple events can be traced, other than sip packets. There are two types of events:

  • events that take place when a certain type of SIP packet is processed, events happening in a '''sip context that can be controlled using siptrace module;
  • events that don't take place in a sip context that are controlled directly via proto_hep module;

At the moment, OpenSIPS 2.4 supports tracing for the following sip context events:

  • xlog messages;
  • rest_client module queries ( requests and replies );

These events are controlled via sip_trace function which was enhanced with a new parameter through which one can specify which of these events shall be traced. All these events will be traced in the sip context that is given to the function, that is if rest tracing is activated for a dialog, all rest requests and replies that will occur for that dialog shall be traced. The following non sip events can be traced:

  • transport layer events( currently available for TCP, TLS, WS and WSS transport layers;
  • mi commands ( all mi protocols are available );

For these types of events the hep ids defined directly in proto_hep module, since there is no sip context( see mi_fifo exmaple). For the mi commands there is the posibilty to define blacklists or whitlists of commands to be traced in order to avoid tracing commands that are not useful( see mi_fifo example ). For transport layer protocols the unit we are working with is a connection. All protocol events such as connect or accept events, connection closed events for TCP, certificate information and master key for TLS and WSS and http request and reply used during the handshake for WS and WSS. Tracing can be activated via MI ( WSS example ) and the connections that will be traced can be controlled via a filter route in which users will ses source and destination IPs and ports for that connection ( WSS example ).

Changed lines 55-96 from:
  • 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
BIN Interface

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.4 is not backward compatible !

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.

DB_SQLITE module (new)

New DB module to provides SQLite backend support for OpenSIPS.

PROTO_BIN module (new)

OpenSIPS 2.4 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

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.

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.

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

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.

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

to:

CGRATES module (new)

  • the cgrates module provides an interface to the CGRateS rating eninge. Using this module you can do multi-tenant prepaid and postpaid billing in the OpenSIPS script. Read more information here.

EVENT ROUTING module (new)

  • The Event (based) Routing module, or shortly the EBR module, provides a mechanism that allows different SIP processings (of messages in script) to communicate and synchronize between through OpenSIPS Events.
  • This mechanism is based on the Subscribe-Notify concept. Any SIP processing may subscribe to various OpenSIPS Events Upon Event raising, the subscriber will be notified, so it will be able to make use of the data attached to the Event. Note that the Event raising may take place in a completely different SIP processing context, completely unrelated to the subscriber processing.
  • The EBR support allows implementation of more advanced SIP scenarios like Push Notification or Call Pickup

FREESWITCH module (new)

  • the freeswitch module acts as a connection manager for FreeSWITCH Event Socket Layer sockets. It currently provides dynamic statistics from FreeSWITCH in order to update routing behavior for the dispatcher and load_balancer modules.

SIP_I module (new)

  • the SIP-I module provides SIP-I to SIP gatewaying and ISUP awarness by offering the possibility of processing ISDN User Part(ISUP) messages encapsulated in SIP. The available operations are: reading and modifying parameters from an ISUP message, removing or adding new optional parameters, adding an ISUP part to a SIP message body. This is done explicitly via script variables and functions. The supported ISUP message types are only the ones that can be included in a SIP message according to the SIP-I(SIP with encapsulated ISUP) protocol defined by ITU-T.

MID_REGISTRAR module (new)

  • the mid_registrar enables a series of scenarios in which OpenSIPS acts as a SIP registration front-end. This novel SIP platform component is able to throttle down SIP registration traffic rates on the way to existing farms of SIP registrars, by extending contact expiration intervals. Moreover, it can also be configured to take over all parallel forking duties for these existing SIP infrastructures.

RABBITMQ module (new)

  • a new RabbitMQ module provides a more flexible and easy to use interface to a RabbitMQ server. Check out more!

XML module (new)

  • the XML module allows the processing of XML documents from the script by exposing a variable that provides access to the elements and their contents and attributes. In this way you can modify, add or remove nodes in the XML tree.
Changed lines 82-139 from:
  • 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

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.

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.

B2B_ENTITIES module

  • fixed the handling for nested requests by properly implementing "491 Pending" support.

B2B_SCA

  • the parameter table_name moved to default value b2b_sca (from sca)

CACHEDB_REDIS

  • 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.

CFGUTILS module

  • new asynchronous sleep() and usleep() functions. OpenSIPS will not block anymore while performing a sleep operation.

CPL-C module

  • module is renamed to cpl_c without any additional changes.

DB_MYSQL

  • 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.

DB_POSTGRES

  • new parameter max_db_queries to define how many time a DB query should be retried.

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.

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).

DIALPLAN module

  • new dp_show_partiton MI command to list all the details on the defined partitions.

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

DB_TEXT module

  • new dbt_reload MI command - causes db_text module to reload cached tables from disk.

DB_VIRTUAL module

  • added async raw query support
to:
  • diameter support has been removed;
  • extra variables engine was reworked(including both extra and leg engine); *_extra and *_extra_bye parameters have been replaced with extra_fields with which you can define tags to be used in the script using acc_extra script variable; the variable can be set/modified until the accounting is being made;
  • leg variables engine was also reworked; now you can define leg variables for each of the available backends(log, db, aaa, evi); the modparam section is the same as for the extra_fields parameter whereas in the script you can use acc_leg variable to set the leg values; the variable can be indexed with the index of the leg; it accepts both positive index(0 is the first leg) and negative indexes(-1 is the last leg);
  • the leg accounting engine is not based anymore on AVPs; each time you want to create a new leg you have to call acc_new_leg function which will create a new leg for you; the value of the last leg shall be accessed with acc_current_leg variable;
  • for further information read the docs

Call Center module

  • new queue_pos_param module paramter to report the queue position - the parameter value is the name of an SIP URI parameter to be used to report the position in the waiting queue when sending the call to media server for onwait/queue playback. The position 0 means it is the next call to be delivered to an agent.

Clusterer module

  • the module was reworked and enhanced in order to provide a better node availability detection mechanism and inter-cluster routing of BIN messages (if the link between nodes A and B is down the message might be routed through node C). As there were no explicit probes at the clusterer module level, an active pinging mechanism was introduced which establishes the state of the connections of the current node with other nodes in the cluster at BIN interface level. Based on this, a link-state resembling protocol was implemented in order to learn the cluster topology and compute a routing 'table' used for sending BIN messages between nodes. Also the possibility of adding new nodes to the cluster without additional provisioning for the existing components was introduced.
  • new module parameters for tweaking the probing mechanism:
    • ping_interval - the interval in seconds between regular pings sent to a neighbour node
    • ping_timeout - the time in milliseconds to wait for a reply to a previously sent ping before retrying or considering the link with the neighbour node down. This is also the interval between successive retries if the send fails.
    • node_timeout - the time in seconds to wait before pinging is restarted for a failed node
  • the module's *_col parameters were changed to reflect the modified DB column names
  • the MI command clusterer_list now lists information about the other nodes in the cluster from the current node's perspective
  • new MI command clusterer_list_topology that lists the cluster's topology from the current node's perspective as an adjacency list
  • for further information read the module documentation

DB MYSQL module

  • new tls_client_domain module parameter - Quickly enable TLS usage for a given MySQL backend

Dialog module

  • the dlg_list and dlg_end_dlg MI commands are now also using (display and accept) the dialog ID as dialog identifier - this is a single unique numerical ID ; Still, the h_label and h_id are accepted as old way to identify the dialogs.
  • added new script function get_dialog_vals() for fetching all the values of a dialog found by callid string. The dialog values are returned as a parallel arrays of names and values.

Dispatcher module

  • the module now supports dynamically calculated weights for FreeSWITCH destinations! As such:
    • the weight column type is now "string", as it can hold either an integer weight or a FreeSWITCH ESL socket. However, OpenSIPS still retains internal backwards-compatibility with the previous schema
    • fetch_freeswitch_stats - enables the dynamic weight calculation engine
    • max_freeswitch_weight - control the maximum weight of a FreeSWITCH destination computed using its runtime resource usage
  • the round-robin algorithm now supports weights - each destination is chosen until its count reaches the weight, and only then moves to a different destination.
  • new module parameter ds_ping_maxfwd - this parameter allows you to set a custom value for inserted Max-Forward header in the SIP ping requests generated by dispatcher module. If not used, it will let TM to add a default value.
Changed lines 118-149 from:
  • 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).

EMERGENCY module

  • added support for subscriber / notify functions.

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.

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

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.

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

  • 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

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.

NET_TCP module

  • tcp_accept_aliases is now by default set to on/enabled
to:
  • the do_routing() accepts now any kind of variable for the routing group parameter; previously this was limited to AVP variables.
  • added support for replicating the gateways and carrier status (upon changes) to other OpenSIPS nodes inside a cluster (using the clusterer module and BIN interface). New control parameters were added:
    • replicate_status_to - the cluster ID for replication pool
    • accept_replicated_status - the cluster ID for accepting incoming replication data

Cachedb_local module

  • in previous versions the module had only one "database"(one hash); now multiple such databases can be defined, each of these representing an unique collection having it's own set of keys and values;
  • the collections can be defined using cache_collections module parameter;
  • each collection should be assigned to a cachedb_url; same collection can be assign to multiple cachedb_urls;
  • for more information check the official documentation

Load Balancer module

  • the module now supports dynamically calculated max resource values for FreeSWITCH destinations! As such:
    • resources may also be provisioned with a FreeSWITCH ESL socket URL as "max value" apart from an integer, as shown here
    • fetch_freeswitch_stats - enables the runtime max resource value calculation engine
    • initial_freeswitch_load - the starting "max resource" value, until the first batch of statistics arrive from FreeSWITCH
  • preserve destination's status during reload - preserve the status (enabled or not) of the destinations during a data reload from DB.
  • more detailed return code for functions starting/continuing the LB process. In case of LB failure, the ret code may be:
    • -1 generic internal error
    • -2 no capacity left
    • -3 no available destinations
    • -4 bad resources
  • added support for replicating the destination status (upon changes) to other OpenSIPS nodes inside a cluster (using the clusterer module and BIN interface). New control parameters were added:
    • replicate_status_to - the cluster ID for replication pool
    • accept_replicated_status - the cluster ID for accepting incoming replication data

MI FIFO module

  • trace mi datagram requests
    • command
    • parameters
    • module name
  • and replies
    • code
    • reason
    • part of the reply message
  • see official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI HTTP module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI JSON module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI XMLRPC NG module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);

MI DATAGRAM module

  • trace mi datagram requests:
    • command;
    • parameters;
    • module name;
  • and replies:
    • code;
    • reason;
    • part of the reply message;
  • for more information check the official documentation;
  • add blacklists/whitelists for traced mi commands (see official documentation);
Changed lines 212-239 from:
  • 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()

PIKE module

  • new pike_rm MI command to unblock a detected IP address.

PROTO_TCP module

  • parameter tcp_async is now by default on !

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.

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.

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)

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

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.

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.
to:
  • Support for SUBSCRIBE/NOTIFY CNAM;
  • Updated for OSP Toolkit 4.12.0 (see official documentation for more information).

PRESENCE module

  • New E_PRESENCE_EXPOSED event that can be triggered over the MI interface and simulates the receiving of a PUBLISH message (see documentation);

PROTO HEP module

  • be able to define hep destinations ( called hep ids ) that will be used by other modules;
  • message payloads are now encapsulated using JSON format;
  • new extra_correlation chunk used for correlating different types of messages( such as sip with xlog or rest, or transport messages with sip messages);

PROTO TCP module

  • enable tracing for TCP connection events ( information about all accepted and created connections and information concerning closed connections );
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new tcp_trace mi function to control tracing ( on/off switch );

PROTO TLS module

  • enable tracing for TLS connection events ( trace certificate info, master key along with information about all accepted and created connections and information concerning closed connections);
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new tls_trace mi function to control tracing ( on/off switch );

PROTO WS module

  • enable tracing for WS connection events ( http request and reply used in web socket handshake along with information about all accepted and created connections and information concerning closed connections);
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new ws_trace mi function to control tracing ( on/off switch );

PROTO WSS module

  • enable tracing for WSS connection events ( http request and reply used in web socket handshake, certificate info, master key along with information about all accepted and created connections and information concerning closed connections);
  • new trace_destination module parameter to define tracing destination;
  • new trace_on module parameter to set tracing on and off at startup;
  • new trace_filter_route module parameter to define a route which can be used for filtering traced connections;
  • new wss_trace mi function to control tracing ( on/off switch );

Registrar module

  • the obsolete functions registered() and is_other_contact() finally removed. You should we their replacements 'is_registered() and is_ip_registered().

REST client module

  • Connection reusage support added for all synchronous requests (see commit 79d02f379
  • new connect_poll_interval module parameter - Allows complete control over how quickly we want to detect libcurl's completed TCP handshakes.
  • new max_async_transfers module parameter - Maximum number of asynchronous HTTP transfers a single OpenSIPS worker is allowed to run simultaneously.
  • new rest_put() script function, including async support (see commit c4807008b)
  • ability to trace HTTP traffic using the sip_trace() function from siptrace module

RTPProxy module

  • add support to specify RTPProxy to record both streams in a single file;
  • add support for the latest notification mechanism in the RTPProxy master branch;
  • add new rtpproxy_stats command that returns statistics about the call, such as packet loss, messages received from each side, etc.;
  • add new rtpproxy_all_stats command that returns advanced statistics about the call, such as SSRC changes. This is only available in the RTPProxy master branch.
  • add support for mangling RTP session TTL for both caller and callee.

RTPEngine module

  • pass the flags from the rtpengine_offer/answer() functions to rtpengine, even though they are not known by OpenSIPS - loose the flags check restrictions to relax integration with further extensions.
  • add new sock_pvar parameter to all rtpengine_* functions that can be used to return the rtpengine socket used for that call;
  • add new sdp_pvar parameter to rtpengine_offer/answer/manage() functions that will store the SDP returned by rtpengine - Note that if you store the SDP body in a pvar, it will not be reflected in the outgoing message automatically, you will have to do it manually.
  • added new teardown MI command as alias to dlg_end_dlg from dialog module

SIPMSGOPS module

  • following the work on the multi-part body support, the following functions has changed in the module:
    • old filter_body() and strip_body() functions merged under the new remove_body_part() function
    • old has_body() function (not yet removed) is replaced by the new has_body_part() function
    • old add_body() function removed and replaced by the new add_body_part() function
Changed lines 285-297 from:
  • 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;

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;
to:
  • use hep ids defined in proto_hep instead of defining the hep ids in siptrace using trace_id module parameter;
  • allow tracing multiple types of events(xlog messages, rest HTTP requests and replies) using sip_trace function;

STATISTICS module

  • add support for statistic groups and easy iteration over them in the OpenSIPS script. New control module parameters:
    • stat_groups - define the statistic groups before startup
    • stat_iter_init() - begin iteration over the statistics contained within a group
    • stat_iter_next() - fetch the current statistic, move on to the next one if possible
  • allow stats to be updated via variables - the update_stat() function accepts variables for passing the update value.

TOPOLOGY HIDING module

  • new D flag of the topology_hiding() function forces the insertion of the dialog ID (DID) into the Contact Username, rather than Contact URI parameters (as before).
Changed lines 299-308 from:
  • 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).

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.

UAC module

  • CSEQ is properly increased during the authentication process.
to:
  • Added support for dynamic branch manipulation - new functions were added to allow remote injecting of new branches into an ongoing transaction:
    • t_inject_branches(source, flags) - injects new branches;
    • t_wait_for_new_branches() - instruct the transaction to wait more (even if all current branches are completed) for possible new branch injections.
  • new script variable $T_id to expose the transaction internal ID as an opaque hexa string.
  • new t_add_cancel_reason() script function to allow the insertion of a custom Reason header into a CANCEL request.

TLS MGM module

  • support for the latest OpenSSL library version 1.1.0;
  • for all module parameters accepting a TLS domain ID in their value, the syntax was changed : "tls_dom:value" was replaced with "[tls_dom]value", to avoid any conflicts between the separator and the actual value.
  • 'full DB support added - instead of storing in DB the file path for certificate, private key, CA list and DH params, the DB holds the actual data (as BLOB). So, the TLS configuration is 100% DB driven, no files needed any more.
Changed lines 313-320 from:
  • 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.

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

to:
  • The E_UL_CONTACT_INSERT, E_UL_CONTACT_UPDATE and E_UL_CONTACT_DELETE events have now more attributes (full set to describe the contact):
    • path string
    • q value
    • socket description
    • branch flags
    • expires
    • uri as former "address"
  • when listing contact records via MI command, the Contact ID is also printed (this helps with correlating the in-memory records with the DB records)

March 31, 2016, at 09:38 AM by 85.204.8.247 -
Added lines 52-54:

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.
Deleted lines 107-109:

CLUSTERER module

  • 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.
March 31, 2016, at 09:28 AM by 85.204.8.247 -
Changed line 107 from:
  • The new clusterer allows you to group multiple OpenSIPS nodes in a cluster in order to share the same information in your entire platform.
to:
  • 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.
March 31, 2016, at 09:24 AM by 85.204.8.247 -
Changed lines 64-66 from:
to:

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.

Added lines 189-191:

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.
Deleted lines 236-238:

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.
March 31, 2016, at 12:09 AM by 109.102.83.252 -
Changed line 170 from:

NET_TCP module

to:

NET_TCP module

Added lines 182-185:

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.
March 31, 2016, at 12:02 AM by 109.102.83.252 -
Added lines 169-171:

NET_TCP module

  • tcp_accept_aliases is now by default set to on/enabled
March 30, 2016, at 11:48 PM by 109.102.83.252 -
Added lines 144-145:

EMERGENCY module

  • added support for subscriber / notify functions.
March 30, 2016, at 11:44 PM by 109.102.83.252 -
Added lines 125-127:

DIALPLAN module

  • new dp_show_partiton MI command to list all the details on the defined partitions.
March 30, 2016, at 11:16 PM by 109.102.83.252 -
Added lines 69-71:

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.

March 30, 2016, at 11:12 PM by 109.102.83.252 -
Added line 38:
  • new xlog_default_level parameter to configure the default logging level for all xlog() prints.
March 30, 2016, at 11:08 PM by 109.102.83.252 -
Added lines 105-108:

DB_MYSQL

  • 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.
March 30, 2016, at 11:05 PM by 109.102.83.252 -
Added lines 105-107:

DB_POSTGRES

  • new parameter max_db_queries to define how many time a DB query should be retried.
March 30, 2016, at 04:00 PM by 85.204.8.247 -
Added lines 209-211:

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.
March 30, 2016, at 01:11 PM by 85.204.8.247 -
Added lines 94-96:

CACHEDB_REDIS

  • 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.
Changed line 209 from:

to:

March 30, 2016, at 10:42 AM by 109.102.83.252 -
Changed lines 19-20 from:
  • 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.
to:
Changed line 40 from:
  • add support for debugging locks (-DDBG_LOCK)
to:
  • 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.
Deleted lines 206-239:

Devel Plan 2.4 release (TODO list)

ImportanceModuleDescription
xxxxTMeven if decide to "go stateful" very early in your script (via t_newtran), all changes you do later over the request (in request route, branch route, failure route) must be updated/pushed into transaction and remembered at later processing
xxxDIALOGNew events for dialog matched, terminated, etc
xxxDIALOGcontrol profiles/variables DB storage - specify whether we want to ever dump the profies/variables in the DB or only on shutdown. Rethink the current design to see if is the best.
xxxUSRLOCdistributed storage via a NoSQL DB
xxxDIALOGdistributed storage via a NoSQL DB
xxxDIALOGbe able to end all dialogs belonging to a certain profile (MI only)
xxxSIPCAPTURETCP support
xxxRTPProxyadd ICE support for rtpproxy
xxxEvent Interfaceadd ZeroMQ support for Event Interface
xxxcoresend function (including from TM) should return a dedicated ret code to indicate network errors (failure in sending)
xxxcorefix insert_new_lump()/append_new_lump() logic throughout lumps_len()
xxxcoreonce fixed, replace all single anchor_lump()+insert_new_lump_{before,after}() calls with the simpler insert_new_lump() call
xxxnewIntegrate OpenSIPS with libpurple library for IM and Presence
xxTLS coreadd an internal API for TLS management to allow registration of certificates ; a new module to allow TLS certificates provisioning via DB (per domain, per IP, etc)
xxDROUTINGAllow the option to call do_routing with a particular number, but to propagate downstream a different number ( useful for number portability scenarios )
xxTMallow dynamic number of branches per transaction (on demand)
xxStatistics Interfacereplace the BIG LOCK (if other arch than i386) with multiple shared locks (to protect the values)
xxnewnew cachedb_virtual modules, similar to db_virtual, but for NoSQL databases
xxdb_virtualOpensips should be able to start even if db_virtual was not able to connect to all databases. So long as it can connect to at least 1 it should still work
xxB2BSupport for attended transfers on B2BUA
xxevent_datagramInstead of pushing events in text/plan format, to have also the options to pack the event in a json format -> easier to parse by the receiver
xxnewsupport for RFC5626 - Managing Client-Initiated Connections in SIP
xnewnew module mi_stream to provide MI interaction via connection oriented links (TCP or fifo)
xnewRFC6140 Registration for Multiple Phone Numbers
xAVPOPSRegexp based filter for avp_db_load - what AVPs to be loaded
xcoreBe able to specify multiple keys with the "cache_fetch" MI command
xcoreHandle OpenSIPS variable expansion within the format string of assert()
xscriptConsider implementing the "continue" and "break" keywords inside while and for-each
xcachedb coreAllow results to be written in any PV (not just $avp)
xscriptInteger operators: make "+=" and "-=" work!
March 30, 2016, at 10:40 AM by liviu -
Changed line 14 from:
  • debug MI command renamed to log_level (same functionality, input and output)
to:
  • debug MI command was renamed to log_level (same functionality, input and output)
Changed line 22 from:
  • debug global parameter renamed to log_level global parameter (same behavior and values)
to:
  • debug global parameter was renamed to log_level global parameter (same behavior and values)
Changed line 143 from:
  • mi_xmlrpc_ng_root module parameter renamed as http_root
to:
  • mi_xmlrpc_ng_root module parameter was renamed to http_root
March 30, 2016, at 10:33 AM by 85.204.8.247 -
Added lines 96-98:

CLUSTERER module

  • The new clusterer allows you to group multiple OpenSIPS nodes in a cluster in order to share the same information in your entire platform.
March 29, 2016, at 11:56 PM by 109.102.83.252 -
Changed line 159 from:
  • 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 : accept_pipes_timeout(the time between two successive incoming packets) and repl_pipes_auth_check (ip authentication check for incoming packets)
to:
  • 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)
March 29, 2016, at 11:42 PM by 109.102.83.252 -
Added lines 157-159:

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 : accept_pipes_timeout(the time between two successive incoming packets) and repl_pipes_auth_check (ip authentication check for incoming packets)
March 29, 2016, at 11:36 PM by 109.102.83.252 -
Deleted line 105:
March 29, 2016, at 11:36 PM by 109.102.83.252 -
Changed line 105 from:
  • 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).
to:
  • 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)
March 29, 2016, at 11:24 PM by 109.102.83.252 -
Added line 105:
  • 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).
March 29, 2016, at 11:12 PM by 109.102.83.252 -
Added line 19:
  • 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.
March 29, 2016, at 11:06 PM by 109.102.83.252 -
Added lines 187-189:

UAC module

  • CSEQ is properly increased during the authentication process.
March 29, 2016, at 10:52 PM by 109.102.83.252 -
Added line 192:
  • 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.
March 29, 2016, at 02:19 PM by 109.102.83.252 -
Changed lines 176-177 from:
  • 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 posibility 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;

to:
  • 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;
March 29, 2016, at 12:45 PM by ionutionita92 -
Changed lines 75-76 from:
  • all flags used for accounting have been removed and replaced with do_accounting() and drop_accounting() functions - read more in the official announcement
to:
  • 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
Changed lines 167-168 from:
  • New module design - all the flags and parameters for different types of tracing have now been replaced with only one parameter called trace_id
to:
  • 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;
Changed lines 173-176 from:
  • improved hep support - uses proto_hep module to provide support for all hep protocols
  • hep_route - parameter which defines a special route through which hep related messages should go
  • hep_proxy - posibilty to route hep packets the same way sip messages are routed
  • hep chunk manipulation - posibility to add, remove and modify hep chunks for hep version 3
to:
  • 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 posibility 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;
March 29, 2016, at 11:32 AM by ionutionita92 -
March 28, 2016, at 11:18 PM by 109.102.83.252 -
Added line 36:
  • 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.
March 28, 2016, at 11:04 PM by 109.102.83.252 -
Changed line 73 from:
  • 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
to:
  • 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
March 28, 2016, at 11:00 PM by 109.102.83.252 -
Changed lines 100-101 from:
  • added Re-INVITE in-dialog pinging support
to:
  • 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 ).
March 28, 2016, at 10:51 PM by 109.102.83.252 -
Added lines 48-50:

DB_SQLITE module (new)

New DB module to provides SQLite backend support for OpenSIPS.

March 28, 2016, at 10:49 PM by 109.102.83.252 -
Added lines 55-58:

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.

Deleted lines 145-147:

PROTO_HEP module

  • provides support for all hep protocols - HEPv1/2 and HEPv3
March 28, 2016, at 10:40 PM by 109.102.83.252 -
Added line 35:
  • new $cfg_file, $cfg_line script variables to return the name of the config file and the line inside the file.
March 28, 2016, at 10:27 PM by 109.102.83.252 -
Changed lines 17-18 from:
  • memory dump via SIGUSR1 is now possible when also using the HP_MALLOC or F_MALLOC memory managers
to:
  • 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)
March 28, 2016, at 10:25 PM by 109.102.83.252 -
Added line 17:
  • memory dump via SIGUSR1 is now possible when also using the HP_MALLOC or F_MALLOC memory managers
March 28, 2016, at 10:23 PM by 109.102.83.252 -
Changed line 90 from:
  • added Re-INVITE in-dialog pinging support - TBD
to:
  • added Re-INVITE in-dialog pinging support
March 28, 2016, at 09:52 PM by 109.102.83.252 -
Added lines 75-78:

B2B_SCA

  • the parameter table_name moved to default value b2b_sca (from sca)
March 28, 2016, at 09:51 PM by liviu -
Changed line 30 from:
  • ViM syntax highlighting for OpenSIPS 2.4+ config script
to:
  • ViM syntax highlighting for OpenSIPS config script
March 28, 2016, at 09:50 PM by liviu -
Changed line 30 from:
  • ViM syntax highlighting for OpenSIPS config script
to:
  • ViM syntax highlighting for OpenSIPS 2.4+ config script
March 28, 2016, at 07:02 PM by liviu -
Changed line 22 from:
  • script flags and functions have been removed (simplicity reasons, logic can be rewritten)
to:
  • script flags and functions have been removed
March 28, 2016, at 07:01 PM by liviu -
Changed line 22 from:
  • script flags and functions have been removed for simplicity reasons
to:
  • script flags and functions have been removed (simplicity reasons, logic can be rewritten)
March 28, 2016, at 07:00 PM by liviu -
Added line 22:
  • script flags and functions have been removed for simplicity reasons
March 28, 2016, at 06:57 PM by liviu -
Changed line 40 from:
  • logging improvements on out-of-memory errors, DB errors, parsing errors, memory logging
to:
  • logging improvements on out-of-memory errors, DB errors, TCP errors, parsing errors, memory logging
March 28, 2016, at 06:56 PM by liviu -
Changed line 16 from:
  • auto-correction of timer drifting - correlate and keep in sync the internal timer with the OS timer
to:
  • auto-correction of timer drifting - correlate and keep the internal timer in sync with the OS timer
March 28, 2016, at 06:53 PM by liviu -
Changed line 40 from:
  • improvements to: out-of-memory errors, DB errors, parsing errors, memory logging
to:
  • logging improvements on out-of-memory errors, DB errors, parsing errors, memory logging
March 28, 2016, at 06:50 PM by liviu -
Changed line 40 from:
  • error reporting improvements: out-of-memory errors, DB errors, parsing errors, etc.
to:
  • improvements to: out-of-memory errors, DB errors, parsing errors, memory logging
March 28, 2016, at 06:49 PM by liviu -
Added line 40:
  • error reporting improvements: out-of-memory errors, DB errors, parsing errors, etc.
March 28, 2016, at 06:43 PM by liviu -
Added lines 95-97:

DB_VIRTUAL module

  • added async raw query support
March 28, 2016, at 06:34 PM by liviu -
Added line 91:
  • the partitions parameter can now be given as a multi-line string
March 28, 2016, at 06:30 PM by liviu -
Changed line 36 from:
  * three allocators: F_MALLOC, QM_MALLOC, HP_MALLOC. Any of them can be run in troubleshooting mode with -DDBG_MALLOC. (although we recommend only doing this with QM_MALLOC)
to:
  * three allocators: F_MALLOC, QM_MALLOC, HP_MALLOC. Any of them can be run in troubleshooting mode with -DDBG_MALLOC
March 28, 2016, at 06:28 PM by liviu -
Added lines 35-39:
  • overall allocator rework
    • three allocators: F_MALLOC, QM_MALLOC, HP_MALLOC. Any of them can be run in troubleshooting mode with -DDBG_MALLOC. (although we recommend only doing this with QM_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)
March 28, 2016, at 06:22 PM by liviu -
Changed line 47 from:

The amount OpenSIPS script code required in order to use it 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.\\

to:

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.\\

March 28, 2016, at 06:21 PM by liviu -
Changed line 47 from:

The amount OpenSIPS script code required in order to use it 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.

to:

The amount OpenSIPS script code required in order to use it 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.\\

March 28, 2016, at 06:20 PM by liviu -
Deleted lines 48-52:

OpenSIPS 2.4 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

March 28, 2016, at 06:20 PM by liviu -
Added lines 40-49:

OpenSIPS 2.4 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

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 script code required in order to use it 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

March 28, 2016, at 06:03 PM by liviu -
Changed line 33 from:

OpenSIPS testing / development

to:

OpenSIPS troubleshooting / development

March 28, 2016, at 06:02 PM by liviu -
Added lines 32-34:

OpenSIPS testing / development

  • add support for debugging locks (-DDBG_LOCK)
March 28, 2016, at 05:58 PM by liviu -
Added line 28:
  * {s.trim}, {s.triml}, {s.trimr} - string trimming transformations
March 28, 2016, at 05:56 PM by liviu -
Added line 30:
  • for-each statement: add support for $json iterators
March 28, 2016, at 05:52 PM by liviu -
Added line 28:
  • ViM syntax highlighting for OpenSIPS config script
March 28, 2016, at 05:42 PM by liviu -
Changed lines 23-27 from:
  • '''new string transformations:
    • {s.width}''' - truncates or expands the input to the given len
    • {s.b64encode}''' - represents binary input data into ASCII
    • {s.b64decode}''' - decodes Base64 input
    • {s.xor}''' - encodes the input by XOR'ing with a key
to:
  • new string transformations:
    • {s.width} - truncates or expands the input to the given len
    • {s.b64encode} - represents binary input data into ASCII
    • {s.b64decode} - decodes Base64 input
    • {s.xor} - encodes the input by XOR'ing with a key
March 28, 2016, at 05:42 PM by liviu -
Changed lines 23-27 from:
  • new string transformation: {s.width} - truncates or expands the input to the given len
to:
  • '''new string transformations:
    • {s.width}''' - truncates or expands the input to the given len
    • {s.b64encode}''' - represents binary input data into ASCII
    • {s.b64decode}''' - decodes Base64 input
    • {s.xor}''' - encodes the input by XOR'ing with a key
March 28, 2016, at 04:57 PM by liviu -
Added line 13:
  • default DB engine for MySQL was moved from MyISAM to InnoDB
Deleted lines 14-15:
  • default DB engine for MySQL was moved from MyISAM to InnoDB
  • 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
Added lines 23-24:
  • new string transformation: {s.width} - truncates or expands the input to the given len
  • 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
March 28, 2016, at 04:54 PM by liviu -
Changed lines 13-19 from:
  • new log_level global parameter to replace debug global parameter (same behavior and values)
  • new log_level MI command to replace debug MI command (save functionality, input and output)
  • new $log_level script variable to replace the setdebug() script function (save functionality and input)
  • new debug_mode parameter to replace the outdated fork parameter.
  • global parameters user/uid and group/gid were removed (use the command line options for these settings).
  • default DB engine for MySQL was moved from MyISAM to InnoDB.
  • 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.
to:
  • debug MI command renamed to log_level (same functionality, input and output)
  • default DB engine for MySQL was moved from MyISAM to InnoDB
  • 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
Changed lines 17-23 from:
  • auto-correction of timer drifting - correlate and keep in sync the internal timer with the OS timer.
to:
  • auto-correction of timer drifting - correlate and keep in sync the internal timer with the OS timer

OpenSIPS script

  • debug global parameter 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
  • global parameters user/uid and group/gid were removed (use the command line options for these settings)
March 28, 2016, at 04:02 PM by liviu -
Added lines 119-121:

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.
Changed line 180 from:
xscriptInteger operators: make "+=" and "-=" work!
to:
xscriptInteger operators: make "+=" and "-=" work!
March 28, 2016, at 12:24 PM by 78.97.93.96 -
Added line 21:
  • auto-correction of timer drifting - correlate and keep in sync the internal timer with the OS timer.
March 28, 2016, at 12:21 PM by 78.97.93.96 -
Added lines 98-101:

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()
March 28, 2016, at 12:02 PM by 78.97.93.96 -
Added lines 85-88:

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
March 28, 2016, at 11:53 AM by 78.97.93.96 -
Added line 130:
  • domain DB column is now by default NULL (to save DB space) versus empty string.
March 25, 2016, at 09:07 PM by 109.102.83.252 -
Added lines 100-102:

PROTO_TCP module

  • parameter tcp_async is now by default on !
March 25, 2016, at 09:04 PM by 109.102.83.252 -
Added lines 94-96:

PIKE module

  • new pike_rm MI command to unblock a detected IP address.
March 25, 2016, at 09:00 PM by 109.102.83.252 -
Added line 20:
  • when dns_try_ipv6 is set, try to resolve first as IPv6 (AAA record) instead of IPv4 (A record)
March 25, 2016, at 08:52 PM by 109.102.83.252 -
Added lines 48-50:

CFGUTILS module

  • new asynchronous sleep() and usleep() functions. OpenSIPS will not block anymore while performing a sleep operation.
March 25, 2016, at 08:47 PM by 109.102.83.252 -
Added line 19:
  • 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.
March 25, 2016, at 08:41 PM by 109.102.83.252 -
Added lines 68-69:
  • 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).
March 25, 2016, at 08:35 PM by 109.102.83.252 -
Added line 18:
  • default DB engine for MySQL was moved from MyISAM to InnoDB.
March 25, 2016, at 07:51 PM by 109.102.83.252 -
Changed lines 35-36 from:
  • all flags used for accounting have been removed and replaced with do_accounting() and drop_accounting() functions
to:
  • all flags used for accounting have been removed and replaced with do_accounting() and drop_accounting() functions - read more in the official announcement
Added lines 67-69:

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.
March 25, 2016, at 07:29 PM by 109.102.83.252 -
Added lines 49-51:

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.
March 25, 2016, at 07:26 PM by 109.102.83.252 -
Changed line 69 from:
  • new flag for lb_start() function to pick a random destinations with equal load, 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.
to:
  • 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.
March 25, 2016, at 07:21 PM by ionutionita92 -
Added lines 81-83:

PROTO_HEP module

  • provides support for all hep protocols - HEPv1/2 and HEPv3
Added lines 93-98:

SIPCAPTURE module

  • improved hep support - uses proto_hep module to provide support for all hep protocols
  • hep_route - parameter which defines a special route through which hep related messages should go
  • hep_proxy - posibilty to route hep packets the same way sip messages are routed
  • hep chunk manipulation - posibility to add, remove and modify hep chunks for hep version 3
Changed line 147 from:
xscriptInteger operators: make "+=" and "-=" work!
to:
xscriptInteger operators: make "+=" and "-=" work!
March 25, 2016, at 07:18 PM by 109.102.83.252 -
Deleted lines 72-73:
  • 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).
  • 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
Changed lines 74-76 from:
  • mi_xmlrpc_ng_format_version module parameter renamed as format_version
to:
  • 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
March 25, 2016, at 07:12 PM by 109.102.83.252 -
Added lines 75-76:
  • mi_xmlrpc_ng_root module parameter renamed as http_root
  • mi_xmlrpc_ng_format_version module parameter renamed as format_version
March 25, 2016, at 07:03 PM by ionutionita92 -
Changed lines 35-36 from:
to:
  • all flags used for accounting have been removed and replaced with do_accounting() and drop_accounting() functions
Added lines 84-86:

SIPTRACE module

  • New module design - all the flags and parameters for different types of tracing have now been replaced with only one parameter called trace_id
March 25, 2016, at 03:00 PM by 109.102.83.252 -
Changed line 12 from:

Logging (core)

to:

OpenSIPS core

Deleted lines 15-16:

Debugging (core)

Changed lines 17-18 from:

BIN Interface (core)

to:
  • global parameters user/uid and group/gid were removed (use the command line options for these settings).
BIN Interface
March 25, 2016, at 02:56 PM by 109.102.83.252 -
Added line 53:
  • new profile_end_dlgs MI command to terminate all the dialogs for a profile (a value may be also provided).
March 25, 2016, at 02:22 PM by 109.102.83.252 -
Added lines 40-42:

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.
March 25, 2016, at 01:41 PM by 109.102.83.252 -
Added line 53:
  • new parameter full to the ds_list MI command. This new optional parameter additionally print the weight, priority and description for the listed destinations.
March 25, 2016, at 01:19 PM by 109.102.83.252 -
Changed line 82 from:
  • 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.
to:
  • 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).
March 25, 2016, at 01:19 PM by 109.102.83.252 -
Added lines 82-83:
  • 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.
March 25, 2016, at 12:52 PM by 109.102.83.252 -
Added line 49:
  • allow unset_dlg_profile(profile,[value]) to be used from REQUEST route too.
March 25, 2016, at 12:33 PM by 109.102.83.252 -
Added lines 43-45:

CPL-C module

  • module is renamed to cpl_c without any additional changes.
March 25, 2016, at 12:30 PM by 109.102.83.252 -
Changed line 6 from:

Migration from 2.1.x to 2.4.0

to:
March 25, 2016, at 12:12 PM by 109.102.83.252 -
Added lines 36-39:

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.
March 25, 2016, at 11:31 AM by 109.102.83.252 -
Changed line 18 from:
to:
March 25, 2016, at 11:31 AM by 109.102.83.252 -
Added lines 16-18:

Debugging (core)

March 24, 2016, at 09:09 PM by 109.102.83.252 -
Added lines 11-15:

Logging (core)

  • new log_level global parameter to replace debug global parameter (same behavior and values)
  • new log_level MI command to replace debug MI command (save functionality, input and output)
  • new $log_level script variable to replace the setdebug() script function (save functionality and input)
March 24, 2016, at 08:27 PM by 109.102.83.252 -
Added lines 34-36:

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)
March 24, 2016, at 08:14 PM by 109.102.83.252 -
Added lines 61-62:

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.
March 24, 2016, at 07:52 PM by 109.102.83.252 -
Added lines 37-39:

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.
March 24, 2016, at 07:46 PM by 109.102.83.252 -
Added line 43:
  • 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.
March 24, 2016, at 07:42 PM by 109.102.83.252 -
Added line 46:
  • 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
March 24, 2016, at 07:39 PM by 109.102.83.252 -
Changed line 12 from:

BIN Interface

to:

BIN Interface (core)

Changed lines 27-30 from:
  • added millisecond precision for the duration of generated CDRs
to:
  • 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

B2B_ENTITIES module

  • fixed the handling for nested requests by properly implementing "491 Pending" support.
March 24, 2016, at 07:35 PM by 109.102.83.252 -
Added lines 44-46:

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.
Added lines 54-56:

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.
Deleted lines 59-61:

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.
October 14, 2015, at 12:16 PM by vladpaiu -
Added lines 26-31:

ACC module

  • added millisecond precision for the duration of generated CDRs

DIALOG module

  • added Re-INVITE in-dialog pinging support - TBD
Deleted line 65:
xxxxDIALOGre-INVITE based in-dialog pinging (with proper SDP handling)
September 25, 2015, at 03:13 PM by rvlad_patrascu -
Added lines 20-24:

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

September 22, 2015, at 05:06 PM by ionutionita92 -
Changed lines 46-48 from:
to:

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
September 08, 2015, at 05:14 PM by ionutionita92 -
Changed lines 44-45 from:
to:

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.
August 24, 2015, at 06:30 PM by 89.120.101.121 -
Added lines 12-14:

BIN Interface

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.4 is not backward compatible !

Changed lines 16-18 from:

OpenSIPS 2.4 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.

to:

OpenSIPS 2.4 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.\\

Deleted lines 19-22:

The old UDP transport support was dropped,

August 24, 2015, at 06:28 PM by 89.120.101.121 -
Added lines 11-20:

PROTO_BIN module (new)

OpenSIPS 2.4 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

The old UDP transport support was dropped,

August 24, 2015, at 06:21 PM by 89.120.101.121 -
Deleted lines 11-17:

LOAD BALANCER module

  • new flag for lb_start() function to pick a random destinations with equal load, 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.

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
Added lines 14-22:

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

LOAD BALANCER module

  • new flag for lb_start() function to pick a random destinations with equal load, 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.

MI_XMLRPC_NG

  • 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).
August 24, 2015, at 06:07 PM by 89.120.101.121 -
Changed lines 11-32 from:

REGISTRAR 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

Async authentification and accounting functions for RADIUS module

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.

Async ldap_search

ldap_search function is now async in version 2.4 . 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

Usrloc contact_id

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 for usrloc module 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.

to:

LOAD BALANCER module

  • new flag for lb_start() function to pick a random destinations with equal load, 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.

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

DB_TEXT module

  • new dbt_reload MI command - causes db_text module to reload cached tables from disk.

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

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.

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.
August 12, 2015, at 01:17 PM by ionutionita92 -
Added lines 23-35:

Usrloc contact_id

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 for usrloc module 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.

Deleted line 47:
xxxUSRLOCwhen db is updated based on timer, combine multiple deletes in a single query
Deleted line 56:
xxUSRLOCuse a single Primary Key (non SIP related) for DB ops
July 24, 2015, at 02:39 PM by ionutionita92 -
Added lines 19-22:

Async ldap_search

ldap_search function is now async in version 2.4 . 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

July 24, 2015, at 02:05 PM by ionutionita92 -
Changed lines 11-18 from:
to:

REGISTRAR 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

Async authentification and accounting functions for RADIUS module

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.

Deleted line 25:
xxxREGISTRARlookup() should have a flag to force lookup on all branches (and not only on RURI)
March 18, 2015, at 03:43 PM by liviu -
Deleted lines 7-8:

A manual for how to migrate/update from 1.11.x to 2.4.x is now available on site.

Changed lines 12-201 from:

SIP transport protocols rework

Allows new protocols to be added in a much easier way. OpenSIPS 2.4 now comes with two built-in transport modules, TCP and UDP, and three optional protocol-modules: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.
In order to use one of those protocols (in a SIP listener), you need to load the corresponding module (as any other OpenSIPS module).

Asynchronous I/O operations

OpenSIPS 2.4 had the ability to perform, from script level, various operations in the asynchronous mode. Now you can run DB queries, REST queries or external scripts without the blocking penalty !

The OpenSIPS config file allows you to use certain functions in async way (via the dedicated "async" statement). The suspending and resuming is done at script level. A detailed description of how the async support works in 2.4 is available here: http://www.opensips.org/Documentation/Script-Async-2-4 .

The async scripting support is just the tip of the iceberg (when comes to the work which has been done). To make this possible, radical changes were implemented in OpenSIPS 2.4 (most of them imported from OpenSIPS experimental branch):

  • per-process I/O reactors
  • timer jobs dispatched across all SIP workers (versus dedicated timer procs)
  • updatable transactions in TM (to be able to use the transactions as contexts for the async jump)
  • transaction based async support in TM module
  • processing context (to make it easier to suspend and resume the script execution)

The first modules providing async functions are:

  • avpops for DB mysql queries
  • exec for script execution
  • rest_client for remote REST queries

Core

  • Debugging levels: complete rework. They can now be set globally or individually (per process) using the debug MI command. More information here ...
  • New shm_check MI function - To be used when running with memory debugging (DBG_QM_MALLOC memory allocator). Does a complete scan of the shared memory pool and aborts OpenSIPS on any encountered sign of memory corruption.
  • Support for RFC 5031 urn:service URIs
  • New TCP parameter: tcp_crlf_drop - set to 1 in order to drop "\r\n" pinging messages
  • New core parameter: db_max_async_connections - maximum number of connections to a single DB backend from a single worker
  • New MI command: list_statistics - prints a list of all available statistics in the current configuration of OpenSIPS
  • Memory profiling with HP_MALLOC - send SIGUSR1 to OpenSIPS processes in order to print a detailed status of optimized shared memory buckets and fragment distribution

Config Script

  • New async() script statement: Dramatically improves the scalability of OpenSIPS config scripts which must perform blocking I/O (e.g. MySQL queries, exec scripts, HTTP queries). Halts current script execution and runs a resume route once the async operation is complete. More information in the OpenSIPS 2.4 async tutorial ...
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is enabled). More information here ...
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
  • New string transformations: s.fill.left, s.fill.right - Fill a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples
  • New uri transformation: uri.schema - Extract the given URI's schema. More information here
  • sync/async support for event_route - Provides the possibility to run an event route asynchronously. More information here
  • Support for multi-part bodies - $cT (Content-Type) and $rb (Request Body) are now indexed - e.g. $(rb[1])

NEW PROTO_WS module

Module to provide the websocket transport protocol for SIP (server side). You need to load this module if you want to define SIP listeners over WS transport. See the websocket usage tutorial and the module documentation for parameters.

NEW PROTO_TLS module

Module to provide the TLS transport protocol for SIP. You need to load this module if you want to define SIP listeners over TLS. See the TLS usage tutorial and the module documentation for parameters.

NEW PROTO_SCTP module

Module to provide the SCTP transport protocol for SIP. You need to load this module if you want to define SIP listeners over SCTP. See the module documentation for parameters.

NEW COMPRESSION module

A new module which performs both SIP message compression and SIP header compaction. The compression module gives you the means to reduce the size of the message, by using the following features:

  • message body and the header compression
  • unnecessary headers removal
  • header name reduction to RFC compact form (such as 'v' for 'Via'); we support a limited set of compact headers from RFC 3261 and RFC 4028 (complete list at [2])
  • unnecessary attribute lines removal from the sdp body which represent default values

A comprehensive tutorial is available beside the module documentation.

NEW EMERGENCY module

The emergency module provides emergency call treatment, following the IETF specs (RFC 6881, RFC6442) and the i2 specification of the American entity NENA(National Emergency Number Association). Module documentation is available here. Also, a comprehensive tutorial is available for describing the usage cases and how to use this module.

NEW FRAUD_DETECTION module

A new module that helps you prevent fraud by detecting (in a per user fashion) fraudulent calls based on dialing patterns (using patterns on total number of calls, on average duration, number of parallel calls, maximum cps value and more).
See the complete usage tutorial and the module documentation for parameters and functions provided by this module.

NEW RTPENGINE module

A new module that enables media streams to be proxied via RTPENGINE

NEW TOPOLOGY_HIDING module

A new module that offers topology hiding capabilities. The module strips and restores the headers that contain topology information (Via, Record-Route, Route and Contact headers) , and optionally it can also change the Call-ID of the requests. The module can work on top of the dialog module, or in stand-alone mode, thus allowing to do topology hiding for all types of dialogs ( eg. Presence dialogs ) and also for standalone initial requests ( eg. SIP MESSAGE ).
See the usage tutorial and the module documentation for parameters and functions provided by this module.

AVPOPS module

  • avp_db_query() may now be used asynchronously (with MySQL backend). A usage example can be found in the module documentation.

CACHEDB_MONGODB module

  • Added support for DATE fields when doing raw queries. Date fields are returned as UNIX timestamps at script level.

CACHEDB_SQL module

  • Full rework of the module, including a better usage of the CACHEDB interface, and also allowing for multiple DB connections to be used from script.

DOMAIN module

  • You can now specify attributes from the domain names that can be used later on from the script. More information here ...

DB_MYSQL module

  • The db_mysql module is now capable of doing asynchronous raw queries. It implements its own pool of connections (per process), so multiple queries can be done in parallel from the same process.

DB_UNIXODBC module

  • Slight performance improvement for all SELECT queries

DIALOG module

  • Added the E_DLG_STATE_CHANGED event, that will be triggered when the dialog state changes (eg. from early to established, from established to ended, etc ).

DIALPLAN module

  • Routing is now partition based: you may specify which string translation rules want to use to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...
  • New column: timerec. Allows time recurrence based enabling of dialplan rules (accepted strings are RFC 2445 compatible). Backwards-compatible with the previous DB schema. More information here...
  • dp_translate(): the "id" parameter may now also be given as a plain int

DISPATCHER module

  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...
  • ds_reload MI command updated to support partition-only reloading
  • ds_is_in_list(): ip and port must no longer be strictly given as pvars
  • Added the destination priority column
  • New modparam: persistent_state - prevent OpenSIPS from making any runtime UPDATE queries on the dispatcher table

DROUTING module

  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes ( eg: separate routing, prefix matching, etc ), while keeping the provisioning and reloading part fully separate. More information here...
  • Using the new MI function dr_reload_status you can get the time of the last "dr_reload" (update) for any partition. The feature is available even if you don't use partitions. More information here...
  • A new MI function dr_number_routing was added which allows to simulate a do_routing() call, by fetching the list of the gateways / carriers to which a number would be routed. More information here...
  • Added a new event to be triggered when the state of a gateway is changed (either from MI or via probing triggered from script). More information here...
  • New modparam: persistent_state - prevent OpenSIPS from making any runtime UPDATE queries on the dr_gateways and dr_carriers tables

EVENT_RABBITMQ module

  • The rabbitmq module can now send messages to different exchanges . You can simply specify the exchange you want to use in the socket url. More information here ...

EVENT_ROUTE module

  • Added async event handling - Allows for running the events in an asynchronous mode (in a dedicated process). More information here ...

EXEC module

  • Asynchronous exec() - the exec() function may now also be used in the asynchronous mode, via the async() statement.
  • New generic exec() function - All "exec"-like functions merged into a single generic function - more information here

LDAP module

  • StartTLS support introduced. For example configurations, please refer to the new parameter documentation

LOAD_BALANCER module

  • Added a new event to be triggered when the state of a gateway is changed (either from MI or via probing triggered from script). More information here ...
  • Rework of how the LB session is controlled (start, resume, stop) from script:
    • new lb_start(), strictly used to start LB session. if sessions already started, old session will be lost and re-started again.
    • new lb_next(), continues an existing LB session (working as load_balance() from failure route - to do failover)
    • lb_start_and_next() - is simply a shorthand for 'lb_is_started()?lb_next():lb_start()' to simplify scripting. This function logically almost the same as old load_balance() function.
    • new lb_reset() to stop a current LB session
    • new lb_is_started() to check if there is any ongoing LB session
  • the LB process (when started) takes one more flag to enable usage of destination with negative availability (exceeded capacity); do not ignore resources with negative availability, and thus able to select for load balancing destinations with exceeded capacity. This might be needed in scenarios where we want to limit generic calls volume and always pass important/high-priority calls.
  • lb_count_call() - can take negative values, to revert a previous lb_count_call() action

MI_FIFO module

  • Reworked the FIFO handling - added support for detecting if the FIFO file gets deleted (for re-creating it), and also added SIGHUP signal handling for re-creating and re-opening of the FIFO file.

MI_JSON module

  • Rework of how the Json string is build in order to properly accommodate arrays - in many MI answers, OpenSIPS returns arrays - and these arrays need to be properly translated from internal MI structure to the json format.

MSILO module

  • Added support for external body - the MESSAGE has no actual body, but the Content-Type hdr refers to an external body by an HTTP link.
  • Added support for limiting the number of SIP MESSAGES that will be dumped in one shot ( in order to not overload the client )

NATHELPER module

  • Ambiguous "oldmediaip" SDP attributes replaced with "oldcip" and "oldoip" (a5900b5)

PRESENCE module

  • New end_sub_on_timeout module parameter - If a presence subscription should be automatically terminated (destroyed) when receiving a SIP timeout (408) for a sent NOTIFY requests.
  • A new E_PRESENCE_PUBLISH event has been added that is triggered every time OpenSIPS receives a PUBLISH message. Read mode here ...

SIPMSGOPS module

  • The sipmsg_validate function can now be used to check the From, To and Contact headers. More information here...
  • All the Codec related functions accepting regexps can now also accept pseudovariables containing the regex - allowing for fetching the REGEXPs from various sources ( eg. Database ). Read more here ...

SIPTRACE module

  • Split the fromip and toip DB columns ( which previously contained IP & port ) into two separate columns containing IP and port - thus allowing for faster database searches based on IPs.

REST_CLIENT module

  • rest_get() and rest_post() may now be used asynchronously. A usage example can be found in the module documentation.
  • when using rest_post(), you may omit the "send_content_type" parameter. It will default to "application/x-www-form-urlencoded"

RTPPROXY module

  • rtpproxy_enable MI command : optional set_id param added (28a974b)

UAC module

  • When using the uac_auth() for having OpenSIPS do SIP authentication, the CSEQ number will be increased for subsequent authentication requests - thus fixing various downstream issues (e.g. Asterisk treating the AUTH request as a retransmission due to the same CSEQ number).

USRLOC module

  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...
  • Added User-Agent filtering capabilities for lookup() - so you can now send calls just to particular UAs, if you need to
to:

Devel Plan 2.4 release (TODO list)

ImportanceModuleDescription
xxxxTMeven if decide to "go stateful" very early in your script (via t_newtran), all changes you do later over the request (in request route, branch route, failure route) must be updated/pushed into transaction and remembered at later processing
xxxxDIALOGre-INVITE based in-dialog pinging (with proper SDP handling)
xxxREGISTRARlookup() should have a flag to force lookup on all branches (and not only on RURI)
xxxDIALOGNew events for dialog matched, terminated, etc
xxxDIALOGcontrol profiles/variables DB storage - specify whether we want to ever dump the profies/variables in the DB or only on shutdown. Rethink the current design to see if is the best.
xxxUSRLOCdistributed storage via a NoSQL DB
xxxDIALOGdistributed storage via a NoSQL DB
xxxDIALOGbe able to end all dialogs belonging to a certain profile (MI only)
xxxUSRLOCwhen db is updated based on timer, combine multiple deletes in a single query
xxxSIPCAPTURETCP support
xxxRTPProxyadd ICE support for rtpproxy
xxxEvent Interfaceadd ZeroMQ support for Event Interface
xxxcoresend function (including from TM) should return a dedicated ret code to indicate network errors (failure in sending)
xxxcorefix insert_new_lump()/append_new_lump() logic throughout lumps_len()
xxxcoreonce fixed, replace all single anchor_lump()+insert_new_lump_{before,after}() calls with the simpler insert_new_lump() call
xxxnewIntegrate OpenSIPS with libpurple library for IM and Presence
xxTLS coreadd an internal API for TLS management to allow registration of certificates ; a new module to allow TLS certificates provisioning via DB (per domain, per IP, etc)
xxDROUTINGAllow the option to call do_routing with a particular number, but to propagate downstream a different number ( useful for number portability scenarios )
xxUSRLOCuse a single Primary Key (non SIP related) for DB ops
xxTMallow dynamic number of branches per transaction (on demand)
xxStatistics Interfacereplace the BIG LOCK (if other arch than i386) with multiple shared locks (to protect the values)
xxnewnew cachedb_virtual modules, similar to db_virtual, but for NoSQL databases
xxdb_virtualOpensips should be able to start even if db_virtual was not able to connect to all databases. So long as it can connect to at least 1 it should still work
xxB2BSupport for attended transfers on B2BUA
xxevent_datagramInstead of pushing events in text/plan format, to have also the options to pack the event in a json format -> easier to parse by the receiver
xxnewsupport for RFC5626 - Managing Client-Initiated Connections in SIP
xnewnew module mi_stream to provide MI interaction via connection oriented links (TCP or fifo)
xnewRFC6140 Registration for Multiple Phone Numbers
xAVPOPSRegexp based filter for avp_db_load - what AVPs to be loaded
xcoreBe able to specify multiple keys with the "cache_fetch" MI command
xcoreHandle OpenSIPS variable expansion within the format string of assert()
xscriptConsider implementing the "continue" and "break" keywords inside while and for-each
xcachedb coreAllow results to be written in any PV (not just $avp)
xscriptInteger operators: make "+=" and "-=" work!
March 18, 2015, at 03:40 PM by liviu -
Changed line 6 from:

Migration from 1.11.x to 2.4.0

to:

Migration from 2.1.x to 2.4.0

March 18, 2015, at 01:51 PM by razvancrainea -
Added line 182:
  • A new E_PRESENCE_PUBLISH event has been added that is triggered every time OpenSIPS receives a PUBLISH message. Read mode here ...
March 18, 2015, at 12:21 PM by 89.120.101.121 -
Deleted lines 102-104:
  • Call-ID topology hiding support was added within the dialog module - there are many cases where the callid contains IPs, thus revealing part of the network topology. More information here ...
  • Added the ability to propagate various Contact Header / URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...
Changed lines 175-176 from:
to:
  • Added support for limiting the number of SIP MESSAGES that will be dumped in one shot ( in order to not overload the client )
Changed lines 201-202 from:
  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...
to:
  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...
  • Added User-Agent filtering capabilities for lookup() - so you can now send calls just to particular UAs, if you need to
March 18, 2015, at 12:18 PM by 89.120.101.121 -
Changed lines 99-100 from:
  • (d84649e TODO)
to:

A new module that offers topology hiding capabilities. The module strips and restores the headers that contain topology information (Via, Record-Route, Route and Contact headers) , and optionally it can also change the Call-ID of the requests. The module can work on top of the dialog module, or in stand-alone mode, thus allowing to do topology hiding for all types of dialogs ( eg. Presence dialogs ) and also for standalone initial requests ( eg. SIP MESSAGE ).
See the usage tutorial and the module documentation for parameters and functions provided by this module.

  • Call-ID topology hiding support was added within the dialog module - there are many cases where the callid contains IPs, thus revealing part of the network topology. More information here ...
  • Added the ability to propagate various Contact Header / URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...
Changed lines 125-127 from:
  • Call-ID topology hiding support was added within the dialog module - there are many cases where the callid contains IPs, thus revealing part of the network topology. More information here ...
  • Added the ability to propagate various Contact Header / URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...
  • Added the E_DLG_STATE_CHANGED event.
to:
  • Added the E_DLG_STATE_CHANGED event, that will be triggered when the dialog state changes (eg. from early to established, from established to ended, etc ).
March 18, 2015, at 11:15 AM by razvancrainea -
Changed lines 64-65 from:
  • sync/async support for event_route (e3d37f4 TODO)
to:
  • sync/async support for event_route - Provides the possibility to run an event route asynchronously. More information here
Changed line 200 from:
  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...
to:
  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...
March 17, 2015, at 08:54 PM by razvancrainea -
Deleted lines 200-239:

Devel Plan 2.4 release (TODO list)

ImportanceModuleDescription
xxxxTMeven if decide to "go stateful" very early in your script (via t_newtran), all changes you do later over the request (in request route, branch route, failure route) must be updated/pushed into transaction and remembered at later processing
xxxxDIALOGre-INVITE based in-dialog pinging (with proper SDP handling)
xxxREGISTRARlookup() should have a flag to force lookup on all branches (and not only on RURI)
xxxDIALOGNew events for dialog matched, terminated, etc
xxxDIALOGcontrol profiles/variables DB storage - specify whether we want to ever dump the profies/variables in the DB or only on shutdown. Rethink the current design to see if is the best.
xxxUSRLOCdistributed storage via a NoSQL DB
xxxDIALOGdistributed storage via a NoSQL DB
xxxDIALOGbe able to end all dialogs belonging to a certain profile (MI only)
xxxUSRLOCwhen db is updated based on timer, combine multiple deletes in a single query
xxxSIPCAPTURETCP support
xxxRTPProxyadd ICE support for rtpproxy
xxxEvent Interfaceadd ZeroMQ support for Event Interface
xxxcoresend function (including from TM) should return a dedicated ret code to indicate network errors (failure in sending)
xxxcorefix insert_new_lump()/append_new_lump() logic throughout lumps_len()
xxxcoreonce fixed, replace all single anchor_lump()+insert_new_lump_{before,after}() calls with the simpler insert_new_lump() call
xxxnewIntegrate OpenSIPS with libpurple library for IM and Presence
xxTLS coreadd an internal API for TLS management to allow registration of certificates ; a new module to allow TLS certificates provisioning via DB (per domain, per IP, etc)
xxDROUTINGAllow the option to call do_routing with a particular number, but to propagate downstream a different number ( useful for number portability scenarios )
xxUSRLOCuse a single Primary Key (non SIP related) for DB ops
xxTMallow dynamic number of branches per transaction (on demand)
xxStatistics Interfacereplace the BIG LOCK (if other arch than i386) with multiple shared locks (to protect the values)
xxnewnew cachedb_virtual modules, similar to db_virtual, but for NoSQL databases
xxdb_virtualOpensips should be able to start even if db_virtual was not able to connect to all databases. So long as it can connect to at least 1 it should still work
xxB2BSupport for attended transfers on B2BUA
xxevent_datagramInstead of pushing events in text/plan format, to have also the options to pack the event in a json format -> easier to parse by the receiver
xxnewsupport for RFC5626 - Managing Client-Initiated Connections in SIP
xnewnew module mi_stream to provide MI interaction via connection oriented links (TCP or fifo)
xnewRFC6140 Registration for Multiple Phone Numbers
xAVPOPSRegexp based filter for avp_db_load - what AVPs to be loaded
xcoreBe able to specify multiple keys with the "cache_fetch" MI command
xcoreHandle OpenSIPS variable expansion within the format string of assert()
xscriptConsider implementing the "continue" and "break" keywords inside while and for-each
xcachedb coreAllow results to be written in any PV (not just $avp)
xscriptInteger operators: make "+=" and "-=" work!
March 17, 2015, at 07:20 PM by 89.120.101.121 -
Changed lines 171-172 from:
  • Full rework (459dffb)
to:
  • Rework of how the Json string is build in order to properly accommodate arrays - in many MI answers, OpenSIPS returns arrays - and these arrays need to be properly translated from internal MI structure to the json format.
Changed lines 174-175 from:
  • Added support for external body (2e4b2d5)
to:
  • Added support for external body - the MESSAGE has no actual body, but the Content-Type hdr refers to an external body by an HTTP link.
Changed line 180 from:
  • New end_sub_on_timeout modparam (7aa96b2)
to:
  • New end_sub_on_timeout module parameter - If a presence subscription should be automatically terminated (destroyed) when receiving a SIP timeout (408) for a sent NOTIFY requests.
March 17, 2015, at 07:08 PM by 89.120.101.121 -
Changed lines 102-103 from:
  • avp_db_query() may now be used asynchronously. A usage example can be found in the module documentation.
to:
  • avp_db_query() may now be used asynchronously (with MySQL backend). A usage example can be found in the module documentation.
Changed lines 114-115 from:
  • The db_mysql module is now capable of doing asynchronous raw queries.
to:
  • The db_mysql module is now capable of doing asynchronous raw queries. It implements its own pool of connections (per process), so multiple queries can be done in parallel from the same process.
Changed lines 158-163 from:
  • rework of how the LB session is controlled (start, resume, stop) from script
  • new lb_reset() function (301e6d3)
  • load_balance() function enhancements (a7549e0)
  • load_balance() - two new algorithms (5986074)
  • lb_count_call() - new parameter to revert a previous lb_count_call() action (cd0ac14)
  • LOTS of changes -> TODO (f43a405)
to:
  • Rework of how the LB session is controlled (start, resume, stop) from script:
    • new lb_start(), strictly used to start LB session. if sessions already started, old session will be lost and re-started again.
    • new lb_next(), continues an existing LB session (working as load_balance() from failure route - to do failover)
    • lb_start_and_next() - is simply a shorthand for 'lb_is_started()?lb_next():lb_start()' to simplify scripting. This function logically almost the same as old load_balance() function.
    • new lb_reset() to stop a current LB session
    • new lb_is_started() to check if there is any ongoing LB session
  • the LB process (when started) takes one more flag to enable usage of destination with negative availability (exceeded capacity); do not ignore resources with negative availability, and thus able to select for load balancing destinations with exceeded capacity. This might be needed in scenarios where we want to limit generic calls volume and always pass important/high-priority calls.
  • lb_count_call() - can take negative values, to revert a previous lb_count_call() action
March 17, 2015, at 06:50 PM by 89.120.101.121 -
Changed lines 81-82 from:

A new module which performs both SIP message compression and SIP header compaction. Read more here ...

to:

A new module which performs both SIP message compression and SIP header compaction. The compression module gives you the means to reduce the size of the message, by using the following features:

  • message body and the header compression
  • unnecessary headers removal
  • header name reduction to RFC compact form (such as 'v' for 'Via'); we support a limited set of compact headers from RFC 3261 and RFC 4028 (complete list at [2])
  • unnecessary attribute lines removal from the sdp body which represent default values

A comprehensive tutorial is available beside the module documentation.

Changed lines 149-152 from:

EXEC module (TODO)

  • Asynchronous exec() - the exec() call may now also be used asynchronously, in an async() block (e7a090f)
  • New generic exec() function - More information here ...
to:

EXEC module

  • Asynchronous exec() - the exec() function may now also be used in the asynchronous mode, via the async() statement.
  • New generic exec() function - All "exec"-like functions merged into a single generic function - more information here
Changed line 156 from:

LOAD_BALANCER module (TODO)

to:

LOAD_BALANCER module

Added line 158:
  • rework of how the LB session is controlled (start, resume, stop) from script
March 17, 2015, at 06:27 PM by 89.120.101.121 -
Changed lines 81-82 from:
  • A new module which performs both SIP message compression and SIP header compaction. Read more here ...
to:

A new module which performs both SIP message compression and SIP header compaction. Read more here ...

Changed lines 84-85 from:
  • The emergency module provides emergency call treatment, following the IETF specs (RFC 6881, RFC6442) and the i2 specification of the American entity NENA(National Emergency Number Association). Module documentation is available here. Also, a comprehensive tutorial is available for describing the usage cases and how to use this module.
to:

The emergency module provides emergency call treatment, following the IETF specs (RFC 6881, RFC6442) and the i2 specification of the American entity NENA(National Emergency Number Association). Module documentation is available here. Also, a comprehensive tutorial is available for describing the usage cases and how to use this module.

Changed line 87 from:
  • A new module that helps you prevent fraud by detecting (in a per user fashion) fraudulent calls based on dialing patterns (using patterns on total number of calls, on average duration, number of parallel calls, maximum cps value and more).\\
to:

A new module that helps you prevent fraud by detecting (in a per user fashion) fraudulent calls based on dialing patterns (using patterns on total number of calls, on average duration, number of parallel calls, maximum cps value and more).\\

Changed line 91 from:
  • A new module that enables media streams to be proxied via RTPENGINE
to:

A new module that enables media streams to be proxied via RTPENGINE

March 17, 2015, at 06:25 PM by 89.120.101.121 -
Changed lines 78-82 from:

Module to provide the SCTP transport protocol for SIP. You need to load this module if you want to define SIP listeners over SCTP. See the module documentation for parameters.

NEW CALL_EMERGENCY module (TODO)

  • (d8cfac6)
to:

Module to provide the SCTP transport protocol for SIP. You need to load this module if you want to define SIP listeners over SCTP. See the module documentation for parameters.

Changed lines 84-85 from:
  • The emergency module provides emergency call treatment, following the architecture i2 specification of the american entity NENA(National Emergency Number Association). Read more here.
to:
  • The emergency module provides emergency call treatment, following the IETF specs (RFC 6881, RFC6442) and the i2 specification of the American entity NENA(National Emergency Number Association). Module documentation is available here. Also, a comprehensive tutorial is available for describing the usage cases and how to use this module.
Changed lines 87-88 from:
  • A new module that helps you prevent fraud by detecting fraudulent calls based on dialing patterns. Read more here.
to:
  • A new module that helps you prevent fraud by detecting (in a per user fashion) fraudulent calls based on dialing patterns (using patterns on total number of calls, on average duration, number of parallel calls, maximum cps value and more).
    See the complete usage tutorial and the module documentation for parameters and functions provided by this module.
March 17, 2015, at 06:19 PM by 89.120.101.121 -
Changed lines 74-77 from:

Module to provide the TLS transport protocol for SIP (server side). You need to load this module if you want to define SIP listeners over WS transport.

NEW PROTO_SCTP module (TODO)

to:

Module to provide the TLS transport protocol for SIP. You need to load this module if you want to define SIP listeners over TLS. See the TLS usage tutorial and the module documentation for parameters.

NEW PROTO_SCTP module

Module to provide the SCTP transport protocol for SIP. You need to load this module if you want to define SIP listeners over SCTP. See the module documentation for parameters.

March 17, 2015, at 06:17 PM by 89.120.101.121 -
Changed lines 70-72 from:

NEW PROTO_TLS module (TODO)

to:

Module to provide the websocket transport protocol for SIP (server side). You need to load this module if you want to define SIP listeners over WS transport. See the websocket usage tutorial and the module documentation for parameters.

NEW PROTO_TLS module

Module to provide the TLS transport protocol for SIP (server side). You need to load this module if you want to define SIP listeners over WS transport.

March 17, 2015, at 06:08 PM by 89.120.101.121 -
Changed lines 15-16 from:

Allows new protocols to be added in a much easier way. OpenSIPS now comes with two built-in transport modules, TCP and UDP, and three optional modules: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.

to:

Allows new protocols to be added in a much easier way. OpenSIPS 2.4 now comes with two built-in transport modules, TCP and UDP, and three optional protocol-modules: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.
In order to use one of those protocols (in a SIP listener), you need to load the corresponding module (as any other OpenSIPS module).

Changed lines 20-22 from:

DB core and API (for module developers)''': Primitives for managing asynchronous DB connection pools. To be used by SQL drivers when implementing the async DB API.

to:

OpenSIPS 2.4 had the ability to perform, from script level, various operations in the asynchronous mode. Now you can run DB queries, REST queries or external scripts without the blocking penalty !

The OpenSIPS config file allows you to use certain functions in async way (via the dedicated "async" statement). The suspending and resuming is done at script level. A detailed description of how the async support works in 2.4 is available here: http://www.opensips.org/Documentation/Script-Async-2-4 .

The async scripting support is just the tip of the iceberg (when comes to the work which has been done). To make this possible, radical changes were implemented in OpenSIPS 2.4 (most of them imported from OpenSIPS experimental branch):

  • per-process I/O reactors
  • timer jobs dispatched across all SIP workers (versus dedicated timer procs)
  • updatable transactions in TM (to be able to use the transactions as contexts for the async jump)
  • transaction based async support in TM module
  • processing context (to make it easier to suspend and resume the script execution)

The first modules providing async functions are:

  • avpops for DB mysql queries
  • exec for script execution
  • rest_client for remote REST queries
Changed lines 68-70 from:

NEW PROTO_WS module (TODO)

to:

NEW PROTO_WS module

March 17, 2015, at 05:30 PM by 89.120.101.121 -
Added lines 14-21:

SIP transport protocols rework

Allows new protocols to be added in a much easier way. OpenSIPS now comes with two built-in transport modules, TCP and UDP, and three optional modules: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.

Asynchronous I/O operations

DB core and API (for module developers)''': Primitives for managing asynchronous DB connection pools. To be used by SQL drivers when implementing the async DB API.

Deleted lines 22-26:
  • Internal networking layer rework - allows new protocols to be added in a much easier way. OpenSIPS now comes with two built-in transport modules, TCP and UDP, and three optional modules: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.
  • Asynchronous DB core and API (for module developers): Primitives for managing asynchronous DB connection pools. To be used by SQL drivers when implementing the async DB API.
March 17, 2015, at 02:32 PM by liviu -
Changed lines 109-110 from:
to:
  • New modparam: persistent_state - prevent OpenSIPS from making any runtime UPDATE queries on the dispatcher table
Added line 116:
  • New modparam: persistent_state - prevent OpenSIPS from making any runtime UPDATE queries on the dr_gateways and dr_carriers tables
March 16, 2015, at 12:29 PM by liviu -
Changed line 14 from:

OpenSIPS Core

to:

Core

March 16, 2015, at 12:28 PM by liviu -
Changed lines 14-15 from:

Core

to:

OpenSIPS Core

Changed line 34 from:

Script

to:

Config Script

March 16, 2015, at 12:27 PM by liviu -
Changed line 16 from:
  • Internal networking layer rework - allows new protocols to be added in a much easier way. OpenSIPS now comes with two built-in transport modules, TCP and UDP, and three optional shared libraries: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.
to:
  • Internal networking layer rework - allows new protocols to be added in a much easier way. OpenSIPS now comes with two built-in transport modules, TCP and UDP, and three optional modules: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.
March 16, 2015, at 12:24 PM by liviu -
Changed line 40 from:
  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is enabled).
to:
  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is enabled). More information here ...
March 16, 2015, at 12:23 PM by liviu -
Changed line 36 from:
  • New async() script statement: Dramatically improves the scalability of OpenSIPS config scripts which must perform blocking I/O (e.g. MySQL queries, exec scripts, HTTP queries). Halts current script execution and runs a resume route once the async operation is complete. ore information here ...
to:
  • New async() script statement: Dramatically improves the scalability of OpenSIPS config scripts which must perform blocking I/O (e.g. MySQL queries, exec scripts, HTTP queries). Halts current script execution and runs a resume route once the async operation is complete. More information in the OpenSIPS 2.4 async tutorial ...
March 16, 2015, at 12:22 PM by liviu -
Changed line 36 from:
  • New async() script statement: Dramatically improves the scalability of OpenSIPS config scripts which must perform blocking I/O (e.g. MySQL queries, exec scripts, HTTP queries). Halts current script execution and runs a resume route once the async operation is complete. ore information here ...
to:
  • New async() script statement: Dramatically improves the scalability of OpenSIPS config scripts which must perform blocking I/O (e.g. MySQL queries, exec scripts, HTTP queries). Halts current script execution and runs a resume route once the async operation is complete. ore information here ...
March 16, 2015, at 12:22 PM by liviu -
Added lines 35-36:
  • New async() script statement: Dramatically improves the scalability of OpenSIPS config scripts which must perform blocking I/O (e.g. MySQL queries, exec scripts, HTTP queries). Halts current script execution and runs a resume route once the async operation is complete. ore information here ...
March 16, 2015, at 12:11 PM by liviu -
Changed line 60 from:
  • New OpenSIPS module which performs both SIP message compression and SIP header compaction. Read more here ...
to:
  • A new module which performs both SIP message compression and SIP header compaction. Read more here ...
March 16, 2015, at 12:08 PM by liviu -
Changed line 60 from:
  • Added a new compression module which performs both message compression and compaction. Read more here ...
to:
  • New OpenSIPS module which performs both SIP message compression and SIP header compaction. Read more here ...
March 16, 2015, at 12:07 PM by liviu -
Changed line 60 from:
  • Added a new compression module which does message compression and compaction. Read more here.
to:
  • Added a new compression module which performs both message compression and compaction. Read more here ...
March 16, 2015, at 12:01 PM by liviu -
Changed line 40 from:
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
to:
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
March 16, 2015, at 12:00 PM by liviu -
Changed line 40 from:
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
to:
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
March 13, 2015, at 09:11 PM by liviu -
Changed line 26 from:
  • New TCP parameter: tcp_crlf_drop - set to 1 in order to close TCP connections in case of "\r\n" pinging messages
to:
  • New TCP parameter: tcp_crlf_drop - set to 1 in order to drop "\r\n" pinging messages
March 13, 2015, at 09:10 PM by liviu -
Changed line 26 from:
  • New core parameter: tcp_crlf_drop - set to 1 in order to close TCP connections in case of "\r\n" pinging messages (487e7b5)
to:
  • New TCP parameter: tcp_crlf_drop - set to 1 in order to close TCP connections in case of "\r\n" pinging messages
March 13, 2015, at 09:06 PM by liviu -
Changed line 8 from:

A manual for how to migrate/update from 1.11.x to 2.4.x is now available on site.

to:

A manual for how to migrate/update from 1.11.x to 2.4.x is now available on site.

March 13, 2015, at 09:06 PM by liviu -
Changed line 8 from:

A manual for how to migrate/update from 1.10.x to 1.11.x is now available on site.

to:

A manual for how to migrate/update from 1.11.x to 2.4.x is now available on site.

March 13, 2015, at 09:05 PM by liviu -
Changed line 8 from:

To be done on release date.

to:

A manual for how to migrate/update from 1.10.x to 1.11.x is now available on site.

March 13, 2015, at 08:56 PM by liviu -
Changed line 32 from:
  • New output when dumping the free memory hash table with HP_MALLOC
to:
  • Memory profiling with HP_MALLOC - send SIGUSR1 to OpenSIPS processes in order to print a detailed status of optimized shared memory buckets and fragment distribution
March 13, 2015, at 08:50 PM by liviu -
Changed lines 28-30 from:
  • New core parameter: db_max_async_connections - maximum number of connections to a single DB backend from a single worker (3eacd98)
  • New MI command: list_statistics - prints a list of all available statistics in the current configuration of OpenSIPS (dd03176)
to:
  • New core parameter: db_max_async_connections - maximum number of connections to a single DB backend from a single worker
  • New MI command: list_statistics - prints a list of all available statistics in the current configuration of OpenSIPS
March 13, 2015, at 08:07 PM by liviu -
Deleted lines 81-84:

CALL_CENTER module

  • cc_calls table added (2f6eb09 TODO)
  • last_call_end column (4b366c5 TODO)
March 13, 2015, at 08:03 PM by liviu -
Changed lines 128-129 from:

LDAP module (TODO)

  • StartTLS support introduced (0b61cba)
to:

LDAP module

  • StartTLS support introduced. For example configurations, please refer to the new parameter documentation
March 13, 2015, at 07:34 PM by liviu -
Changed lines 46-47 from:
  • sync/async support for event_route (e3d37f4)
to:
  • sync/async support for event_route (e3d37f4 TODO)
Changed lines 72-73 from:
  • (d84649e)
to:
  • (d84649e TODO)
Changed lines 78-79 from:
  • Added support for DATE fields when doing raw queries. Date fields are returned as UNIX timestamps (4782d0a)
to:
  • Added support for DATE fields when doing raw queries. Date fields are returned as UNIX timestamps at script level.
Changed lines 84-86 from:
  • cc_calls table added (2f6eb09)
  • last_call_end column (4b366c5)
to:
  • cc_calls table added (2f6eb09 TODO)
  • last_call_end column (4b366c5 TODO)
Changed lines 94-95 from:
  • Slight performance improvement for all SELECT queries. (683dfaa)
to:
  • Slight performance improvement for all SELECT queries
Changed lines 99-100 from:
  • Added the E_DLG_STATE_CHANGED event (10083ed)
to:
  • Added the E_DLG_STATE_CHANGED event.
Changed lines 104-105 from:
  • dp_translate(): the "id" parameter may now also be given as a plain int (2923d41)
to:
  • dp_translate(): the "id" parameter may now also be given as a plain int
Changed lines 108-110 from:
  • ds_reload MI command updated to support partition-only reloading (7a58426)
  • ds_is_in_list(): ip and port must no longer be strictly given as pvars (e7bccda)
  • Added priority column (6dc7261)
to:
  • ds_reload MI command updated to support partition-only reloading
  • ds_is_in_list(): ip and port must no longer be strictly given as pvars
  • Added the destination priority column
March 13, 2015, at 07:13 PM by liviu -
Changed lines 44-45 from:
  • New uri transformation: uri.schema - Extract the given URI's schema. More information here ...
to:
  • New uri transformation: uri.schema - Extract the given URI's schema. More information here
Changed line 48 from:
  • Support for multi-part body - $cT (Content-Type) and $rb (Request Body) are now indexed - e.g. $(rb[1]) (1986385)
to:
  • Support for multi-part bodies - $cT (Content-Type) and $rb (Request Body) are now indexed - e.g. $(rb[1])
March 13, 2015, at 07:10 PM by liviu -
Changed line 44 from:
  • New uri transformation: uri.schema - Extract the given URI's schema (TODO) transformations manual for usage examples
to:
  • New uri transformation: uri.schema - Extract the given URI's schema. More information here ...
March 13, 2015, at 07:04 PM by liviu -
Changed line 38 from:
  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is set to true).
to:
  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is enabled).
March 13, 2015, at 07:03 PM by liviu -
Changed line 38 from:
  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is set to true).
to:
  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is set to true).
March 13, 2015, at 12:29 PM by liviu -
Changed line 36 from:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
to:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
March 13, 2015, at 12:29 PM by liviu -
Changed line 36 from:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
to:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
March 13, 2015, at 12:29 PM by liviu -
Changed line 30 from:
  • New MI command: list_statistics - (dd03176)
to:
  • New MI command: list_statistics - prints a list of all available statistics in the current configuration of OpenSIPS (dd03176)
March 13, 2015, at 12:26 PM by liviu -
Changed line 22 from:
  • New shm_check MI function - To be used when running with memory debugging ( DBG_QM_MALLOC memory allocator ). Does a complete scan of the shared memory pool and aborts OpenSIPS on any encountered sign of memory corruption.
to:
  • New shm_check MI function - To be used when running with memory debugging (DBG_QM_MALLOC memory allocator). Does a complete scan of the shared memory pool and aborts OpenSIPS on any encountered sign of memory corruption.
March 13, 2015, at 12:20 PM by liviu -
Deleted lines 19-20:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
Added lines 35-36:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
March 13, 2015, at 12:18 PM by liviu -
Changed line 18 from:
  • Asynchronous DB core and API: Primitives for managing async DB connection pools. To be used by SQL drivers when implementing the async DB API.
to:
  • Asynchronous DB core and API (for module developers): Primitives for managing asynchronous DB connection pools. To be used by SQL drivers when implementing the async DB API.
March 13, 2015, at 12:17 PM by liviu -
Changed line 16 from:
  • New static TCP & UDP modules (TODO)
to:
  • Internal networking layer rework - allows new protocols to be added in a much easier way. OpenSIPS now comes with two built-in transport modules, TCP and UDP, and three optional shared libraries: WebSocket, TLS and SCTP. The binary no longer needs to be recompiled every time you choose to support a new protocol.
March 11, 2015, at 07:03 PM by liviu -
Added lines 50-51:

NEW PROTO_WS module (TODO)

Deleted lines 54-55:

NEW PROTO_WS module (TODO)

March 11, 2015, at 07:03 PM by liviu -
Changed lines 16-17 from:
  • WebSocket support (TODO)
to:
  • New static TCP & UDP modules (TODO)
Added lines 49-54:

NEW PROTO_TLS module (TODO)

NEW PROTO_SCTP module (TODO)

NEW PROTO_WS module (TODO)

March 11, 2015, at 07:01 PM by liviu -
March 11, 2015, at 07:00 PM by liviu -
Added lines 15-16:
  • WebSocket support (TODO)
March 11, 2015, at 06:59 PM by liviu -
Added lines 31-32:
  • New output when dumping the free memory hash table with HP_MALLOC
March 11, 2015, at 06:56 PM by liviu -
Added line 153:
  • when using rest_post(), you may omit the "send_content_type" parameter. It will default to "application/x-www-form-urlencoded"
March 11, 2015, at 06:52 PM by liviu -
Added line 35:
Added line 37:
Added lines 39-41:
  • New uri transformation: uri.schema - Extract the given URI's schema (TODO) transformations manual for usage examples
Added line 43:
March 11, 2015, at 06:35 PM by liviu -
Added lines 54-56:

NEW TOPOLOGY_HIDING module

  • (d84649e)
March 11, 2015, at 06:33 PM by liviu -
Added lines 39-41:

NEW CALL_EMERGENCY module (TODO)

  • (d8cfac6)
March 11, 2015, at 06:31 PM by liviu -
Added lines 54-56:

CACHEDB_MONGODB module

  • Added support for DATE fields when doing raw queries. Date fields are returned as UNIX timestamps (4782d0a)
March 11, 2015, at 06:21 PM by liviu -
Added lines 27-28:
  • New core parameter: db_max_async_connections - maximum number of connections to a single DB backend from a single worker (3eacd98)
March 11, 2015, at 06:10 PM by liviu -
Added line 98:
  • Asynchronous exec() - the exec() call may now also be used asynchronously, in an async() block (e7a090f)
March 11, 2015, at 06:08 PM by liviu -
Added lines 25-26:
  • New core parameter: tcp_crlf_drop - set to 1 in order to close TCP connections in case of "\r\n" pinging messages (487e7b5)
March 11, 2015, at 05:56 PM by liviu -
Added line 34:
  • Support for multi-part body - $cT (Content-Type) and $rb (Request Body) are now indexed - e.g. $(rb[1]) (1986385)
March 11, 2015, at 05:52 PM by liviu -
Changed line 100 from:

LOAD_BALANCER module

to:

LOAD_BALANCER module (TODO)

March 11, 2015, at 05:52 PM by liviu -
Added line 106:
  • LOTS of changes -> TODO (f43a405)
March 11, 2015, at 05:44 PM by liviu -
Added lines 115-117:

NATHELPER module

  • Ambiguous "oldmediaip" SDP attributes replaced with "oldcip" and "oldoip" (a5900b5)
March 11, 2015, at 05:41 PM by liviu -
Added lines 115-117:

PRESENCE module

  • New end_sub_on_timeout modparam (7aa96b2)
March 11, 2015, at 05:29 PM by liviu -
Changed line 94 from:

EXEC module (todo)

to:

EXEC module (TODO)

Added lines 96-98:

LDAP module (TODO)

  • StartTLS support introduced (0b61cba)
March 11, 2015, at 05:26 PM by liviu -
Added lines 93-95:

EXEC module (todo)

  • New generic exec() function - More information here ...
March 11, 2015, at 05:06 PM by liviu -
Added lines 62-64:

DB_UNIXODBC module

  • Slight performance improvement for all SELECT queries. (683dfaa)
March 11, 2015, at 04:45 PM by liviu -
Added line 95:
  • load_balance() - two new algorithms (5986074)
March 11, 2015, at 04:43 PM by liviu -
Changed line 95 from:
  • lb_count_call() - new parameter to revert the previous action (cd0ac14)
to:
  • lb_count_call() - new parameter to revert a previous lb_count_call() action (cd0ac14)
March 11, 2015, at 04:43 PM by liviu -
Added line 95:
  • lb_count_call() - new parameter to revert the previous action (cd0ac14)
March 11, 2015, at 04:41 PM by liviu -
Added line 93:
  • new lb_reset() function (301e6d3)
March 11, 2015, at 04:40 PM by liviu -
Added line 93:
  • load_balance() function enhancements (a7549e0)
March 11, 2015, at 04:40 PM by liviu -
Changed lines 83-84 from:
  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here...
to:
  • Added a new event to be triggered when the state of a gateway is changed (either from MI or via probing triggered from script). More information here...
Changed lines 89-90 from:
  • Added async event handling - Allows for running the events in an asynchronous mode ( in a dedicated process ). More information here ...
to:
  • Added async event handling - Allows for running the events in an asynchronous mode (in a dedicated process). More information here ...
Changed lines 92-93 from:
  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here ...
to:
  • Added a new event to be triggered when the state of a gateway is changed (either from MI or via probing triggered from script). More information here ...
Changed line 95 from:
  • Reworked the FIFO handling - added support for detecting if the FIFO file gets deleted ( for re-creating it ), and also added SIGHUP signal handling for re-creating and re-opening of the FIFO file.
to:
  • Reworked the FIFO handling - added support for detecting if the FIFO file gets deleted (for re-creating it), and also added SIGHUP signal handling for re-creating and re-opening of the FIFO file.
March 11, 2015, at 04:39 PM by liviu -
Added line 33:
  • sync/async support for event_route (e3d37f4)
March 11, 2015, at 04:32 PM by liviu -
Added line 65:
  • Added the E_DLG_STATE_CHANGED event (10083ed)
March 11, 2015, at 04:31 PM by liviu -
Changed line 32 from:
  • New string transformations: (s.fill.left / s.fill.right) - Fill a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples
to:
  • New string transformations: s.fill.left, s.fill.right - Fill a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples
March 11, 2015, at 04:31 PM by liviu -
Changed line 32 from:
  • New string transformation (s.fill) - Fills a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples
to:
  • New string transformations: (s.fill.left / s.fill.right) - Fill a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples
March 11, 2015, at 04:28 PM by liviu -
Added line 74:
  • ds_is_in_list(): ip and port must no longer be strictly given as pvars (e7bccda)
March 11, 2015, at 04:23 PM by liviu -
Changed line 64 from:
  • Added the ability to propagate various Contact URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...
to:
  • Added the ability to propagate various Contact Header / URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...
March 11, 2015, at 04:07 PM by liviu -
Changed line 114 from:
  • When using the uac_auth() for having OpenSIPS do SIP authentication, the CSEQ number will be increased for subsequent authentication requests - thus fixing various downstream issues ( eg. Asterisk treating the AUTH request as a retransmission due to the same CSEQ number ).
to:
  • When using the uac_auth() for having OpenSIPS do SIP authentication, the CSEQ number will be increased for subsequent authentication requests - thus fixing various downstream issues (e.g. Asterisk treating the AUTH request as a retransmission due to the same CSEQ number).
March 11, 2015, at 02:21 PM by liviu -
Added lines 25-26:
  • New MI command: list_statistics - (dd03176)
March 11, 2015, at 01:10 PM by liviu -
Added line 71:
  • ds_reload MI command updated to support partition-only reloading (7a58426)
March 11, 2015, at 12:54 PM by liviu -
Added line 52:
  • last_call_end column (4b366c5)
March 11, 2015, at 12:53 PM by liviu -
Added lines 50-52:

CALL_CENTER module

  • cc_calls table added (2f6eb09)
Deleted lines 55-57:

EVENT_RABBITMQ module

  • The rabbitmq module can now send messages to different exchanges . You can simply specify the exchange you want to use in the socket url. More information here ...
Added lines 77-79:

EVENT_RABBITMQ module

  • The rabbitmq module can now send messages to different exchanges . You can simply specify the exchange you want to use in the socket url. More information here ...
March 11, 2015, at 12:51 PM by liviu -
Added lines 86-88:

MI_JSON module

  • Full rework (459dffb)
March 11, 2015, at 12:50 PM by liviu -
Added line 70:
  • Added priority column (6dc7261)
March 11, 2015, at 12:49 PM by liviu -
Added line 66:
  • dp_translate(): the "id" parameter may now also be given as a plain int (2923d41)
March 11, 2015, at 12:47 PM by liviu -
Changed lines 83-86 from:
  • Reworked the FIFO handling - added support for detecting if the FIFO file gets deleted ( for re-creating it ), and also added SIGHUP signal handling for re-creating and re-opening of the FIFO file.
to:
  • Reworked the FIFO handling - added support for detecting if the FIFO file gets deleted ( for re-creating it ), and also added SIGHUP signal handling for re-creating and re-opening of the FIFO file.

MSILO module

  • Added support for external body (2e4b2d5)
March 11, 2015, at 12:44 PM by liviu -
Added lines 94-96:

RTPPROXY module

  • rtpproxy_enable MI command : optional set_id param added (28a974b)
March 10, 2015, at 01:53 PM by liviu -
Changed line 22 from:
  • New shm_check MI function - To be used when running with memory debugging ( DBG_QM_MALLOC memory allocator ). Does a complete scan of the shared memory pool and aborts OpenSIPS on any encountered memory error.
to:
  • New shm_check MI function - To be used when running with memory debugging ( DBG_QM_MALLOC memory allocator ). Does a complete scan of the shared memory pool and aborts OpenSIPS on any encountered sign of memory corruption.
March 10, 2015, at 01:52 PM by liviu -
Changed line 24 from:
  • Support for RFC 5031 urn:service URIs -
to:
  • Support for RFC 5031 urn:service URIs
March 10, 2015, at 01:52 PM by liviu -
Added lines 23-24:
  • Support for RFC 5031 urn:service URIs -
March 06, 2015, at 02:10 PM by liviu -
Changed line 18 from:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy module dependency specification logic for module developers! More information here ...
to:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy-to-use module dependency specification logic for module developers! More information here ...
March 06, 2015, at 01:33 PM by liviu -
Changed line 91 from:
  • rest_get() may now be used asynchronously. A usage example can be found in the module documentation.
to:
  • rest_get() and rest_post() may now be used asynchronously. A usage example can be found in the module documentation.
February 26, 2015, at 11:05 AM by razvancrainea -
Changed line 34 from:
  • The emergency module provides emergency call treatment, following the architecture i2 specification of the american entity NENA. (National Emergency Number Association). Read more here.
to:
  • The emergency module provides emergency call treatment, following the architecture i2 specification of the american entity NENA(National Emergency Number Association). Read more here.
February 26, 2015, at 11:05 AM by razvancrainea -
Added lines 32-37:

NEW EMERGENCY module

  • The emergency module provides emergency call treatment, following the architecture i2 specification of the american entity NENA. (National Emergency Number Association). Read more here.

NEW FRAUD_DETECTION module

  • A new module that helps you prevent fraud by detecting fraudulent calls based on dialing patterns. Read more here.
February 25, 2015, at 01:44 PM by razvancrainea -
Added lines 30-32:

NEW COMPRESSION module

  • Added a new compression module which does message compression and compaction. Read more here.
Deleted lines 40-42:

NEW COMPRESSION module

  • Added a new compression module which does message compression and compaction. Read more here.
February 24, 2015, at 06:46 PM by razvancrainea -
Added lines 39-41:

NEW COMPRESSION module

  • Added a new compression module which does message compression and compaction. Read more here.
Deleted lines 91-94:

COMPRESSION module

  • Succesfully added compression module which does message compression and compaction. Read more

http://lists.opensips.org/pipermail/devel/2015-February/016340.html

February 19, 2015, at 05:24 PM by ionutionita92 -
Changed line 90 from:

USRLOC module

to:

COMPRESSION module

February 19, 2015, at 05:24 PM by ionutionita92 -
Added lines 89-93:

USRLOC module

  • Succesfully added compression module which does message compression and compaction. Read more

http://lists.opensips.org/pipermail/devel/2015-February/016340.html

February 02, 2015, at 01:32 PM by liviu -
Changed line 18 from:
  • Loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy module dependency specification logic for module developers! More information here ...
to:
  • loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy module dependency specification logic for module developers! More information here ...
January 23, 2015, at 06:34 PM by liviu -
Added lines 80-82:

REST_CLIENT module

  • rest_get() may now be used asynchronously. A usage example can be found in the module documentation.
January 23, 2015, at 06:32 PM by liviu -
Changed line 16 from:
  • Async DB core and API: Primitives for managing async DB connection pools. To be used by SQL drivers when implementing the async DB API.
to:
  • Asynchronous DB core and API: Primitives for managing async DB connection pools. To be used by SQL drivers when implementing the async DB API.
January 23, 2015, at 06:30 PM by liviu -
Changed line 34 from:
  • avp_db_query() may now be used asynchronously. For usage examples, please refer to the module documentation.
to:
  • avp_db_query() may now be used asynchronously. A usage example can be found in the module documentation.
January 23, 2015, at 06:29 PM by liviu -
Added lines 18-19:
  • Loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy module dependency specification logic for module developers! More information here ...
Deleted lines 21-22:
  • Loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy module dependency specification logic for module developers! More information here ...
Changed lines 34-35 from:
  • avp_db_query() may now be used asynchronously. For usage examples, please refer to the module documentation.
to:
  • avp_db_query() may now be used asynchronously. For usage examples, please refer to the module documentation.
Changed line 46 from:
  • The db_mysql module is now capable of doing asynchronous raw queries.
to:
  • The db_mysql module is now capable of doing asynchronous raw queries.
January 23, 2015, at 06:28 PM by liviu -
Added lines 16-17:
  • Async DB core and API: Primitives for managing async DB connection pools. To be used by SQL drivers when implementing the async DB API.
Added lines 33-35:

AVPOPS module

  • avp_db_query() may now be used asynchronously. For usage examples, please refer to the module documentation.
Added lines 44-46:

DB_MYSQL module

  • The db_mysql module is now capable of doing asynchronous raw queries.
October 10, 2014, at 02:53 PM by liviu -
Changed lines 16-17 from:
  • Debugging levels: complete rework. They can now be set globally or individually (per process) using the debug MI command. More information here ...
to:
  • Debugging levels: complete rework. They can now be set globally or individually (per process) using the debug MI command. More information here ...
Changed lines 25-27 from:
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
  • New string transformation (s.fill) - Fills a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples
to:
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
  • New string transformation (s.fill) - Fills a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples
Changed lines 35-36 from:
  • You can now specify attributes from the domain names that can be used later on from the script. More information here ...
to:
  • You can now specify attributes from the domain names that can be used later on from the script. More information here ...
Changed lines 38-39 from:
  • The rabbitmq module can now send messages to different exchanges . You can simply specify the exchange you want to use in the socket url. More information here ...
to:
  • The rabbitmq module can now send messages to different exchanges . You can simply specify the exchange you want to use in the socket url. More information here ...
Changed lines 41-43 from:
  • Call-ID topology hiding support was added within the dialog module - there are many cases where the callid contains IPs, thus revealing part of the network topology. More information here ...
  • Added the ability to propagate various Contact URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...
to:
  • Call-ID topology hiding support was added within the dialog module - there are many cases where the callid contains IPs, thus revealing part of the network topology. More information here ...
  • Added the ability to propagate various Contact URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...
Changed lines 45-47 from:
  • Routing is now partition based: you may specify which string translation rules want to use to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...
  • New column: timerec. Allows time recurrence based enabling of dialplan rules (accepted strings are RFC 2445 compatible). Backwards-compatible with the previous DB schema. More information here...
to:
  • Routing is now partition based: you may specify which string translation rules want to use to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...
  • New column: timerec. Allows time recurrence based enabling of dialplan rules (accepted strings are RFC 2445 compatible). Backwards-compatible with the previous DB schema. More information here...
Changed lines 49-50 from:
  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...
to:
  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...
Changed lines 52-56 from:
  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes ( eg: separate routing, prefix matching, etc ), while keeping the provisioning and reloading part fully separate. More information here...
  • Using the new MI function dr_reload_status you can get the time of the last "dr_reload" (update) for any partition. The feature is available even if you don't use partitions. More information here...
  • A new MI function dr_number_routing was added which allows to simulate a do_routing() call, by fetching the list of the gateways / carriers to which a number would be routed. More information here...
  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here...
to:
  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes ( eg: separate routing, prefix matching, etc ), while keeping the provisioning and reloading part fully separate. More information here...
  • Using the new MI function dr_reload_status you can get the time of the last "dr_reload" (update) for any partition. The feature is available even if you don't use partitions. More information here...
  • A new MI function dr_number_routing was added which allows to simulate a do_routing() call, by fetching the list of the gateways / carriers to which a number would be routed. More information here...
  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here...
Changed lines 58-59 from:
  • Added async event handling - Allows for running the events in an asynchronous mode ( in a dedicated process ). More information here ...
to:
  • Added async event handling - Allows for running the events in an asynchronous mode ( in a dedicated process ). More information here ...
Changed lines 61-62 from:
  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here ...
to:
  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here ...
Changed lines 67-69 from:
  • The sipmsg_validate function can now be used to check the From, To and Contact headers. More information here...
  • All the Codec related functions accepting regexps can now also accept pseudovariables containing the regex - allowing for fetching the REGEXPs from various sources ( eg. Database ). Read more here ...
to:
  • The sipmsg_validate function can now be used to check the From, To and Contact headers. More information here...
  • All the Codec related functions accepting regexps can now also accept pseudovariables containing the regex - allowing for fetching the REGEXPs from various sources ( eg. Database ). Read more here ...
Changed line 77 from:
  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...
to:
  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...
Changed line 79 from:

Devel Plan 1.12 release (TODO list)

to:

Devel Plan 2.4 release (TODO list)

October 09, 2014, at 07:30 PM by 89.120.101.121 -
Changed line 1 from:
About -> Available Versions -> 1.12.x Releases -> Release 2.4.0
to:
About -> Available Versions -> 2.4.x Releases -> Release 2.4.0
October 09, 2014, at 07:29 PM by 89.120.101.121 -
Added lines 1-116:
About -> Available Versions -> 1.12.x Releases -> Release 2.4.0

This page has been visited 7124 times. (:toc-float Table of Content:)


Migration from 1.11.x to 2.4.0

To be done on release date.


What is new in 2.4.0

Core

  • Debugging levels: complete rework. They can now be set globally or individually (per process) using the debug MI command. More information here ...
  • Loadmodule statement ordering: eliminated! Modules can now be loaded in any order within the config script. Also added an easy module dependency specification logic for module developers! More information here ...
  • New shm_check MI function - To be used when running with memory debugging ( DBG_QM_MALLOC memory allocator ). Does a complete scan of the shared memory pool and aborts OpenSIPS on any encountered memory error.

Script

  • New assert(statement, message) function - If statement does not hold, OpenSIPS can just print the message or even abort (if abort_on_assert is set to true).
  • New $rT pseudo variable - Holds the current route type as a string. Useful for determining the original route type when inside another route in script - Allows for more generic and reusable routes. More information here ...
  • New string transformation (s.fill) - Fills a string with a char/string until a given final length is reached. Refer to the transformations manual for usage examples

NEW RTPENGINE module

  • A new module that enables media streams to be proxied via RTPENGINE

CACHEDB_SQL module

  • Full rework of the module, including a better usage of the CACHEDB interface, and also allowing for multiple DB connections to be used from script.

DOMAIN module

  • You can now specify attributes from the domain names that can be used later on from the script. More information here ...

EVENT_RABBITMQ module

  • The rabbitmq module can now send messages to different exchanges . You can simply specify the exchange you want to use in the socket url. More information here ...

DIALOG module

  • Call-ID topology hiding support was added within the dialog module - there are many cases where the callid contains IPs, thus revealing part of the network topology. More information here ...
  • Added the ability to propagate various Contact URI parameters when doing topology hiding - helpful for preserving some end-to-end functionality relying on URI params. Read more here ...

DIALPLAN module

  • Routing is now partition based: you may specify which string translation rules want to use to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...
  • New column: timerec. Allows time recurrence based enabling of dialplan rules (accepted strings are RFC 2445 compatible). Backwards-compatible with the previous DB schema. More information here...

DISPATCHER module

  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes, while keeping the provisioning and reloading part fully separate. More information here...

DROUTING module

  • Routing is now partition based: you may specify by which partition's rules you want to route certain messages. Thus you can re-use the routing rules for various purposes ( eg: separate routing, prefix matching, etc ), while keeping the provisioning and reloading part fully separate. More information here...
  • Using the new MI function dr_reload_status you can get the time of the last "dr_reload" (update) for any partition. The feature is available even if you don't use partitions. More information here...
  • A new MI function dr_number_routing was added which allows to simulate a do_routing() call, by fetching the list of the gateways / carriers to which a number would be routed. More information here...
  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here...

EVENT_ROUTE module

  • Added async event handling - Allows for running the events in an asynchronous mode ( in a dedicated process ). More information here ...

LOAD_BALANCER module

  • Added a new event to be triggered when the state of a gateway is changed ( either from MI or via probing triggered from script ). More information here ...

MI_FIFO module

  • Reworked the FIFO handling - added support for detecting if the FIFO file gets deleted ( for re-creating it ), and also added SIGHUP signal handling for re-creating and re-opening of the FIFO file.

SIPMSGOPS module

  • The sipmsg_validate function can now be used to check the From, To and Contact headers. More information here...
  • All the Codec related functions accepting regexps can now also accept pseudovariables containing the regex - allowing for fetching the REGEXPs from various sources ( eg. Database ). Read more here ...

SIPTRACE module

  • Split the fromip and toip DB columns ( which previously contained IP & port ) into two separate columns containing IP and port - thus allowing for faster database searches based on IPs.

UAC module

  • When using the uac_auth() for having OpenSIPS do SIP authentication, the CSEQ number will be increased for subsequent authentication requests - thus fixing various downstream issues ( eg. Asterisk treating the AUTH request as a retransmission due to the same CSEQ number ).

USRLOC module

  • Added per contact events - raised when a new contact is inserted / updated / deleted. Read more here ...

Devel Plan 1.12 release (TODO list)

ImportanceModuleDescription
xxxxTMeven if decide to "go stateful" very early in your script (via t_newtran), all changes you do later over the request (in request route, branch route, failure route) must be updated/pushed into transaction and remembered at later processing
xxxxDIALOGre-INVITE based in-dialog pinging (with proper SDP handling)
xxxREGISTRARlookup() should have a flag to force lookup on all branches (and not only on RURI)
xxxDIALOGNew events for dialog matched, terminated, etc
xxxDIALOGcontrol profiles/variables DB storage - specify whether we want to ever dump the profies/variables in the DB or only on shutdown. Rethink the current design to see if is the best.
xxxUSRLOCdistributed storage via a NoSQL DB
xxxDIALOGdistributed storage via a NoSQL DB
xxxDIALOGbe able to end all dialogs belonging to a certain profile (MI only)
xxxUSRLOCwhen db is updated based on timer, combine multiple deletes in a single query
xxxSIPCAPTURETCP support
xxxRTPProxyadd ICE support for rtpproxy
xxxEvent Interfaceadd ZeroMQ support for Event Interface
xxxcoresend function (including from TM) should return a dedicated ret code to indicate network errors (failure in sending)
xxxcorefix insert_new_lump()/append_new_lump() logic throughout lumps_len()
xxxcoreonce fixed, replace all single anchor_lump()+insert_new_lump_{before,after}() calls with the simpler insert_new_lump() call
xxxnewIntegrate OpenSIPS with libpurple library for IM and Presence
xxTLS coreadd an internal API for TLS management to allow registration of certificates ; a new module to allow TLS certificates provisioning via DB (per domain, per IP, etc)
xxDROUTINGAllow the option to call do_routing with a particular number, but to propagate downstream a different number ( useful for number portability scenarios )
xxUSRLOCuse a single Primary Key (non SIP related) for DB ops
xxTMallow dynamic number of branches per transaction (on demand)
xxStatistics Interfacereplace the BIG LOCK (if other arch than i386) with multiple shared locks (to protect the values)
xxnewnew cachedb_virtual modules, similar to db_virtual, but for NoSQL databases
xxdb_virtualOpensips should be able to start even if db_virtual was not able to connect to all databases. So long as it can connect to at least 1 it should still work
xxB2BSupport for attended transfers on B2BUA
xxevent_datagramInstead of pushing events in text/plan format, to have also the options to pack the event in a json format -> easier to parse by the receiver
xxnewsupport for RFC5626 - Managing Client-Initiated Connections in SIP
xnewnew module mi_stream to provide MI interaction via connection oriented links (TCP or fifo)
xnewRFC6140 Registration for Multiple Phone Numbers
xAVPOPSRegexp based filter for avp_db_load - what AVPs to be loaded
xcoreBe able to specify multiple keys with the "cache_fetch" MI command
xcoreHandle OpenSIPS variable expansion within the format string of assert()
xscriptConsider implementing the "continue" and "break" keywords inside while and for-each
xcachedb coreAllow results to be written in any PV (not just $avp)
xscriptInteger operators: make "+=" and "-=" work!

Page last modified on April 05, 2018, at 03:14 PM