About

About.Version-3-1-0 History

Hide minor edits - Show changes to markup

June 02, 2020, at 03:39 PM by liviu -
Deleted lines 195-197:

TM module

  • fr_timer and fr_inv_timer are now completely removed (not just deprecated). Use fr_timeout and fr_inv_timeout instead!
May 28, 2020, at 01:49 AM by rvlad_patrascu -
Changed lines 77-81 from:
to:
  • write all the possible acc fields for failed accounting also, when using a DB backend with no schema such as db_flatstore.

AUTH module

  • add support for including the "auth-int" type of the qop parameter in the challange.
Added lines 206-208:

UAC_AUTH module

  • add support for the "auth-int" type of the qop parameter presented in the challange.
May 28, 2020, at 12:10 AM by rvlad_patrascu -
Added lines 70-72:

[NEW] UUID module

This module provides a way to generate universally unique identifiers (UUID) as specified in RFC 4122 for use in the OpenSIPS script.

May 27, 2020, at 02:46 AM by rvlad_patrascu -
May 27, 2020, at 02:37 AM by rvlad_patrascu -
Changed line 135 from:
  • add opaque, DB provisioned attribute strings to destinations. There are visible in the output of lb_list and lb_status MI commands, and can also be returned in the script through a new attrs parameter for the following script functions: lb_start, lb_next,lb_start_or_next, load_balance, lb_is_destination.
to:
  • add opaque, DB provisioned attribute strings to destinations. There are visible in the output of lb_list and lb_status MI commands, and can also be returned in the script through a new attrs optional parameter for the following script functions: lb_start, lb_next,lb_start_or_next, load_balance, lb_is_destination.
May 27, 2020, at 02:36 AM by rvlad_patrascu -
Added line 135:
  • add opaque, DB provisioned attribute strings to destinations. There are visible in the output of lb_list and lb_status MI commands, and can also be returned in the script through a new attrs parameter for the following script functions: lb_start, lb_next,lb_start_or_next, load_balance, lb_is_destination.
May 27, 2020, at 02:16 AM by rvlad_patrascu -
Changed lines 76-77 from:
  • new cluster_id module parameter that enables replication support for the back-to-back underlying layer. This provides clustering support for higher level modules that use the B2B engine, namely b2b_logic and media_exchange. You can find more information in this blog post.
to:
  • new cluster_id module parameter that enables replication support for the back-to-back underlying layer. This provides clustering support for some higher level modules that use the B2B engine, namely b2b_logic and media_exchange. You can find more information in this blog post.
Changed lines 116-117 from:
to:
  • improve clustering with data sync mechanism (at startup and after DB reload)
Changed lines 121-122 from:
to:
  • improve clustering with data sync mechanism (at startup and after DB reload)
Added lines 133-135:

LOAD_BALANCER

  • improve clustering with data sync mechanism (at startup and after DB reload)
Added lines 155-157:

PRESENCE module

  • add the full-sharing option for the cluster_federation_mode module parameter. In this new mode of operation, the published state is kept on all presence nodes even when there aren't any local subscribers.
May 27, 2020, at 01:45 AM by rvlad_patrascu -
Added lines 74-82:

B2B_ENTITIES

  • new cluster_id module parameter that enables replication support for the back-to-back underlying layer. This provides clustering support for higher level modules that use the B2B engine, namely b2b_logic and media_exchange. You can find more information in this blog post.

B2B_LOGIC

  • new $b2b_logic.key variable that returns the key of the current B2B session
  • new $b2b_logic.entity variable that returns information(entity key, Call-ID) about the entities involved in the current B2B session
  • new $b2b_logic.ctx variable that provides a custom Key-Value storage in the context of the ongoing B2B session.
May 27, 2020, at 12:39 AM by rvlad_patrascu -
Added lines 112-114:

EVENT_DATAGRAM module

  • The event payload is now formated as a JSON-RPC notification instead of the custom OpenSIPS line oriented formatting.
Changed lines 116-117 from:
  • provide a new parameter, suppress_event_name that can be used to suppress the name of the event sent in raised notifications.
to:
  • provide a new parameter, suppress_event_name that can be used to suppress the name of the event sent in raised notifications
  • the event payload is now formated as a JSON-RPC notification instead of the custom OpenSIPS line oriented formatting.
May 26, 2020, at 08:54 PM by liviu -
Added lines 75-77:

CACHEDB_MONGODB module

  • added support for "Timestamp" and "Binary" data types
Added lines 117-119:

MATHOPS module

  • math_rpn() now additionally supports negative operands
May 26, 2020, at 08:41 PM by liviu -
Added lines 161-163:

TM module

  • fr_timer and fr_inv_timer are now completely removed (not just deprecated). Use fr_timeout and fr_inv_timeout instead!
May 26, 2020, at 06:46 PM by 109.99.227.30 -
Added line 95:
  • extended the SIP Race condition support (RFC5407) by adding detection and handling for the early BYE vs 200OK race (under the same 'E' flag for 'create_dialog()')
May 26, 2020, at 06:38 PM by 109.99.227.30 -
Added lines 87-96:

CFGUTILS module

  • NEW: get_accurate_time(), useful whenever $Ts and $Tsm cannot be read atomically

DIALOG module

  • new load_dialog_ctx() and unload_dialog_ctx() to load the context of a different dialog. There is a nice blog post describing what you can do with these functions.
  • new dlg_on_answer(route), dlg_on_timeout(route) and dlg_on_hangup(route) functions to trigger custom script routes when a dialog is answered, times out or gets terminated. Read more in this blog post.
  • new dlg_send_sequential() function used to send arbitrary SIP request within a dialog.
  • the $DLG_json variable returns now the list of profiles also
Added lines 104-107:

DROUTING module

  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
  • new dr_match() function for testing the matching of a number against the DR rules (with no routing, just matching).
Deleted lines 109-123:

CFGUTILS module

  • NEW: get_accurate_time(), useful whenever $Ts and $Tsm cannot be read atomically

DIALOG module

  • new load_dialog_ctx() and unload_dialog_ctx() to load the context of a different dialog. There is a nice blog post describing what you can do with these functions.
  • new dlg_on_answer(route), dlg_on_timeout(route) and dlg_on_hangup(route) functions to trigger custom script routes when a dialog is answered, times out or gets terminated. Read more in this blog post.
  • new dlg_send_sequential() function used to send arbitrary SIP request within a dialog.
  • the $DLG_json variable returns now the list of profiles also

DROUTING module

  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
  • new dr_match() function for testing the matching of a number against the DR rules (with no routing, just matching).
May 26, 2020, at 06:35 PM by 109.99.227.30 -
Added lines 86-92:

DISPATCHER module

  • new dispatching algorithm 10, for using a a script route (defined via the algo_route module parameter) for calculating the weights of the destinations.
  • new mechanism for operating with script attributes:
    • the attributes will be exposed (during dispatching) via the script_attrs_avp
    • the attributes may be pushed via the ds_push_script_attrs() script function or via the ds_push_script_attrs MI function
    • the attributes may be fetched at script level via the get_script_attrs() function
May 26, 2020, at 06:09 PM by 109.99.227.30 -
Added lines 61-63:

[NEW] RATE_CACHER module

The rate_cacher module provides a means of caching and real-time querying of the ratesheets assigned to your clients and / or vendors. It also allows for real-time cost-based routing and cost-based filtering. What the module is able to do, how to provision and use it, all are nicely described in this blog post.

May 26, 2020, at 06:06 PM by 109.99.227.30 -
Added lines 49-51:

[NEW] AUTH_JWT module

The module implements authentication over JSON Web Tokens. In some cases ( ie. WebRTC ) the user authenticates on another layer ( other than SIP ), so it makes no sense to double-authenticate it on the SIP layer. Thus, the SIP client will simply present the JWT auth token it received from the server, and pass it on to OpenSIPS which will use that for authentication purposes. For more, see the module documentation.

May 26, 2020, at 06:02 PM by 109.99.227.30 -
Added lines 118-120:

PROTO_SMPP module

  • added support for UCS2 encoding in SMS messages (in & out)
May 26, 2020, at 05:59 PM by 109.99.227.30 -
Added line 92:
  • the $DLG_json variable returns now the list of profiles also
May 26, 2020, at 04:59 PM by 109.99.227.30 -
Changed lines 113-114 from:

TODO -bogdan

to:

There is major rework of the module not make it call forking enabled - the 'pua_dialoginfo' module is able now to get access to the transaction information (not only to the dialog information as before); this made the module aware of the multiple branches created, not only dialog aware, so data related to call branches can now be also published. The new BLF implementation has two major advantages:

  • it is able to expose events related to call forking (prior to call answering). This will provide a more accurate insight of the call genesis.
  • it correctly reports the callee party, both in serial forking (when the callee changes) and in parallel forking (when you have multiple callee parties in the same time); see the new dialoginfo_set_branch_callee() and dialoginfo_mute_branch() functions.

See more details in this comprehensive blog post.

Changed line 153 from:
  • The 'domain' attribute has been added to all events
to:
  • The 'domain' attribute has been added to all events
May 26, 2020, at 04:58 PM by razvancrainea -
Added line 91:
  • new dlg_send_sequential() function used to send arbitrary SIP request within a dialog.
May 26, 2020, at 04:52 PM by 109.99.227.30 -
Changed lines 57-58 from:

The module enables the handling of the "as-feature-event" event package (as defined by Broadsoft's Device Feature Key Synchronization protocol) by the presence module. This can be used to synchronize the status of features such as Do Not Disturb and different forwarding types between a SIP phone and a SIP server. Technical specs and more details are available in the module's readme.

to:

The module enables the handling of the "as-feature-event" event package (as defined by Broadsoft's Device Feature Key Synchronization protocol) by the presence module. This can be used to synchronize the status of features such as Do Not Disturb and different forwarding types between a SIP phone and a SIP server. Technical specs and more details are available in the module's readme. Also, for more , see this blog post.

Changed line 89 from:
  • new load_dialog_ctx() and unload_dialog_ctx() to load the context of a different dialog.
to:
  • new load_dialog_ctx() and unload_dialog_ctx() to load the context of a different dialog. There is a nice blog post describing what you can do with these functions.
May 26, 2020, at 04:36 PM by 109.99.227.30 -
Added line 90:
  • new dlg_on_answer(route), dlg_on_timeout(route) and dlg_on_hangup(route) functions to trigger custom script routes when a dialog is answered, times out or gets terminated. Read more in this blog post.
May 26, 2020, at 03:30 PM by razvancrainea -
Added line 79:
  • new audio message can be played back to the agent to announce him about the flow he's getting the call for, using the message_flow_id column in the database.
May 26, 2020, at 03:23 PM by razvancrainea -
Added line 123:
  • Intercept RFC 22833/4733 DTMF events and trigger them in OpenSIPS using the new E_RTPENGINE_NOTIFICATION event.
May 26, 2020, at 03:18 PM by razvancrainea -
Changed lines 136-137 from:
to:
  • The function also does auto-conversion between UTF-8 and GSM7.
Added line 143:
  • Add support for TLSv3
May 26, 2020, at 02:17 PM by razvancrainea -
Added lines 130-132:

SIPREC module

  • Provide extra headers to the request going to the SIPREC server when calling the siprec_start_recording function.
May 26, 2020, at 02:11 PM by razvancrainea -
Added lines 120-123:

RTPEngine module

  • Add new functions to manipulate RTP streams from rtpproxy, such as rtpengine_play_media, rtpengine_stop_media, rtpengine_block_media, rtpengine_unblock_media, rtpengine_block_dtmf, rtpengine_unblock_dtmf, rtpengine_start_forwarding, rtpengine_stop_forwarding, rtpengine_play_dtmf. You can find all the available functions here.
  • Add new statistics for variables provided by RTPEngine: jitter-average, roundtrip-average, packetloss-average, jitter-min, roundtrip-min, packetloss-min, jitter-max, roundtrip-max, packetloss-max, jitter-min-at, roundtrip-min-at, packetloss-min-at, jitter-max-at, roundtrip-max-at, packetloss-min-at.
Deleted line 126:
  • Add new functions to manipulate RTP streams from rtpproxy, such as rtpengine_play_media, rtpengine_stop_media, rtpengine_block_media, rtpengine_unblock_media, rtpengine_block_dtmf, rtpengine_unblock_dtmf, rtpengine_start_forwarding, rtpengine_stop_forwarding, rtpengine_play_dtmf. You can find all the available functions here.
May 25, 2020, at 02:33 PM by razvancrainea -
Added lines 49-51:

[NEW] Call Operations module

The new CallOps module provides a set of functions to control the behavior of an ongoing call. Using this module you can start a new call, trigger call blind and attended transfers, put a call on hold, etc. Check out more information in the module's documentation page.

May 19, 2020, at 12:45 AM by 109.98.32.84 -
Changed lines 64-65 from:
to:
  • new acc_load_ctx_from_dlg() and acc_unload_ctx_from_dlg() functions to load the accounting context of another dialog.
Added lines 83-87:

DIALOG module

  • new load_dialog_ctx() and unload_dialog_ctx() to load the context of a different dialog.
Added lines 121-123:

SIGNALING module

  • new script variable $sip_local_totag to return the local To-tag that will be used by OpenSIPS for locally sending replies to the current SIP request.
May 18, 2020, at 11:13 PM by 109.98.32.84 -
Added lines 38-39:
May 13, 2020, at 12:21 AM by 109.98.32.84 -
Changed line 37 from:
to:
May 13, 2020, at 12:20 AM by 109.98.32.84 -
Changed line 37 from:
to:
May 13, 2020, at 12:15 AM by 109.98.32.84 -
Added lines 36-37:
May 12, 2020, at 06:56 PM by 109.98.32.84 -
Added line 80:
  • new dr_match() function for testing the matching of a number against the DR rules (with no routing, just matching).
May 12, 2020, at 06:54 PM by liviu -
Added line 88:
  • NEW: standards-based SIP Push Notification support (RFC 8599): Read more...
Added line 99:
  • NEW: standards-based SIP Push Notification support (RFC 8599): Read more...
April 29, 2020, at 10:58 PM by liviu -
Changed line 59 from:
  • any acc variables set within the global onreply_route will be carrier over to the stateful reply routes (e.g. transaction-level on-reply route and branch-level on-reply route), as well as until the end of the dialog
to:
  • any acc variables set within the global onreply_route are now carried over to the stateful reply routes (e.g. transaction-level on-reply route and branch-level on-reply route), as well as until the end of the dialog
April 29, 2020, at 10:58 PM by liviu -
Added lines 57-59:

ACC module

  • any acc variables set within the global onreply_route will be carrier over to the stateful reply routes (e.g. transaction-level on-reply route and branch-level on-reply route), as well as until the end of the dialog
April 29, 2020, at 04:18 PM by liviu -
Changed lines 89-90 from:
  • NEW modparams: max_username_len, max_domain_len and max_aor_len
to:
  • NEW modparams: max_username_len, max_domain_len, max_aor_len and max_contact_len
Changed line 95 from:
  • NEW modparams: max_username_len, max_domain_len and max_aor_len
to:
  • NEW modparams: max_username_len, max_domain_len,max_aor_len and max_contact_len
April 23, 2020, at 09:30 PM by liviu -
Added lines 77-79:

FRAUD_DETECTION module

  • the threshold names reported in the events have been normalized to: "calls-per-minute", "total-calls", "concurrent-calls", "sequential-calls" and "call-duration".
April 23, 2020, at 02:13 PM by 109.98.32.84 -
Changed line 35 from:
  • new $socket_in/$socket_in() and $socket_out/$socket_out() scripting variables to provide detailed access to the inbound socket (used to received the message) and outbound socket (used to send out the message). These variables obsolete $fs, $Ri, $Rp, $pr and $proto
to:
  • new $socket_in/$socket_in() and $socket_out/$socket_out() scripting variables to provide detailed access to the inbound socket (used to received the message) and outbound socket (used to send out the message). These variables obsolete $fs, $Ri, $Rp, $af, $pr and $proto
April 23, 2020, at 01:20 PM by 109.98.32.84 -
Added lines 34-35:
  • new $socket_in/$socket_in() and $socket_out/$socket_out() scripting variables to provide detailed access to the inbound socket (used to received the message) and outbound socket (used to send out the message). These variables obsolete $fs, $Ri, $Rp, $pr and $proto
April 23, 2020, at 12:22 PM by 109.98.32.84 -
Added lines 32-34:
  • the tcp_listen_backlog parameter was renamed as tcp_socket_backlog preserving the same definition and behavior
April 23, 2020, at 11:56 AM by 109.98.32.84 -
Changed lines 42-43 from:
  • A new module that provides means to exchange SDP bodies between different calls has been added. Using this new module one can implement enhanced features such as playing back announcements or music on hold files during an ongoing call, or listening a conversation of two different participants. You can find more information about the new module in the module's documentation page.
to:

A new module that provides means to exchange SDP bodies between different calls has been added. Using this new module one can implement enhanced features such as playing back announcements or music on hold files during an ongoing call, or listening a conversation of two different participants. You can find more information about the new module in the module's documentation page.

Changed line 51 from:
  • A new module which keeps track of the signaling quality of each outbound gateway at runtime and dynamically alters the gateway ordering in order to ensure an optimal quality for your platform's PSTN termination signaling! (documentation) (blog)
to:

A new module which keeps track of the signaling quality of each outbound gateway at runtime and dynamically alters the gateway ordering in order to ensure an optimal quality for your platform's PSTN termination signaling! (documentation) (blog)

April 23, 2020, at 11:55 AM by 109.98.32.84 -
Added lines 44-46:

[NEW] PRESENCE_DFKS module

The module enables the handling of the "as-feature-event" event package (as defined by Broadsoft's Device Feature Key Synchronization protocol) by the presence module. This can be used to synchronize the status of features such as Do Not Disturb and different forwarding types between a SIP phone and a SIP server. Technical specs and more details are available in the module's readme.

Changed line 48 from:

This module adds support for implementing STIR/SHAKEN (RFC 8224, RFC 8588) Authentication and Verification services in OpenSIPS. A more comprehensive description is available on the OpenSIPS blog, while the technical details are available in the https://opensips.org/docs/modules/3.1.x/stir_shaken.htmlmodule's readme.

to:

This module adds support for implementing STIR/SHAKEN (RFC 8224, RFC 8588) Authentication and Verification services in OpenSIPS. A more comprehensive description is available on the OpenSIPS blog, while the technical details are available in the module's readme.

April 23, 2020, at 11:52 AM by 109.98.32.84 -
Added lines 31-32:
  • the listen parameter was renamed as socket preserving the same definition and behavior
Added lines 43-45:

[NEW] STIR_SHAKEN module

This module adds support for implementing STIR/SHAKEN (RFC 8224, RFC 8588) Authentication and Verification services in OpenSIPS. A more comprehensive description is available on the OpenSIPS blog, while the technical details are available in the https://opensips.org/docs/modules/3.1.x/stir_shaken.htmlmodule's readme.

April 22, 2020, at 11:48 PM by liviu -
Added lines 64-66:

MI_FIFO module

  • fifo_name is no longer mandatory (default: "/tmp/opensips_fifo")
April 22, 2020, at 10:51 PM by liviu -
Added line 80:
  • the "Expect: 100-continue" header field for HTTP POST/PUT is now disabled by default, controllable via a new modparam, enable_expect_100
April 19, 2020, at 05:12 PM by 109.98.32.84 -
Changed lines 54-55 from:
to:
  • new optional script_param parameter to the cc_handle_call() to be passed as parameter to the "callcenter" and "agent" B2B scenarios. It is intended for custom integration of the call center module and it is 100% up to the script writer about the value and purpose of this parameter, OpenSIPS will not touch or interpret it.
April 19, 2020, at 04:43 PM by 109.98.32.84 -
Changed line 51 from:
  • the cc_agents table customization via module parameter (name of the table and name of the columns)
to:
  • the cc_agents & cc_flows tables customization via module parameter (names of the tables and names of the columns)
April 18, 2020, at 11:39 PM by 109.98.32.84 -
Added lines 52-53:
  • an optional separate db_url is available for runtime tables (cc_calls)
  • new module parameter reject_on_no_agents to avoid rejection of new incoming calls if there is no agent logged in the flow; Such calls will be queued.
April 18, 2020, at 11:20 PM by 109.98.32.84 -
Added lines 47-53:
  • added per-flow call dissuading support; the dissuading means to redirect a call to another destination (SIP URI), if the queue/flow is overloaded:
    • if the number of calls already in the queue exceeds the diss_qsize_th threshold
    • if the estimated time to wait of the queue exceeds the diss_ewt_th threshold
    • if the call was waiting in the queue for longer than diss_onhold_th threshold
  • the cc_agents table customization via module parameter (name of the table and name of the columns)
April 18, 2020, at 09:58 PM by 109.98.32.84 -
Changed lines 45-47 from:

Dynamic Routing module

  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
to:

CALL_CENTER module

  • added improved wrapup time support. Now there is optional per-flow and per-agent wrapup time.
Added lines 54-56:

DROUTING module

  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
Added lines 63-65:

PUA_DIALOGINFO module

TODO -bogdan

April 16, 2020, at 12:05 AM by liviu -
Changed lines 79-82 from:
  • The tls_method parameter can now accept a range of TLS versions to accept.
to:
  • The tls_method parameter can now accept a range of TLS versions to accept.

USRLOC module

  • The 'domain' attribute has been added to all events
March 25, 2020, at 03:13 PM by razvancrainea -
Changed line 40 from:
  • A new module that provides means to exchange SDP bodies between different calls has been added. Using this new module one can implement enhanced features such as playing back announcements or music on hold files during an ongoing call, or listening a conversation of two different participants. You can find more information about the new module in the documentation page.
to:
  • A new module that provides means to exchange SDP bodies between different calls has been added. Using this new module one can implement enhanced features such as playing back announcements or music on hold files during an ongoing call, or listening a conversation of two different participants. You can find more information about the new module in the module's documentation page.
March 25, 2020, at 03:13 PM by razvancrainea -
Changed line 40 from:
  • A new module that provides means to exchange SDP bodies between different calls has been added. Using this new module one can implement enhanced features such as playing back announcements or music on hold files during an ongoing call, or listening a conversation of two different participants. You can find more information about the new module in the (documentation) page.
to:
  • A new module that provides means to exchange SDP bodies between different calls has been added. Using this new module one can implement enhanced features such as playing back announcements or music on hold files during an ongoing call, or listening a conversation of two different participants. You can find more information about the new module in the documentation page.
March 25, 2020, at 03:12 PM by razvancrainea -
Added lines 39-40:

[NEW] Media Exchange module

  • A new module that provides means to exchange SDP bodies between different calls has been added. Using this new module one can implement enhanced features such as playing back announcements or music on hold files during an ongoing call, or listening a conversation of two different participants. You can find more information about the new module in the (documentation) page.
February 28, 2020, at 01:58 PM by rvlad_patrascu -
Added lines 72-74:

TOPOLOGY_HIDING module

  • NEW th_contact_encode_scheme modparam that allows changing the encoding scheme for the Contact URI parameter between base64 and base32.
February 13, 2020, at 06:40 PM by liviu -
Changed line 41 from:
  • A new module which keeps track of the signaling quality of each outbound gateway at runtime and dynamically alters the gateway ordering in order to ensure an optimal quality for your platform's PSTN termination signaling! module documentation
to:
  • A new module which keeps track of the signaling quality of each outbound gateway at runtime and dynamically alters the gateway ordering in order to ensure an optimal quality for your platform's PSTN termination signaling! (documentation) (blog)
February 10, 2020, at 03:11 PM by liviu -
Changed line 41 from:
  • A new module which keeps track of the signaling quality of each outbound gateway at runtime and dynamically alters the gateway ordering in order to ensure an optimal quality for your platform's PSTN termination signaling! [[https://opensips.org/docs/modules/3.1.x/qrouting.html|module documentation]
to:
  • A new module which keeps track of the signaling quality of each outbound gateway at runtime and dynamically alters the gateway ordering in order to ensure an optimal quality for your platform's PSTN termination signaling! module documentation
February 10, 2020, at 03:11 PM by liviu -
Added lines 39-41:

[NEW] Quality-based Routing Module (qrouting)

  • A new module which keeps track of the signaling quality of each outbound gateway at runtime and dynamically alters the gateway ordering in order to ensure an optimal quality for your platform's PSTN termination signaling! [[https://opensips.org/docs/modules/3.1.x/qrouting.html|module documentation]
February 07, 2020, at 10:30 PM by liviu -
Changed lines 19-21 from:
  • the strange "if $var(x) {..." syntax is not allowed anymore (source)
  • the return statement has been extended. Now you can also say "return 1;" or "return $var(foo);" (source)
to:
  • the strange if $var(x) {... syntax is not allowed anymore (source)
  • the return statement has been extended. Now you can also say return 1; or return $var(foo); (source)
February 07, 2020, at 10:29 PM by liviu -
Changed line 21 from:
  • the return statement has been simplified, now you can say "return 1;" or "return $var(foo);" (source)
to:
  • the return statement has been extended. Now you can also say "return 1;" or "return $var(foo);" (source)
February 07, 2020, at 06:40 PM by liviu -
Changed line 53 from:
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and '''p2 options to mid_registrar_save() (on par with registrar).
to:
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and p2 options to mid_registrar_save() (on par with registrar).
February 07, 2020, at 06:36 PM by liviu -
Changed lines 17-18 from:
  • the break keyword now fully works with any (nested) switch, while and for-each statements
to:
  • the break keyword now fully works with any (nested) switch, while and for-each statements (source)
  • the strange "if $var(x) {..." syntax is not allowed anymore (source)
  • the return statement has been simplified, now you can say "return 1;" or "return $var(foo);" (source)
  • the +=, -=, *=, /=, %=, &=, |= and ^= operators are now fully working (source)
Added lines 54-57:
  • NEW modparams: max_username_len, max_domain_len and max_aor_len

REGISTRAR module

  • NEW modparams: max_username_len, max_domain_len and max_aor_len
February 05, 2020, at 08:04 PM by liviu -
Changed lines 35-36 from:
  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
to:
  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
Changed lines 38-39 from:
  • provide a new parameter, suppress_event_name that can be used to suppress the name of the event sent in raised notifications.
to:
  • provide a new parameter, suppress_event_name that can be used to suppress the name of the event sent in raised notifications.
Changed lines 41-42 from:
  • NEW: get_accurate_time(), useful whenever $Ts and $Tsm cannot be read atomically
to:
  • NEW: get_accurate_time(), useful whenever $Ts and $Tsm cannot be read atomically
Changed lines 44-48 from:
  • NEW: max_contacts modparam and mid_registrar_save() option (on par with registrar)
  • NEW: "o" (Only request contacts) flag for mid_registrar_save(). Limits the Contacts included in the 200 OK reply to the registered set of contacts. Although this flag breaks RFC 3261, it is often required in Push Notification setups.
  • NEW: Attributes AVP storage and retrieval (on par with registrar)
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and '''p2 options to mid_registrar_save() (on par with registrar).
to:
  • NEW: max_contacts modparam and mid_registrar_save() option (on par with registrar)
  • NEW: "o" (Only request contacts) flag for mid_registrar_save(). Limits the Contacts included in the 200 OK reply to the registered set of contacts. Although this flag breaks RFC 3261, it is often required in Push Notification setups.
  • NEW: Attributes AVP storage and retrieval (on par with registrar)
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and '''p2 options to mid_registrar_save() (on par with registrar).
Changed lines 50-51 from:
  • new {rest.escape} and {rest.unescape} transformations (contributed by Callum Guy)
to:
  • new {rest.escape} and {rest.unescape} transformations (contributed by Callum Guy)
Changed lines 53-56 from:
  • Add support for intercepting RFC 22833/4733 DTMF events and trigger them in OpenSIPS using the new E_RTPPROXY_DTMF_EVENT. This feature is currently available in the RTPProxy rtpp_2_1_dtmf branch.
  • Provide means to specify a custom notification socket for RTPProxy by adding it as a parameter to the n flag. Find more information in the rtpproxy_engage documentation.
  • Add new functions to manipulate RTP streams from rtpproxy, such as rtpengine_play_media, rtpengine_stop_media, rtpengine_block_media, rtpengine_unblock_media, rtpengine_block_dtmf, rtpengine_unblock_dtmf, rtpengine_start_forwarding, rtpengine_stop_forwarding, rtpengine_play_dtmf. You can find all the available functions here.
to:
  • Add support for intercepting RFC 22833/4733 DTMF events and trigger them in OpenSIPS using the new E_RTPPROXY_DTMF_EVENT. This feature is currently available in the RTPProxy rtpp_2_1_dtmf branch.
  • Provide means to specify a custom notification socket for RTPProxy by adding it as a parameter to the n flag. Find more information in the rtpproxy_engage documentation.
  • Add new functions to manipulate RTP streams from rtpproxy, such as rtpengine_play_media, rtpengine_stop_media, rtpengine_block_media, rtpengine_unblock_media, rtpengine_block_dtmf, rtpengine_unblock_dtmf, rtpengine_start_forwarding, rtpengine_stop_forwarding, rtpengine_play_dtmf. You can find all the available functions here.
Changed lines 58-59 from:
  • The send_smpp_message function can now accept variable source and destination numbers, as well as body and encoding.
to:
  • The send_smpp_message function can now accept variable source and destination numbers, as well as body and encoding.
Changed line 61 from:
  • The tls_method parameter can now accept a range of TLS versions to accept.
to:
  • The tls_method parameter can now accept a range of TLS versions to accept.
February 03, 2020, at 07:35 PM by liviu -
Added lines 40-42:

CFGUTILS module

  • NEW: get_accurate_time(), useful whenever $Ts and $Tsm cannot be read atomically
Changed lines 44-45 from:
  • NEW: max_contacts modparam and save() option (on par with registrar)
  • NEW: "o" (Only request contacts) flag for save(). Limits the Contacts included in the 200 OK reply to the registered set of contacts. Although this flag breaks RFC 3261, it is often required in Push Notification setups.
to:
  • NEW: max_contacts modparam and mid_registrar_save() option (on par with registrar)
  • NEW: "o" (Only request contacts) flag for mid_registrar_save(). Limits the Contacts included in the 200 OK reply to the registered set of contacts. Although this flag breaks RFC 3261, it is often required in Push Notification setups.
Changed line 47 from:
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and '''p2 options to save() (on par with registrar).
to:
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and '''p2 options to mid_registrar_save() (on par with registrar).
February 03, 2020, at 07:32 PM by liviu -
Changed line 44 from:
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and p2 options (on par with registrar).
to:
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and '''p2 options to save() (on par with registrar).
February 03, 2020, at 07:31 PM by liviu -
Added lines 39-44:

MID_REGISTRAR module

  • NEW: max_contacts modparam and save() option (on par with registrar)
  • NEW: "o" (Only request contacts) flag for save(). Limits the Contacts included in the 200 OK reply to the registered set of contacts. Although this flag breaks RFC 3261, it is often required in Push Notification setups.
  • NEW: Attributes AVP storage and retrieval (on par with registrar)
  • NEW: Path Header (RFC 3327) Support, via the p0, p1 and p2 options (on par with registrar).
February 03, 2020, at 07:03 PM by liviu -
Changed line 17 from:
  • the break keyword now fully works with the switch, while and for-each statements
to:
  • the break keyword now fully works with any (nested) switch, while and for-each statements
February 03, 2020, at 12:16 PM by liviu -
Changed line 41 from:
  • new {rest.escape} and {rest_unescape} transformations (contributed by Callum Guy)
to:
  • new {rest.escape} and {rest.unescape} transformations (contributed by Callum Guy)
February 03, 2020, at 12:15 PM by liviu -
Added lines 39-41:

REST_CLIENT module

  • new {rest.escape} and {rest_unescape} transformations (contributed by Callum Guy)
January 21, 2020, at 06:41 PM by razvancrainea -
Changed lines 43-49 from:
  • Add new functions to manipulate RTP streams from rtpproxy, such as rtpengine_play_media, rtpengine_stop_media, rtpengine_block_media, rtpengine_unblock_media, rtpengine_block_dtmf, rtpengine_unblock_dtmf, rtpengine_start_forwarding, rtpengine_stop_forwarding, rtpengine_play_dtmf. You can find all the available functions here.
to:
  • Add new functions to manipulate RTP streams from rtpproxy, such as rtpengine_play_media, rtpengine_stop_media, rtpengine_block_media, rtpengine_unblock_media, rtpengine_block_dtmf, rtpengine_unblock_dtmf, rtpengine_start_forwarding, rtpengine_stop_forwarding, rtpengine_play_dtmf. You can find all the available functions here.

SMPP module

  • The send_smpp_message function can now accept variable source and destination numbers, as well as body and encoding.

TLS_MGM module

  • The tls_method parameter can now accept a range of TLS versions to accept.
January 14, 2020, at 05:17 PM by razvancrainea -
Changed line 38 from:
  • provide a new parameter, param_suppress_event_name that can be used to suppress the name of the event sent in raised notifications.
to:
  • provide a new parameter, suppress_event_name that can be used to suppress the name of the event sent in raised notifications.
January 14, 2020, at 05:16 PM by razvancrainea -
Added lines 36-38:

Event RabbitMQ module

  • provide a new parameter, param_suppress_event_name that can be used to suppress the name of the event sent in raised notifications.
January 08, 2020, at 04:36 PM by razvancrainea -
Changed lines 39-40 from:
  • Provide means to specify a custom notification socket for RTPProxy by adding it as a parameter to the n flag. Find more information in the rtpproxy_engage documentation.
to:
  • Provide means to specify a custom notification socket for RTPProxy by adding it as a parameter to the n flag. Find more information in the rtpproxy_engage documentation.
  • Add new functions to manipulate RTP streams from rtpproxy, such as rtpengine_play_media, rtpengine_stop_media, rtpengine_block_media, rtpengine_unblock_media, rtpengine_block_dtmf, rtpengine_unblock_dtmf, rtpengine_start_forwarding, rtpengine_stop_forwarding, rtpengine_play_dtmf. You can find all the available functions here.
December 03, 2019, at 09:50 AM by razvancrainea -
Changed lines 38-39 from:
  • Add support for intercepting RFC 22833/4733 DTMF events and trigger them in OpenSIPS using the new E_RTPPROXY_DTMF_EVENT.
to:
  • Add support for intercepting RFC 22833/4733 DTMF events and trigger them in OpenSIPS using the new E_RTPPROXY_DTMF_EVENT. This feature is currently available in the RTPProxy rtpp_2_1_dtmf branch.
  • Provide means to specify a custom notification socket for RTPProxy by adding it as a parameter to the n flag. Find more information in the rtpproxy_engage documentation.
December 03, 2019, at 09:46 AM by razvancrainea -
Changed lines 35-38 from:
  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
to:
  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.

RTPProxy module

  • Add support for intercepting RFC 22833/4733 DTMF events and trigger them in OpenSIPS using the new E_RTPPROXY_DTMF_EVENT.
November 14, 2019, at 03:09 PM by 109.99.227.30 -
Added lines 22-23:
  • auto_aliases parameter's default value was changed to off/no/0.
October 04, 2019, at 05:25 PM by razvancrainea -
Added lines 26-29:

OpenSIPS core MI functions

  • you can now raise an event using the raise_event core MI function.
September 19, 2019, at 02:45 PM by 109.99.227.30 -
Changed line 29 from:
  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
to:
  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
September 19, 2019, at 02:44 PM by 109.99.227.30 -
Changed lines 25-29 from:
  • core functions now benefit from the same function parameter interface introduced in OpenSIPS 3.0 for module functions. See the function calling conventions here.
to:
  • core functions now benefit from the same function parameter interface introduced in OpenSIPS 3.0 for module functions. See the function calling conventions here.

Dynamic Routing module

  • support for non-digit characters in routing prefixes was added. The new modparam extra_prefix_chars allows the definition of a list of such extra non-digit chars.
August 08, 2019, at 06:25 PM by rvlad_patrascu -
Changed line 8 from:

Migration from 3.0.x to 3.1.0

to:
August 08, 2019, at 06:19 PM by rvlad_patrascu -
Added lines 23-25:

OpenSIPS core

  • core functions now benefit from the same function parameter interface introduced in OpenSIPS 3.0 for module functions. See the function calling conventions here.
July 27, 2019, at 12:56 PM by liviu -
Changed line 17 from:
  • simplified iteration: the break keyword now fully works with the switch, while and for-each statements
to:
  • the break keyword now fully works with the switch, while and for-each statements
July 27, 2019, at 01:58 AM by liviu -
Changed line 17 from:
  • simplified iteration: the break keyword now fully works with the switch, while and for-each statements
to:
  • simplified iteration: the break keyword now fully works with the switch, while and for-each statements
July 27, 2019, at 01:58 AM by liviu -
Changed lines 8-9 from:

Migration from 3.0.x to 3.1.0]]

to:

Migration from 3.0.x to 3.1.0

Added line 17:
  • simplified iteration: the break keyword now fully works with the switch, while and for-each statements
June 28, 2019, at 05:15 PM by 109.99.227.30 -
Changed lines 18-21 from:
  • added new string transformation {isprivate} to test if an IP address (as string) is a private or not
to:
  • added new IP transformation {isprivate} to test if an IP address (as string) is a private or not
  • added new IP transformations {isip4} and {isip6} to test if an IP address (as string) is an IPv4 or IPv6 address
June 28, 2019, at 05:11 PM by 109.99.227.30 -
Added lines 6-18:

Migration from 3.0.x to 3.1.0]]


What is new in 3.1.0

OpenSIPS script

  • added new string transformation {isprivate} to test if an IP address (as string) is a private or not
April 16, 2019, at 10:26 PM by 109.99.227.30 -
Deleted lines 5-185:

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

Migration from 2.4.x to 3.1.0?


What is new in 3.1.0

OpenSIPS script

  • new core pseudo-variable $hdr_name (details here) that returns the name of a SIP header at a given index.
  • new SDP transformation {sdp.stream,media} which returns a specific stream from an SDP body. Read more here.
  • new SDP transformation {sdp.stream-delete,media} used to delete a stream based on its index or media type. Read more here.
  • global parameter xlog_default_level was renamed as xlog_print_level'
  • added new global parameter xlog_level - similar to log_level but independently controls the verbosity of the xlog() functions.
  • added new script variable $xlog_level to set/reset per process bases the value of the xlog'ing threshold.
  • added new string transformation {s.reverse} to reverse a string
  • added new IP transformation {ip.matches,ip/masklen} for checking IPs against network masks (in short format).

OpenSIPS core

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

Routing Script Re-load

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

Processes Auto-Scaling Support

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

Generic Preprocessor Support

This feature adds full built-in pre-processing support for the OpenSIPS script. OpenSIPS 3.1 integrates various existing pre-processors within OpenSIPS. This simplify the scripting itself, the script portability across multiple servers and not to mention the entire deployment process of more complex platforms (where OpenSIPS is just a part of it). Even more, you will be able to use your preferred pre-processor and align OpenSIPS with the rest of your system (M4, Jinja, Embedded Ruby or others).
Read a full description of this feature here.

New OpenSIPS CLI (Command Line Interface) tool

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

Selectable Memory Allocator Support

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

Internal Memory Persistence during Restart

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

MI Interaction Standardization

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

Module Functions Now Benefit From a New Parameter Interface

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

SMPP module (NEW)

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

RABBITMQ_CONSUMER (NEW)

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

TLS_MGM module

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

AUTH_AAA module

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

AUTH_DB module

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

AVPOPS module

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

CACHEDB_LOCAL module

  • Added data replication capability (for the cached data) via the clusterer engine
  • Added new module parameter cluster_id and cluster_persistency for controlling the data clustering.

CLUSTERER module

  • the module provides now an unified sharing tag support - it is the only one responsible for managing the sharing tags (definitions, cluster ops, etc). The other module that needs to check the sharing tags can do it via the clusterer API. The sharing tag managing from presence and dialog modules was removed.
    • added the sharing_tag module parameter for sharing tag definition.
    • added clusterer_list_shtags for listing all know tags (and their state)
    • added clusterer_shtag_set_active for switching a tag to active
    • new script variable $cluster.sh_tag(tag/cluster_id) is now available at script level for read/write operations over the sharing tags

DB_MYSQL module

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

DB_POSTGRES module

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

DIALOG module

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

DISPATCHER module

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

DROUTING module

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

EVENT_FLATSTORE module

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

EVENT_ROUTING module

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

LOAD_BALANCER module

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

NAT_TRAVERSAL module

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

NATHELPER module

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

PRESENCE module

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

RTPPROXY module

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

RTPENGINE module

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

SIPMSGOPS module

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

URI module (removed)

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

USRLOC module

  • the shared_pinging module parameter has been obsoleted in favour of the pinging_mode, which more accurately describes/explains the different pinging heuristics of the module.

April 16, 2019, at 09:53 PM by 109.99.227.30 -
Changed line 8 from:

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

to:

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

April 16, 2019, at 09:23 PM by liviu -
Changed line 77 from:

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

to:

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

April 16, 2019, at 09:22 PM by liviu -
Changed line 77 from:

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

to:

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

April 16, 2019, at 09:21 PM by liviu -
Changed line 77 from:

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

to:

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

April 16, 2019, at 09:15 PM by liviu -
Changed line 74 from:

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

to:

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

April 16, 2019, at 09:14 PM by liviu -
Changed line 74 from:

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

to:

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

April 16, 2019, at 09:13 PM by liviu -
Added lines 73-77:

MI Interaction Standardization

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

Module Functions Now Benefit From a New Parameter Interface

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

April 16, 2019, at 08:58 PM by liviu -
Changed line 65 from:

This feature allows the selection of the memory manager to be used at startup time. In OpenSIPS 3.1, the memory manager selection is a startup option, via command line arguments, allowing you to change it without any need to recompile or redeploy.

to:

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

April 16, 2019, at 08:57 PM by liviu -
Deleted line 62:
Changed lines 65-66 from:

This feature allows thes election of the memory manager to use at the startup time. In OpenSIPS 3.1, the memory manager selection is a startup option, via command line arguments, allowing you to change it with any need to recompile / redeploy. Embedded Ruby or others).\\

to:

This feature allows the selection of the memory manager to be used at startup time. In OpenSIPS 3.1, the memory manager selection is a startup option, via command line arguments, allowing you to change it without any need to recompile or redeploy.

Changed line 70 from:

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

to:

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

Added lines 79-80:

RABBITMQ_CONSUMER (NEW)

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

April 16, 2019, at 08:44 PM by liviu -
Changed lines 60-61 from:

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

to:

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

April 16, 2019, at 08:42 PM by liviu -
Changed lines 60-61 from:

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

to:

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

April 16, 2019, at 08:42 PM by liviu -
Changed line 60 from:

Starting with OpenSIPS 3.1, the old "opensipsctl" tool becomes deprecated (as functionality and as software) and it is replaced by the new opensips-cli tool - a powerful Python3 application that allows you to interact in a smart way with OpenSIPS, to run advanced tools like diagnose or tracer and to do DB provisioning.

to:

Starting with OpenSIPS 3.1, the old "opensipsctl" tool becomes deprecated (as functionality and as software) and it is replaced by the new opensips-cli tool - a powerful Python3 application that allows you to interact in a smart way with OpenSIPS, to run advanced tools such as diagnose or tracer and to do DB provisioning.

April 16, 2019, at 08:41 PM by liviu -
Changed line 60 from:

Starting with OpenSIPS 3.1, the old "opensipsctl" tool becomes deprecated (as functionality and as software) and it is replaced by the new 'opensips-cli' tool - a powerful python application that allows you to interact in a smart way with OpenSIPS, to run advanced tools like the Diagnoses or the Tracing tools and to do DB provisioning.

to:

Starting with OpenSIPS 3.1, the old "opensipsctl" tool becomes deprecated (as functionality and as software) and it is replaced by the new opensips-cli tool - a powerful Python3 application that allows you to interact in a smart way with OpenSIPS, to run advanced tools like diagnose or tracer and to do DB provisioning.

April 16, 2019, at 08:03 PM by liviu -
Deleted lines 128-132:

DIALPLAN module

  • dp_translate() parameters have been reworked to be more clear:
    • the composite "partition:id" parameter was split into "id" (mandatory) and "partition" (optional)
    • the composite "src/dest" parameter was split into "input" (mandatory) and "out_var" (optional)
Changed lines 133-140 from:
  • ds_select_dst() parameters have been reworked to be easier to understand and maintain. Specifically:
    • the "s" (skip destination) flag was dropped (equivalent logic: "$du == NULL && ds_select_dst()")
    • the "a" (append destination) flag was added, replacing all the complex set / algorithm / flags list-parameter logic in favour of simply calling ds_select_dst() multiple times.
    • the "set" composite parameter was decoupled into two basic parameters: "set" (mandatory) and "partition" (optional)
  • ds_select_domain() parameters have been reworked to be easier to understand and maintain. The changes follow the same pattern as ds_select_dst().
  • ds_count()'s complex "set" parameter has been split in two simple parameters: "set" (mandatory) and "partition" (optional).
  • ds_is_in_list()'s complex "set" parameter has been split in two simple parameters: "set" (mandatory) and "partition" (optional).
to:
Changed lines 140-147 from:
  • do_routing()'s composite "[partition:]group_id" parameter has been split in two parameters: "group_id" (mandatory) and "partition" (optional)
  • route_to_carrier()'s composite "[partition:]carrier_id" parameter has been split in two parameters: "carriers" (mandatory) and "partition" (optional)
  • route_to_gw()'s composite "[partition:]gw_id" parameter has been split in two parameters: "gw_id" CSV (mandatory) and "partition" (optional)
  • use_next_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
  • goes_to_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
  • is_from_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
  • dr_is_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
to:
Deleted lines 157-161:

PERMISSIONS module

  • check_address()'s composite "[partition:]group_id" parameter has been split in two parameters: "group_id" (mandatory) and "partition" (optional)
  • check_source_address()'s composite "[partition:]group_id" parameter has been split in two parameters: "group_id" (mandatory) and "partition" (optional)
  • get_source_group()'s composite "[partition:]var" parameter has been split in two parameters: "var" (mandatory) and "partition" (optional)
Deleted lines 168-172:

SIPCAPTURE module

  • report_capture() parameter order has changed
  • hep_set() parameter order has changed
  • hep_get() parameter order has changed
Deleted lines 171-173:

UAC_REDIRECT module

  • get_redirects() -> the deprecated "reason" parameter, along with the accounting logic behind it have been completely dropped
April 16, 2019, at 07:54 PM by 109.99.227.30 -
Changed line 45 from:

See the documentation of the MI "reload_script" function.

to:

See the documentation of the MI "reload_routes" function.

April 16, 2019, at 07:39 PM by 109.99.227.30 -
Changed lines 42-46 from:
to:

Routing Script Re-load

OpenSIPS 3.1 exposes the valuable ability of reloading the routes (not the module configuration) during runtime, with zero penalties and with zero loses as traffic. See the documentation of the MI "reload_script" function.

Changed lines 61-63 from:

Read a full description of the "opensips-cli" [[https://blog.opensips.org/2019/03/13/new-opensips-cli-tool-for-the-new-management-interface-in-opensips-3-1/|here].

to:

Read a full description of the "opensips-cli" here.

Added lines 69-74:

Internal Memory Persistence during Restart

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

April 16, 2019, at 07:23 PM by 109.99.227.30 -
Changed lines 54-59 from:
to:

New OpenSIPS CLI (Command Line Interface) tool

Starting with OpenSIPS 3.1, the old "opensipsctl" tool becomes deprecated (as functionality and as software) and it is replaced by the new 'opensips-cli' tool - a powerful python application that allows you to interact in a smart way with OpenSIPS, to run advanced tools like the Diagnoses or the Tracing tools and to do DB provisioning. Read a full description of the "opensips-cli" [[https://blog.opensips.org/2019/03/13/new-opensips-cli-tool-for-the-new-management-interface-in-opensips-3-1/|here].

Changed lines 62-70 from:

TODO

to:

This feature allows thes election of the memory manager to use at the startup time. In OpenSIPS 3.1, the memory manager selection is a startup option, via command line arguments, allowing you to change it with any need to recompile / redeploy. Embedded Ruby or others).
Read a full description of this feature here.

SMPP module (NEW)

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

April 16, 2019, at 07:13 PM by 109.99.227.30 -
Changed lines 45-46 from:

TODO

to:

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

Changed lines 51-53 from:

TODO

to:

This feature adds full built-in pre-processing support for the OpenSIPS script. OpenSIPS 3.1 integrates various existing pre-processors within OpenSIPS. This simplify the scripting itself, the script portability across multiple servers and not to mention the entire deployment process of more complex platforms (where OpenSIPS is just a part of it). Even more, you will be able to use your preferred pre-processor and align OpenSIPS with the rest of your system (M4, Jinja, Embedded Ruby or others).
Read a full description of this feature here.

April 16, 2019, at 05:53 PM by liviu -
Changed lines 102-106 from:
to:

DIALPLAN module

  • dp_translate() parameters have been reworked to be more clear:
    • the composite "partition:id" parameter was split into "id" (mandatory) and "partition" (optional)
    • the composite "src/dest" parameter was split into "input" (mandatory) and "out_var" (optional)
Changed lines 125-132 from:
to:
  • do_routing()'s composite "[partition:]group_id" parameter has been split in two parameters: "group_id" (mandatory) and "partition" (optional)
  • route_to_carrier()'s composite "[partition:]carrier_id" parameter has been split in two parameters: "carriers" (mandatory) and "partition" (optional)
  • route_to_gw()'s composite "[partition:]gw_id" parameter has been split in two parameters: "gw_id" CSV (mandatory) and "partition" (optional)
  • use_next_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
  • goes_to_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
  • is_from_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
  • dr_is_gw()'s parameter order has been changed for consistency reasons ("partition" is last now)
Added lines 149-153:

PERMISSIONS module

  • check_address()'s composite "[partition:]group_id" parameter has been split in two parameters: "group_id" (mandatory) and "partition" (optional)
  • check_source_address()'s composite "[partition:]group_id" parameter has been split in two parameters: "group_id" (mandatory) and "partition" (optional)
  • get_source_group()'s composite "[partition:]var" parameter has been split in two parameters: "var" (mandatory) and "partition" (optional)
April 16, 2019, at 04:56 PM by liviu -
Changed line 110 from:
  • the setid and partition were decoupled into two separate parameters
to:
  • the "set" composite parameter was decoupled into two basic parameters: "set" (mandatory) and "partition" (optional)
April 16, 2019, at 04:54 PM by liviu -
Changed lines 108-110 from:
  • * the "s" (skip destination) flag was dropped (equivalent logic: "$du == NULL && ds_select_dst()")
  • * the "a" (append destination) flag was added, replacing all the complex set / algorithm / flags list-parameter logic in favour of simply calling ds_select_dst() multiple times.
  • * the setid and partition were decoupled into two separate parameters
to:
  • the "s" (skip destination) flag was dropped (equivalent logic: "$du == NULL && ds_select_dst()")
  • the "a" (append destination) flag was added, replacing all the complex set / algorithm / flags list-parameter logic in favour of simply calling ds_select_dst() multiple times.
  • the setid and partition were decoupled into two separate parameters
April 16, 2019, at 04:53 PM by liviu -
Changed lines 8-10 from:

Get familiar with what is planned to bed done for this release by reading the OpenSIPS 3.1 Overview.

to:

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

Changed lines 73-74 from:
  • avp_insert() was dropped in favour of the already existing $(avp(foo)[append]) = "bar"; syntax
to:
  • avp_insert() was dropped in favour of the equivalent, already existing syntax: $(avp(foo)[append]) = "bar"; (for appending to end-of-list) and $(avp(foo)[3]) = "bar"; (for writing at a specific AVP index)
Changed lines 107-114 from:
to:
  • ds_select_dst() parameters have been reworked to be easier to understand and maintain. Specifically:
  • * the "s" (skip destination) flag was dropped (equivalent logic: "$du == NULL && ds_select_dst()")
  • * the "a" (append destination) flag was added, replacing all the complex set / algorithm / flags list-parameter logic in favour of simply calling ds_select_dst() multiple times.
  • * the setid and partition were decoupled into two separate parameters
  • ds_select_domain() parameters have been reworked to be easier to understand and maintain. The changes follow the same pattern as ds_select_dst().
  • ds_count()'s complex "set" parameter has been split in two simple parameters: "set" (mandatory) and "partition" (optional).
  • ds_is_in_list()'s complex "set" parameter has been split in two simple parameters: "set" (mandatory) and "partition" (optional).
Added lines 150-154:

SIPCAPTURE module

  • report_capture() parameter order has changed
  • hep_set() parameter order has changed
  • hep_get() parameter order has changed
Changed lines 157-160 from:
  • remove_hf() was split into remove_hf(), remove_hf_re() and remove_hf_glob(). The "flags" parameter was dropped.
to:
  • remove_hf() was split into remove_hf(), remove_hf_re() and remove_hf_glob(). As a result, the "flags" parameter was dropped.

UAC_REDIRECT module

  • get_redirects() -> the deprecated "reason" parameter, along with the accounting logic behind it have been completely dropped
April 08, 2019, at 05:27 PM by liviu -
Deleted line 68:
Added lines 72-74:

AVPOPS module

  • avp_insert() was dropped in favour of the already existing $(avp(foo)[append]) = "bar"; syntax
Added line 145:
  • remove_hf() was split into remove_hf(), remove_hf_re() and remove_hf_glob(). The "flags" parameter was dropped.
April 08, 2019, at 05:22 PM by liviu -
Added lines 48-51:

TODO

Selectable Memory Allocator Support

March 28, 2019, at 04:49 PM by razvancrainea -
Changed lines 39-40 from:
to:
  • added restart_persistency_cache_file and restart_persistency_size parameters that control the restart persistence mechanism.
Added line 107:
  • added support for restart persistency memory to cache data duriing restart. This can be enabled using the enable_restart_persistency parameter.
March 18, 2019, at 06:45 PM by 109.99.227.30 -
Added lines 6-10:

Get familiar with what is planned to bed done for this release by reading the OpenSIPS 3.1 Overview.

March 13, 2019, at 06:29 PM by 109.99.227.30 -
Changed lines 16-19 from:
  • new SDP transformation sdp.stream which returns a specific stream from an SDP body. Read more here.
  • new SDP transformation sdp.stream-delete used to delete a stream based on its index or media type. Read more here.
to:
  • new SDP transformation {sdp.stream,media} which returns a specific stream from an SDP body. Read more here.
  • new SDP transformation {sdp.stream-delete,media} used to delete a stream based on its index or media type. Read more here.
Changed lines 26-28 from:
  • added new string transformation s.reverse to reverse a string
to:
  • added new string transformation {s.reverse} to reverse a string
  • added new IP transformation {ip.matches,ip/masklen} for checking IPs against network masks (in short format).
March 12, 2019, at 09:43 AM by 109.99.227.30 -
Added line 26:
  • added new string transformation s.reverse to reverse a string
March 08, 2019, at 09:20 PM by 109.99.227.30 -
Added lines 25-31:

OpenSIPS core

  • added xlog_level MI command added to set/reset the global value for the xlog'ing threshold.
March 08, 2019, at 08:58 PM by 109.99.227.30 -
Added lines 23-24:
  • added new script variable $xlog_level to set/reset per process bases the value of the xlog'ing threshold.
March 08, 2019, at 08:47 PM by 109.99.227.30 -
Added lines 21-22:
  • added new global parameter xlog_level - similar to log_level but independently controls the verbosity of the xlog() functions.
March 08, 2019, at 02:52 PM by 109.99.227.30 -
Added lines 19-20:
  • global parameter xlog_default_level was renamed as xlog_print_level'
February 22, 2019, at 07:22 PM by liviu -
Added lines 21-24:

TODO

Generic Preprocessor Support

February 15, 2019, at 04:24 PM by razvancrainea -
Changed line 104 from:
  • The rtpproxy_sock parameter, as well as DB entries, now support an extra IP that will be used instead of the one indicated by RTPProxy. This is useful in NATTed environments where RTPProxy listens on a private IP, but you need to advertise a public IP.
to:
  • The rtpproxy_sock parameter, as well as DB entries, now support an extra IP that will be used instead of the one indicated by RTPProxy. This is useful in NATTed environments where RTPProxy listens on a private IP, but you need to advertise a public IP.
February 15, 2019, at 04:23 PM by razvancrainea -
Added lines 102-104:

RTPPROXY module

  • The rtpproxy_sock parameter, as well as DB entries, now support an extra IP that will be used instead of the one indicated by RTPProxy. This is useful in NATTed environments where RTPProxy listens on a private IP, but you need to advertise a public IP.
February 13, 2019, at 02:31 PM by 109.99.227.30 -
Added lines 19-22:

Processes Auto-Scaling Support

TODO

January 19, 2019, at 07:53 PM by liviu -
Changed line 63 from:
  • full protection against CANCEL/200 OK race conditions via the new race_condition_timeout modparam and "E" flag of create_dialog()
to:
  • full control over CANCEL/200 OK race conditions via the new race_condition_timeout modparam and "E" flag of create_dialog()
January 19, 2019, at 05:27 PM by liviu -
Changed line 56 from:
  • async support for running raw postgres queries from script level via avp_sb_queries()
to:
  • async support for running raw postgres queries from script level via avp_db_query()
January 19, 2019, at 01:23 PM by liviu -
Changed line 112 from:
  • the shared_pinging module parameter has been obsoleted in favour of the pinging_mode, which mode accurately describes/explains the different pinging heuristics of the module.
to:
  • the shared_pinging module parameter has been obsoleted in favour of the pinging_mode, which more accurately describes/explains the different pinging heuristics of the module.
January 19, 2019, at 01:14 PM by liviu -
Changed line 63 from:
  • full protection against CANCEL/200 OK race conditions via the new race_condition_timeout modparam and E flag of create_dialog()
to:
  • full protection against CANCEL/200 OK race conditions via the new race_condition_timeout modparam and "E" flag of create_dialog()
January 19, 2019, at 01:13 PM by liviu -
Added line 63:
  • full protection against CANCEL/200 OK race conditions via the new race_condition_timeout modparam and E flag of create_dialog()
January 19, 2019, at 12:02 PM by liviu -
Added line 62:
  • the default value of dlg_match_mode has been switched from DID_ONLY to DID_FALLBACK.
January 18, 2019, at 07:12 PM by liviu -
Added lines 109-110:

USRLOC module

  • the shared_pinging module parameter has been obsoleted in favour of the pinging_mode, which mode accurately describes/explains the different pinging heuristics of the module.
January 05, 2019, at 06:47 PM by 109.99.227.30 -
Added lines 57-62:

DIALOG module

  • The sharing tag management was moved into the clusterer module:
    • removed the module parameter dlg_sharing_tag (provided now by clusterer module)
    • removed the MI commands dlg_set_sharing_tag_active and dlg_list_sharing_tags (provided now by clusterer module)
January 05, 2019, at 06:43 PM by 109.99.227.30 -
Changed lines 80-85 from:
to:

NAT_TRAVERSAL module

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

NATHELPER module

  • Added clustering support for controlling which is the node responsible for pinging inside a cluster (via sharing tags). New module parameters cluster_id and cluster_sharing_tag were added.
Changed line 87 from:
  • the sharing tag management was moved into the clusterer module:
to:
  • The sharing tag management was moved into the clusterer module:
January 05, 2019, at 06:39 PM by 109.99.227.30 -
Added lines 38-41:

CACHEDB_LOCAL module

  • Added data replication capability (for the cached data) via the clusterer engine
  • Added new module parameter cluster_id and cluster_persistency for controlling the data clustering.
Added lines 57-61:

DISPATCHER module

  • Added clustering support for deciding (based on sharing tags) which is the node to perform the pinging and for replicating the changes of the destinations:
    • added the new module parameter cluster_id
    • added the new module parameter cluster_sharing_tag to define which is the sharing tag governing the actions taken by the module (like pinging gateways or replicating the status of the gateways)
January 05, 2019, at 06:19 PM by 109.99.227.30 -
Added line 30:
Added lines 62-70:

EVENT_ROUTING module

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

LOAD_BALANCER module

  • enhanced the clustering support in the module:
    • module parameter status_replication_cluster replaced with cluster_id with the same meaning
    • added the new module parameter cluster_sharing_tag to define which is the sharing tag governing the actions taken by the module (like pinging destinations or replicating the status of the destinations)
January 05, 2019, at 06:13 PM by 109.99.227.30 -
Changed lines 40-41 from:
  • added '''clusterer_list_shtags for listing all know tags (and their state)
  • added '''clusterer_shtag_set_active for switching a tag to active
to:
  • added clusterer_list_shtags for listing all know tags (and their state)
  • added clusterer_shtag_set_active for switching a tag to active
Changed lines 55-58 from:
to:
  • enhanced the clustering support in the module:
    • module parameter status_replication_cluster replaced with cluster_id with the same meaning
    • added the new module parameter cluster_sharing_tag to define which is the sharing tag governing the actions taken by the module (like pinging gateways or replicating the status of the gateways)
Added lines 61-65:

PRESENCE module

  • the sharing tag management was moved into the clusterer module:
    • removed the module parameter cluster_sharing_tags (provided now by clusterer module)
    • removed the MI commands pres_set_sharing_tag_active and pres_list_sharing_tags (provided now by clusterer module)
January 05, 2019, at 06:03 PM by 109.99.227.30 -
Changed lines 39-41 from:
  • added the [http://www.opensips.org/html/docs/modules/3.1.x/clusterer.html#param_sharing_tag|sharing_tag] module parameter for sharing tag definition.
  • new script variable [http://www.opensips.org/html/docs/modules/3.1.x/clusterer.html#var_cluster_sh_tag|$cluster.sh_tag(tag/cluster_id)] is now available at script level for read/write operations over the sharing tags
to:
  • added the sharing_tag module parameter for sharing tag definition.
  • added '''clusterer_list_shtags for listing all know tags (and their state)
  • added '''clusterer_shtag_set_active for switching a tag to active
  • new script variable $cluster.sh_tag(tag/cluster_id) is now available at script level for read/write operations over the sharing tags
Deleted line 49:
Added line 51:
  • async support for running raw postgres queries from script level via avp_sb_queries()
January 05, 2019, at 05:57 PM by 109.99.227.30 -
Changed lines 37-40 from:
to:

CLUSTERER module

  • the module provides now an unified sharing tag support - it is the only one responsible for managing the sharing tags (definitions, cluster ops, etc). The other module that needs to check the sharing tags can do it via the clusterer API. The sharing tag managing from presence and dialog modules was removed.
  • added the [http://www.opensips.org/html/docs/modules/3.1.x/clusterer.html#param_sharing_tag|sharing_tag] module parameter for sharing tag definition.
  • new script variable [http://www.opensips.org/html/docs/modules/3.1.x/clusterer.html#var_cluster_sh_tag|$cluster.sh_tag(tag/cluster_id)] is now available at script level for read/write operations over the sharing tags
December 07, 2018, at 01:27 PM by razvancrainea -
Changed lines 49-50 from:
  • New module parameter probing_socket to globally force a specific socket/listener for sending the SIP probing to the gateways.
to:
  • New module parameter probing_socket to globally force a specific socket/listener for sending the SIP probing to the gateways.
Changed line 52 from:
  • A new module parameter suppress_event_name was added to configure whether the event's name should be dumped in the file or not.
to:
  • A new module parameter suppress_event_name was added to configure whether the event's name should be dumped in the file or not.
December 07, 2018, at 01:26 PM by razvancrainea -
Added lines 50-52:

EVENT_FLATSTORE module

  • A new module parameter suppress_event_name was added to configure whether the event's name should be dumped in the file or not.
October 30, 2018, at 06:08 PM by razvancrainea -
Added lines 50-52:

RTPENGINE module

  • rtpengine_offer(), rtpengine_answer(), rtpengine_manage() now can receive the SDP body to send to rtpengine as a parameter. This is useful when you want to manipulate the SDP body sent to RTPengine (i.e. to remove, or add additional streams).
October 30, 2018, at 05:53 PM by razvancrainea -
Changed lines 16-18 from:
  • new SDP transformation sdp.stream-delete used to delete a stream based on its index or media type. Read more here.
to:
  • new SDP transformation sdp.stream which returns a specific stream from an SDP body. Read more here.
  • new SDP transformation sdp.stream-delete used to delete a stream based on its index or media type. Read more here.
October 30, 2018, at 12:27 PM by 109.99.227.30 -
Changed lines 28-29 from:
to:

AUTH_AAA module

  • functions aaa_does_uri_exist() and aaa_does_uri_user_exist() imported from the old URI module.
Deleted line 32:
Added lines 35-36:
Deleted line 37:
Changed line 52 from:

URI module

to:

URI module (removed)

Added line 56:
  • functions aaa_does_uri_exist() and aaa_does_uri_user_exist() moved into the AUTH_AAA module.
October 30, 2018, at 12:18 PM by razvancrainea -
Added lines 15-16:
  • new SDP transformation sdp.stream-delete used to delete a stream based on its index or media type. Read more here.
October 09, 2018, at 05:04 PM by 173.171.100.30 -
Added lines 42-43:

DROUTING module

  • New module parameter probing_socket to globally force a specific socket/listener for sending the SIP probing to the gateways.
October 03, 2018, at 02:36 PM by 109.99.227.30 -
Added lines 26-31:

AUTH_DB module

  • functions db_does_uri_exist(), db_is_to_authorized(), db_is_from_authorized() and db_get_auth_id() imported from the URI module
Changed lines 48-49 from:
  • functions has_totag(), uri_param(), add_uri_param(), del_uri_param(), tel2sip(), is_uri_user_e164() moved into the SIPMSGOPS module. Note that their names was slightly changes for a better understanding.
to:
  • functions has_totag(), uri_param(), add_uri_param(), del_uri_param(), tel2sip(), is_uri_user_e164() moved into the SIPMSGOPS module. Note that their names were slightly changes for a better understanding.
  • functions db_check_to(), db_check_from(), db_does_uri_exist(), db_get_auth_id() and all DB related module parameters moved to the AUTH_DB modules. Note that their names or prototypes may have been changed for a better integration.
October 01, 2018, at 09:51 AM by razvancrainea -
Changed line 34 from:
  • New module parameter: timeout that allows configuration of a timeout threshold for the PostgreSQL connections.
to:
  • New module parameter: timeout that allows configuration of a timeout threshold for the PostgreSQL connections.
October 01, 2018, at 09:50 AM by razvancrainea -
Deleted line 28:
Added lines 30-35:

DB_POSTGRES module

  • New module parameter: timeout that allows configuration of a timeout threshold for the PostgreSQL connections.
September 28, 2018, at 07:12 PM by 109.99.227.30 -
Added lines 31-37:

SIPMSGOPS module

  • functions has_totag(), ruri_has_param(), ruri_has_param(), ruri_del_param(), ruri_tel2sip(), is_uri_user_e164() imported from the URI module.

URI module

  • function is_user() obsoleted as it can simply and more flexible be replaced with $au==$var(username)
  • functions has_totag(), uri_param(), add_uri_param(), del_uri_param(), tel2sip(), is_uri_user_e164() moved into the SIPMSGOPS module. Note that their names was slightly changes for a better understanding.
July 24, 2018, at 02:00 PM by rvlad_patrascu -
Added lines 25-30:

DB_MYSQL module

  • New module parameter: use_tls that allows the use of TLS for MySQL connections.
  • In order to enable TLS for a specific MySQL connection the syntax for DB URLs now supports the tls_domain=dom_name parameter.
July 24, 2018, at 01:50 PM by rvlad_patrascu -
Changed line 18 from:
  • The mechanism for matching an incoming/outgoing TLS connection with a virtual TLS domains(both server and client) is now more flexible and relies on two new DB columns/module parameters: match_ip_address and match_ip_address.
to:
  • The mechanism for matching an incoming/outgoing TLS connection with a virtual TLS domain(both server and client) is now more flexible and relies on two new DB columns/module parameters: match_ip_address and match_ip_address.
July 24, 2018, at 01:49 PM by rvlad_patrascu -
Added lines 15-25:

TLS_MGM module

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

TBD

to:

OpenSIPS script

  • new core pseudo-variable $hdr_name (details here) that returns the name of a SIP header at a given index.
March 28, 2018, at 06:35 PM by razvancrainea -
Changed lines 6-7 from:
to:
Changed lines 12-114 from:

OpenSIPS script

  • "-f -" was introduced for reading the config file via stdin instead from a file.
  • 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 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.
  • old keywords were dropped (src_ip, dst_ip, src_port, dst_port, uri, from_uri, to_uri, method, status, myself, proto and msg:len)
  • 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)
  • 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.

OpenSIPS core

"Load" statistics

OpenSIPS 3.1 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:

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

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.
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.
SIP Parser
  • the "To" like headers (like PPI or PAI) are now properly parsed as multi-value (comma separated) name-addr/addr-spec headers

NEW SIPREC module

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

NEW EVENT_JSONRPC module

The new EVENT_JSONRPC module in OpenSIPS 3.1 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 3.1 that provides functions to run JSON-RPC commands on a remote JSON-RPC server, and retrieve the call's response back.

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.

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

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

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.

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.

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

RTPPROXY module

  • The rtpproxy module can now instruct the RTPProxy server to duplicate the stream RTP to a remote destination.
  • 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.

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.

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

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.

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. This is work sponsored by Harris Corporation (https://www.harris.com).
  • 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.

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.
  • a new extra field attr provided by the E_UL_CONTACT_INSERT event
to:

TBD

March 28, 2018, at 02:25 PM by razvancrainea -
Changed line 53 from:

JSONRPC is a new module in OpenSIPS 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1 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 3.1+ 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 3.1+ 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 3.1 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 3.1 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 3.1.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 3.1 is not backward compatible !

Changed lines 16-18 from:

OpenSIPS 3.1 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 3.1 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 3.1 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 3.1 . 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 3.1 . 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 3.1.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 3.1 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 3.1 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 3.1 is available here: http://www.opensips.org/Documentation/Script-Async-3-1 .

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 3.1 (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 3.1 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 3.1 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 3.1.0

to:

Migration from 2.1.x to 3.1.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 3.1 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 3.1 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 3.1 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 3.1 is available here: http://www.opensips.org/Documentation/Script-Async-3-1 .

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 3.1 (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 3.1 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 3.1.x is now available on site.

to:

A manual for how to migrate/update from 1.11.x to 3.1.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 3.1.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 3.1 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 3.1.0
to:
About -> Available Versions -> 3.1.x Releases -> Release 3.1.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 3.1.0

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


Migration from 1.11.x to 3.1.0

To be done on release date.


What is new in 3.1.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 June 02, 2020, at 03:39 PM