|
Development |
Development -> Planning -> OpenSIPS 4.0 Planning![]() OpenSIPS 4.0 philosophyThe 4.0 version is a turning point in the OpenSIPS evolution. This is a standard release, opening the path for a new family of releases with bold aims to radically change and improve legacy concepts and code in OpenSIPS. Yes, 4.0 is to address old limitations, deprecated designs or burning needs we accumulated across years. Concepts we had from day 1 (in SER at that time) are to be reworked; Also new concepts will be added, to align OpenSIPS with the challenges of the current days.
TCP frameworkThe TCP framework, as we know it (with a TCP Main process distributing connections across a bunch of TCP workers') suffered more or less no changes across its addition, more than 20 years ago. Due to the multi-process architecture, the TCP framework had to implement TCP connection "migration" and sharing across different processes.
TLS refreshingThe TLS support was from day 0 a real pain in the aXX. Mostly because of the multi-process model of the SIP layer. This required special memory managements (shared) and specific locking. The openSSL support drifted away from any multi-process support, requiring more and more twitches to make it work in OpenSIPS. These twitches impacted in a negative way also modules using openSSL in a single-process mode for encryption purpose only (like mysql, postgress, stirshaken, etc). Not to mention endless crashes due to dangling memory fragments, double free, mem leaking, etc. StirShaken SSL reworkAs the usage of the openSSL lib is quite limited, we plan to move the stirshaken module away from the openSSL support to a much lighter only for this module (like the BoringSSL lib). This will eliminate any negative impact of the openSSL twitches (needed by the SIP layer) openSSL support reworkThanks to the TCP rework and moving to a multi-threaded architecture (for TCP engine), there will be no need for the openSSL twitches (as openSSL natively supports multi-threading). This will solve a lot of problems when comes to using openSSL lib from different modules and processes. wolfSSL support updateRight now the wolfSSL code in directly imported into the OpenSIPS code. Why ? more or less for the same reason as we needed the openSSL twitches. The wolfSSL needs special compiling flags in order to work in a multi-process environment. This means we are stuck to a certain verions, without easy way to update to latest releases of wolfSSL. Thanks to the TCP rework and moving to a multi-threaded architecture (for TCP engine), we will be able to dynamically link to the wolfssl library, without any special twitches. So, we will have access to the latest versions, on different distros. VersatilityDynamic number of TM branchesFrom day 0, by design, the number of branches of a transaction (when doing forking to different destinations) was (a) limited to max 32 (extendable to 64) and (b) statically allocated within the transaction. These limitations translate into (a) limited number of call-hunting scenarios in Class V setups and (b) waist of memory. Real deployments showed us that 32 (even 64) branches are not enough when talking about cascading Hunt-Groups, combined with Push Notification and other Class V typical features. So we need to be able to have more, but without wasting memory - basically without having the maximum number of branches statically allocated into the transaction (as now), but to be able to dynamically allocate on-demand - for example, a transaction with 256 statically allocated branches consumes like 136KB memory....which is huge, considering the tens of thousands of transactions that can reside in memory at a given time. Bond network interfaces/socketsAgain something that exists from day 0 - for sending out a requests, you need to specify the exact interface you want to use - and if the destination is a FQDN, you have no idea if that will be translated into IPv4 or IPv6, into UDP or TCP....so you cannot force any socket/interface from script level as you do not know the details for the destination. MonitoringSIP message profilingOr answering to the question "How was the SIP message handled, the steps and the time" - in a per-message manner, the profiling may be enabled. The profiling data will translate into a list of reports describing the execution of the the SIP message in OpenSIPS - time stamps, internal triggered APIs, executed script routes and functions, various relevant operations - each module may generate such relevant reports to be attached to the message. The profiling data may serve for pure profiling purposes or for troubleshooting both opensips performance or routing logic. The data may be collected via logs, via opensips-cli (runtime collecting) or via HTTP services (like Pyroscope ) Process/worker profilingOr an realtime X-ray on OpenSIPS, to answer to the question What is my OpenSIPS doing, where is it stuck?? - in a per-process manner, the profiling will generate a list of reports on the process activity. The idea is to give a better view on what the processes is doing (processing) in a time based manner. The reports will cover events like the change of the processes state - idle (in IO reactor), running/executing or blocked into an I/O operation. Even more, when active, additional information like the nature of the processing will be attached - executing timer jobs, processing a SIP msg or running an async handler. The profiling data will be available via MI commands, either as detailed reports (for a fix time interval), or as aggregated statistics. OpenTelemetry supportFor the collected data, we already have support for OpenTelemetry, to push the profiling data to external observability tools/engines. IntegrationIntegration and interoperability is a never ending challenge. Proxy Protocol (HA proxy) supportRunning OpenSIPS behind various NATs and firewalls raise legitimate questions about losing information about the originators of the TCP connections. In our-days security reality, where firewalls like Cloudflare are more and more used, we need a way to ensure proper access to the information about the real originator of the traffic (for IP based authentication for example). Prack + Update interoperabilityWith more and more IMS presence, the ability to deal at proxy level with PRACK and UPDATEs is a must. Both are end-2-end features, but for a trunking or SBC system connecting some end-users to IMS-enabled carriers will be impossible to stay passive - most of the end-users devices to not properly support PRACK and UPDATE, so it will make the proxying impossible. WebSocket generic interfaceWebSockets are gaining more and more traction when comes to defining interfaces between services. Most of AI services are using websockets based APIs. Or provisioning or control APIs are relying on websockets. See the Janus or Verto (FreeSWITCH) cases. Work StatusWe try to update the list items with their development status, so you can have a clear view over the 4.0 progress. Nevertheless, we strongly recommend you to check the Feature list of 4.0.
|

