public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/opensips] f43: OpenSIPS ver. 3.6.8
@ 2026-08-19 17:39 Peter Lemenkov
  0 siblings, 0 replies; only message in thread
From: Peter Lemenkov @ 2026-08-19 17:39 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/opensips
            Branch : f43
            Commit : 3d31f43fb127240a26ed3ba1dcda763082067033
            Author : Peter Lemenkov <lemenkov@gmail.com>
            Date   : 2026-08-19T19:36:47+02:00
            Stats  : +649/-1575 in 12 file(s)
            URL    : https://src.fedoraproject.org/rpms/opensips/c/3d31f43fb127240a26ed3ba1dcda763082067033?branch=f43

            Log:
            OpenSIPS ver. 3.6.8

Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>

---
diff --git a/opensips-0001-Consistently-use-rtpproxy-switches.patch b/opensips-0001-Consistently-use-rtpproxy-switches.patch
index 6bc6ec8..56ddf4f 100644
--- a/opensips-0001-Consistently-use-rtpproxy-switches.patch
+++ b/opensips-0001-Consistently-use-rtpproxy-switches.patch
@@ -5,19 +5,19 @@ Subject: [PATCH] Consistently use rtpproxy switches
 
 Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
 
-diff --git a/modules/rtpproxy/doc/rtpproxy_admin.xml b/modules/rtpproxy/doc/rtpproxy_admin.xml
-index 2ae4c9b2b0..c17b77d05f 100644
---- a/modules/rtpproxy/doc/rtpproxy_admin.xml
-+++ b/modules/rtpproxy/doc/rtpproxy_admin.xml
-@@ -637,7 +637,7 @@ modparam("rtpproxy", "generated_sdp_media_ip", "10.0.0.1")
- 				connection information.
- 				</para></listitem>
- 				<listitem><para>
--				<emphasis>s/w</emphasis> - flags that for the UA from which 
-+				<emphasis>s</emphasis> - flags that for the UA from which 
- 				message is received, support symmetric RTP must be forced.
- 				</para></listitem>
- 				<listitem><para>
+diff --git a/modules/rtpproxy/README.md b/modules/rtpproxy/README.md
+index ee3ba3ba85..a075f6307c 100644
+--- a/modules/rtpproxy/README.md
++++ b/modules/rtpproxy/README.md
+@@ -512,7 +512,7 @@ description (o=) should be also changed.
+   - *c* - flags to change the session-level 
+ SDP connection (c=) IP if media-description also includes 
+ connection information.
+-  - *s/w* - flags that for the UA from which 
++  - *s* - flags that for the UA from which 
+ message is received, support symmetric RTP must be forced.
+   - *n[<SOCKET>]* - flags that enables
+ the notification timeout for the session. One can specify an
 diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c
 index d6e665e38c..62bc098fea 100644
 --- a/modules/rtpproxy/rtpproxy.c

diff --git a/opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch b/opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch
deleted file mode 100644
index b7bf490..0000000
--- a/opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch
+++ /dev/null
@@ -1,470 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Peter Lemenkov <lemenkov@gmail.com>
-Date: Sun, 26 Oct 2025 15:29:04 +0100
-Subject: [PATCH] Fix rabbitmq-c deprecated header warnings
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-During compilation of event_rabbitmq module, several warnings appear:
-
-```
-Compiling rabbitmq_consumer.c
-gcc -fPIC -DPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -DMOD_NAME='rabbitmq_consumer' -DPKG_MALLOC  -DSHM_MMAP  -DUSE_MCAST  -DDISABLE_NAGLE  -DSTATISTICS  -DHAVE_RESOLV_RES  -DF_MALLOC  -DQ_MALLOC  -DHP_MALLOC  -DDBG_MALLOC  -DF_PARALLEL_MALLOC  -DHAVE_STDATOMIC -DHAVE_GENERICS  -DNAME='"opensips"' -DVERSION='"3.6.2"' -DARCH='"x86_64"' -DOS='"linux"' -DCOMPILER='"gcc 15"' -D__CPU_x86_64 -D__OS_linux -D__SMP_yes -DCFG_DIR='"/etc/opensips/"'  -DVERSIONTYPE='"git"' -DTHISREVISION='"994bcd690"' -DFAST_LOCK -DADAPTIVE_WAIT -DADAPTIVE_WAIT_LOOPS=1024 -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H -DHAVE_TIMEGM -DHAVE_EPOLL -DHAVE_SIGIO_RT -DHAVE_SELECT  -c rabbitmq_consumer.c -o rabbitmq_consumer.o
-In file included from rmq_connection.h:25,
-                 from rabbitmq_consumer.c:25:
-/usr/include/amqp.h:10:5: warning: #warning "amqp.h is deprecated, use rabbitmq-c/amqp.h instead." [-Wcpp]
-   10 | #   warning "amqp.h is deprecated, use rabbitmq-c/amqp.h instead."
-      |     ^~~~~~~
-In file included from rmq_connection.h:26:
-/usr/include/amqp_tcp_socket.h:10:5: warning: #warning "amqp_tcp_socket.h is deprecated, use rabbitmq-c/tcp_socket.h instead." [-Wcpp]
-   10 | #   warning "amqp_tcp_socket.h is deprecated, use rabbitmq-c/tcp_socket.h instead."
-      |     ^~~~~~~
-In file included from rmq_connection.h:27:
-/usr/include/amqp_ssl_socket.h:12:5: warning: #warning "amqp_ssl_socket.h is deprecated, use rabbitmq-c/ssl_socket.h instead." [-Wcpp]
-   12 | #   warning "amqp_ssl_socket.h is deprecated, use rabbitmq-c/ssl_socket.h instead."
-      |     ^~~~~~~
-rabbitmq_consumer.c: In function ‘mod_init’:
-rabbitmq_consumer.c:99:17: warning: ‘amqp_set_initialize_ssl_library’ is deprecated [-Wdeprecated-declarations]
-   99 |                 amqp_set_initialize_ssl_library(0);
-      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-In file included from /usr/include/amqp_ssl_socket.h:15:
-/usr/include/rabbitmq-c/ssl_socket.h:250:16: note: declared here
-  250 | void AMQP_CALL amqp_set_initialize_ssl_library(amqp_boolean_t do_initialize);
-      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-```
-
-The rabbitmq-c library reorganized headers into a rabbitmq-c/
-subdirectory in version 0.8.0 (2017). The old top-level headers remain
-as deprecated wrappers that emit warnings. Additionally, the function
-amqp_set_initialize_ssl_library() was deprecated in version 0.13.0
-(2022) as SSL initialization became automatic.
-
-Changes made:
-
-1. Removed obsolete version guard for rabbitmq-c 0.4.0:
-   The guard checking AMQP_VERSION >= 0x00040000 and defining
-   AMQP_VERSION_v04 was needed for ancient versions (2013). All currently
-   supported distributions ship rabbitmq-c >= 0.9.0, making this check
-   unnecessary.
-
-2. Updated header includes to use rabbitmq-c/ subdirectory:
-   - Changed: #include <amqp.h>
-   - To:      #include <rabbitmq-c/amqp.h>
-   - Applied to: amqp.h, amqp_framing.h, amqp_tcp_socket.h, amqp_ssl_socket.h
-
-3. Added version guard for amqp_set_initialize_ssl_library():
-   This function is called with argument 0 to tell rabbitmq-c NOT to
-   initialize OpenSSL, since OpenSIPS manages its own SSL/TLS stack at a
-   higher level. The function is needed for rabbitmq-c < 0.13.0 but was
-   deprecated in 0.13.0 when the library made SSL initialization behavior
-   configurable by default.
-
-   Changed:
-     amqp_set_initialize_ssl_library(0);
-   To:
-     #if AMQP_VERSION < AMQP_VERSION_CODE(0, 13, 0, 0)
-         amqp_set_initialize_ssl_library(0);
-     #endif
-
-Note: The existing version guard for AMQP_VERSION < 0.10.0 (ssl_lock) was
-preserved as it handles real API differences between 0.9.x and 0.10.0+
-versions still present in current distributions.
-
-Compatibility analysis:
-
-Survey of actively supported distributions shows all ship rabbitmq-c >= 0.9.0:
-
-- RHEL/Rocky/Alma 8/9: >= 0.9.0
-- Ubuntu 20.04/22.04/24.04: >= 0.9.0
-- Debian 11/12: >= 0.9.0
-- Fedora 39/40/41: >= 0.13.0
-- macOS Homebrew: 0.15.0
-- macOS MacPorts: 0.11.0
-
-The 0.4.0 compatibility code (from 2013) is no longer needed. The 0.13.0
-guard is necessary as some LTS distributions still ship 0.9.x-0.12.x.
-
-Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-Assisted-by: Claude (Anthropic) <https://claude.ai>
-
-diff --git a/modules/event_rabbitmq/README b/modules/event_rabbitmq/README
-index 8ad24bf856..359985fc2a 100644
---- a/modules/event_rabbitmq/README
-+++ b/modules/event_rabbitmq/README
-@@ -130,7 +130,7 @@ Chapter 1. Admin Guide
- 
-    The following libraries or applications must be installed
-    before running OpenSIPS with this module loaded:
--     * librabbitmq-dev
-+     * librabbitmq-dev ver. 0.9 or higher
- 
- 1.5. Exported Parameters
- 
-diff --git a/modules/event_rabbitmq/doc/event_rabbitmq_admin.xml b/modules/event_rabbitmq/doc/event_rabbitmq_admin.xml
-index 4389675417..6d4619ce51 100644
---- a/modules/event_rabbitmq/doc/event_rabbitmq_admin.xml
-+++ b/modules/event_rabbitmq/doc/event_rabbitmq_admin.xml
-@@ -131,7 +131,7 @@
- 			<itemizedlist>
- 			<listitem>
- 			<para>
--				<emphasis>librabbitmq-dev</emphasis>
-+				<emphasis>librabbitmq-dev ver. 0.9 or higher</emphasis>
- 			</para>
- 			</listitem>
- 			</itemizedlist>
-diff --git a/modules/event_rabbitmq/event_rabbitmq.c b/modules/event_rabbitmq/event_rabbitmq.c
-index cac53964ef..3028bd96de 100644
---- a/modules/event_rabbitmq/event_rabbitmq.c
-+++ b/modules/event_rabbitmq/event_rabbitmq.c
-@@ -50,9 +50,7 @@ static unsigned int heartbeat = 0;
- static int rmq_connect_timeout = RMQ_DEFAULT_CONNECT_TIMEOUT;
- static int rmq_timeout = 0;
- struct timeval conn_timeout_tv;
--#if defined AMQP_VERSION && AMQP_VERSION >= 0x00090000
- struct timeval rpc_timeout_tv;
--#endif
- int use_tls;
- struct tls_mgm_binds tls_api;
- struct openssl_binds openssl_api;
-@@ -201,24 +199,14 @@ static int mod_init(void)
- 	conn_timeout_tv.tv_sec = rmq_connect_timeout/1000;
- 	conn_timeout_tv.tv_usec = (rmq_connect_timeout%1000)*1000;
- 
--#if defined AMQP_VERSION && AMQP_VERSION >= 0x00090000
- 	if (rmq_timeout < 0) {
- 		LM_WARN("invalid value for 'timeout' %d; fallback to blocking mode\n", rmq_timeout);
- 		rmq_timeout = 0;
- 	}
- 	rpc_timeout_tv.tv_sec = rmq_timeout/1000;
- 	rpc_timeout_tv.tv_usec = (rmq_timeout%1000)*1000;
--#else
--	if (rmq_timeout != 0)
--		LM_WARN("setting the timeout without support for it; fallback to blocking mode\n");
--#endif
- 
- 	if (use_tls) {
--		#ifndef AMQP_VERSION_v04
--		LM_ERR("TLS not supported for librabbitmq version lower than 0.4.0\n");
--		return -1;
--		#endif
--
- 		if (load_tls_openssl_api(&openssl_api)) {
- 			LM_DBG("Failed to load openssl API\n");
- 			return -1;
-@@ -241,7 +229,9 @@ static int mod_init(void)
- 		}
- 		#endif
- 
-+#if AMQP_VERSION < AMQP_VERSION_CODE(0, 13, 0, 0)
- 		amqp_set_initialize_ssl_library(0);
-+#endif
- 	}
- 
- 	return 0;
-diff --git a/modules/event_rabbitmq/event_rabbitmq.h b/modules/event_rabbitmq/event_rabbitmq.h
-index 5b1158e16f..b27c2ad64d 100644
---- a/modules/event_rabbitmq/event_rabbitmq.h
-+++ b/modules/event_rabbitmq/event_rabbitmq.h
-@@ -27,13 +27,10 @@
- #ifndef _EV_RMQ_H_
- #define _EV_RMQ_H_
- 
--#include <amqp.h>
--#include <amqp_framing.h>
--#if defined AMQP_VERSION && AMQP_VERSION >= 0x00040000
--  #define AMQP_VERSION_v04
--#include <amqp_tcp_socket.h>
--#include <amqp_ssl_socket.h>
--#endif
-+#include <rabbitmq-c/amqp.h>
-+#include <rabbitmq-c/framing.h>
-+#include <rabbitmq-c/tcp_socket.h>
-+#include <rabbitmq-c/ssl_socket.h>
- 
- #include "../tls_mgm/api.h"
- #include "rmq_servers.h"
-diff --git a/modules/event_rabbitmq/rmq_servers.c b/modules/event_rabbitmq/rmq_servers.c
-index d920e599d1..d1f6a19ab4 100644
---- a/modules/event_rabbitmq/rmq_servers.c
-+++ b/modules/event_rabbitmq/rmq_servers.c
-@@ -33,61 +33,7 @@
- 
- #include "rmq_servers.h"
- #include "rabbitmq_send.h"
--#include <amqp_framing.h>
--
--#ifdef AMQP_VERSION_v04
--#define rmq_parse_rm amqp_parse_url
--#else
--#include "../../db/db_id.h"
--#warning "You are using an old, unsupported RabbitMQ library version - compile on your own risk!"
--/* ugly hack to move ptr from id to rmq_uri */
--#define PTR_MOVE(_from, _to) \
--	do { \
--		(_to) = (_from); \
--		(_from) = NULL; \
--	} while(0)
--static inline int rmq_parse_rm(char *url, rmq_uri *uri)
--{
--	str surl;
--	struct db_id *id;
--
--	surl.s = url;
--	surl.len = strlen(url);
--
--	if ((id = new_db_id(&surl)) == NULL)
--		return -1;
--
--	if (strcmp(id->scheme, "amqps") == 0)
--		uri->ssl = 1;
--
--	/* there might me a pkg leak compared to the newer version, but parsing
--	 * only happends at startup, so we should not worry about this now */
--	if (id->username)
--		PTR_MOVE(id->username, uri->user);
--	else
--		uri->user = "guest";
--	if (id->password)
--		PTR_MOVE(id->password, uri->password);
--	else
--		uri->password = "guest";
--	if (id->host)
--		PTR_MOVE(id->host, uri->host);
--	else
--		uri->host = "localhost";
--	if (id->database)
--		PTR_MOVE(id->database, uri->vhost);
--	else
--		uri->vhost = "/";
--	if (id->port)
--		uri->port = id->port;
--	else if (uri->ssl)
--		uri->port = 5671;
--	else
--		uri->port = 5672;
--	free_db_id(id);
--	return 0;
--}
--#endif
-+#include <rabbitmq-c/framing.h>
- 
- static OSIPS_LIST_HEAD(rmq_servers);
- 
-@@ -117,9 +63,6 @@ int rmq_error(char const *context, amqp_rpc_reply_t x)
- {
- 	amqp_connection_close_t *mconn;
- 	amqp_channel_close_t *mchan;
--#ifndef AMQP_VERSION_v04
--	char *errorstr;
--#endif
- 
- 	switch (x.reply_type) {
- 		case AMQP_RESPONSE_NORMAL:
-@@ -130,13 +73,7 @@ int rmq_error(char const *context, amqp_rpc_reply_t x)
- 			break;
- 
- 		case AMQP_RESPONSE_LIBRARY_EXCEPTION:
--#ifndef AMQP_VERSION_v04
--			errorstr = amqp_error_string(x.library_error);
--			LM_ERR("%s: %s\n", context, errorstr);
--			free(errorstr);
--#else
- 			LM_ERR("%s: %s\n", context, amqp_error_string2(x.library_error));
--#endif
- 			break;
- 
- 		case AMQP_RESPONSE_SERVER_EXCEPTION:
-@@ -170,9 +107,7 @@ int rmq_error(char const *context, amqp_rpc_reply_t x)
-  */
- int rmq_server_reconnect(rmq_connection_t *conn, char *address, int port, int max_frames, str cid)
- {
--#if defined AMQP_VERSION_v04
- 	amqp_socket_t *amqp_sock;
--#endif
- 	int socket;
- 
- 	switch (conn->state) {
-@@ -182,7 +117,6 @@ int rmq_server_reconnect(rmq_connection_t *conn, char *address, int port, int ma
- 			LM_ERR("cannot create amqp connection!\n");
- 			return -1;
- 		}
--#if defined AMQP_VERSION_v04
- 		if (use_tls && (conn->uri.ssl || (conn->flags&RMQ_PARAM_TLS))) {
- 			if (!conn->tls_dom) {
- 				conn->tls_dom = tls_api.find_client_domain_name(&conn->tls_dom_name);
-@@ -314,16 +248,6 @@ int rmq_server_reconnect(rmq_connection_t *conn, char *address, int port, int ma
- 				amqp_set_rpc_timeout(conn->conn, &rpc_timeout_tv) < 0)
- 			LM_ERR("setting RPC timeout - going blocking\n");
- #endif
--
--#else
--		socket = amqp_open_socket_noblock(address, port,
--				&conn_timeout_tv);
--		if (socket < 0) {
--			LM_ERR("cannot open AMQP socket\n");
--			return -1;
--		}
--		amqp_set_sockfd(conn->conn, socket);
--#endif
- 		conn->state = RMQS_INIT;
- 		/* fall through */
- 	case RMQS_INIT:
-@@ -568,7 +492,7 @@ no_value:
- 	memcpy(uri, suri.s, suri.len);
- 	uri[suri.len] = 0;
- 
--	if (rmq_parse_rm(uri, &srv->conn.uri) != 0) {
-+	if (amqp_parse_url(uri, &srv->conn.uri) != 0) {
- 		LM_ERR("[%.*s] cannot parse rabbitmq uri: %s\n", cid.len, cid.s, uri);
- 		goto free;
- 	}
-@@ -605,7 +529,7 @@ no_value:
- 		}
- 		memcpy(srv->conn.exchange.bytes, exchange.s, exchange.len);
- 	} else
--		srv->conn.exchange = RMQ_EMPTY;
-+		srv->conn.exchange = amqp_empty_bytes;
- 
- 	srv->conn.state = RMQS_OFF;
- 	srv->cid = cid;
-@@ -677,16 +601,6 @@ void rmq_connect_servers(void)
- 
- int amqp_check_status(rmq_connection_t *conn, int r, int *retry, str cid)
- {
--#ifndef AMQP_VERSION_v04
--	if (r != 0) {
--		LM_ERR("[%.*s] unknown AMQP error [%d] while sending\n",
--				srv->cid.len, srv->cid.s, r);
--		/* we close the connection here to be able to re-connect later */
--		/* TODO: close the connection */
--		return r;
--	}
--	return 0;
--#else
- 	switch (r) {
- 		case AMQP_STATUS_OK:
- 			return 0;
-@@ -741,7 +655,6 @@ no_close:
- 		return 1;
- 	}
- 	return r;
--#endif
- }
- 
- int rmq_basic_server_publish(rmq_connection_t *conn, int max_frames,
-diff --git a/modules/event_rabbitmq/rmq_servers.h b/modules/event_rabbitmq/rmq_servers.h
-index a700d80049..0d853f8f2b 100644
---- a/modules/event_rabbitmq/rmq_servers.h
-+++ b/modules/event_rabbitmq/rmq_servers.h
-@@ -40,7 +40,7 @@
- 
- #include "../tls_openssl/openssl_api.h"
- #include "../tls_mgm/api.h"
--#include <amqp.h>
-+#include <rabbitmq-c/amqp.h>
- #include "../../lib/list.h"
- 
- #if AMQP_VERSION < AMQP_VERSION_CODE(0, 10, 0, 0)
-@@ -49,30 +49,8 @@
- extern gen_lock_t *ssl_lock;
- #endif
- 
--/* AMQP_VERSION was only added in v0.4.0 - there is no way to check the
-- * version of the library before this, so we consider everything beyond v0.4.0
-- * as old and inneficient */
--#if defined AMQP_VERSION && AMQP_VERSION >= AMQP_VERSION_CODE(0, 4, 0, 0)
--  #define AMQP_VERSION_v04
--#include <amqp_tcp_socket.h>
--#include <amqp_ssl_socket.h>
--#define rmq_uri struct amqp_connection_info
--#define RMQ_EMPTY amqp_empty_bytes
--#else
--/* although struct amqp_connection_info was added in v0.2.0, there is no way
-- * to check against that version, so we assume it does not exist until v0.4.0
-- */
--typedef struct _rmq_uri {
--	char *user;
--	char *password;
--	char *host;
--	char *vhost;
--	int port;
--	int ssl;
--} rmq_uri;
--#define RMQ_EMPTY AMQP_EMPTY_BYTES
--#endif
--
-+#include <rabbitmq-c/tcp_socket.h>
-+#include <rabbitmq-c/ssl_socket.h>
- 
- enum rmq_server_state { RMQS_OFF, RMQS_INIT, RMQS_CONN, RMQS_ON, RMQS_PREINIT };
- 
-@@ -82,7 +60,7 @@ enum rmq_server_state { RMQS_OFF, RMQS_INIT, RMQS_CONN, RMQS_ON, RMQS_PREINIT };
- 
- typedef struct rmq_connection {
- 	enum rmq_server_state state;
--	rmq_uri uri;
-+	struct amqp_connection_info uri;
- 	unsigned flags;
- 	int heartbeat;
- 	str tls_dom_name;
-diff --git a/modules/rabbitmq_consumer/README b/modules/rabbitmq_consumer/README
-index aed3bf49fb..6c760d5547 100644
---- a/modules/rabbitmq_consumer/README
-+++ b/modules/rabbitmq_consumer/README
-@@ -72,8 +72,8 @@ Chapter 1. Admin Guide
-    before running OpenSIPS with this module loaded:
-      * librabbitmq-dev
- 
--   NOte that the module is not compatible with versions 0.4 or
--   below of the librabbitmq-dev library.
-+   Note that the module is not compatible with versions below 0.9
-+   of the librabbitmq-dev library.
- 
- 1.3. Exported Parameters
- 
-diff --git a/modules/rabbitmq_consumer/doc/rabbitmq_consumer_admin.xml b/modules/rabbitmq_consumer/doc/rabbitmq_consumer_admin.xml
-index a8da3cb2a7..856ed73954 100644
---- a/modules/rabbitmq_consumer/doc/rabbitmq_consumer_admin.xml
-+++ b/modules/rabbitmq_consumer/doc/rabbitmq_consumer_admin.xml
-@@ -50,7 +50,7 @@
- 			</listitem>
- 			</itemizedlist>
- 		<para>
--			NOte that the module is not compatible with versions 0.4 or below of
-+			Note that the module is not compatible with versions below 0.9 of
- 			the librabbitmq-dev library.
- 		</para>
- 	</section>
-diff --git a/modules/rabbitmq_consumer/rabbitmq_consumer.c b/modules/rabbitmq_consumer/rabbitmq_consumer.c
-index 6462f5708c..c6cf2417db 100644
---- a/modules/rabbitmq_consumer/rabbitmq_consumer.c
-+++ b/modules/rabbitmq_consumer/rabbitmq_consumer.c
-@@ -96,7 +96,9 @@ static int mod_init(void)
- 			return -1;
- 		}
- 
-+#if AMQP_VERSION_MAJOR == 0 && AMQP_VERSION_MINOR < 13
- 		amqp_set_initialize_ssl_library(0);
-+#endif // AMQP_VERSION_MAJOR == 0 && AMQP_VERSION_MINOR < 13
- 	}
- 
- 	return 0;
-diff --git a/modules/rabbitmq_consumer/rmq_connection.h b/modules/rabbitmq_consumer/rmq_connection.h
-index 8aea48710a..a34a0deb51 100644
---- a/modules/rabbitmq_consumer/rmq_connection.h
-+++ b/modules/rabbitmq_consumer/rmq_connection.h
-@@ -22,9 +22,9 @@
- #ifndef _RMQ_CONNECTION_H_
- #define _RMQ_CONNECTION_H_
- 
--#include <amqp.h>
--#include <amqp_tcp_socket.h>
--#include <amqp_ssl_socket.h>
-+#include <rabbitmq-c/amqp.h>
-+#include <rabbitmq-c/tcp_socket.h>
-+#include <rabbitmq-c/ssl_socket.h>
- 
- #include "../../lib/list.h"
- #include "../../evi/evi_params.h"

diff --git a/opensips-0005-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch b/opensips-0005-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch
new file mode 100644
index 0000000..eedf973
--- /dev/null
+++ b/opensips-0005-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch
@@ -0,0 +1,145 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Peter Lemenkov <lemenkov@gmail.com>
+Date: Sun, 26 Oct 2025 16:50:53 +0100
+Subject: [PATCH] Fix uninitialized variable warnings in SQL API functions
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+During compilation of sqlops module with GCC 15, warnings appear about
+potentially uninitialized variables:
+
+```
+Compiling sqlops_db.c
+gcc -fPIC -DPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -DMOD_NAME='sqlops' -DPKG_MALLOC  -DSHM_MMAP  -DUSE_MCAST  -DDISABLE_NAGLE  -DSTATISTICS  -DHAVE_RESOLV_RES  -DF_MALLOC  -DQ_MALLOC  -DHP_MALLOC  -DDBG_MALLOC  -DF_PARALLEL_MALLOC  -DHAVE_STDATOMIC -DHAVE_GENERICS  -DNAME='"opensips"' -DVERSION='"3.6.2"' -DARCH='"x86_64"' -DOS='"linux"' -DCOMPILER='"gcc 15"' -D__CPU_x86_64 -D__OS_linux -D__SMP_yes -DCFG_DIR='"/etc/opensips/"'  -DVERSIONTYPE='"git"' -DTHISREVISION='"994bcd690"' -DFAST_LOCK -DADAPTIVE_WAIT -DADAPTIVE_WAIT_LOOPS=1024 -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H -DHAVE_TIMEGM -DHAVE_EPOLL -DHAVE_SIGIO_RT -DHAVE_SELECT -c sqlops_db.c -o sqlops_db.o
+In file included from ../../mem/mem.h:30,
+                 from sqlops_db.c:27:
+sqlops_db.c: In function ‘sql_api_delete’:
+../../mem/../dprint.h:454:33: warning: ‘id’ may be used uninitialized [-Wmaybe-uninitialized]
+  454 |                                 dprint(_log_level, _log_facility, \
+      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  455 |                                         LOG_PREFIX_UTIL(MOD_NAME), __DP_FUNC, \
+      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  456 |                                         _stderr_prefix LOG_PREFIX _fmt, \
+      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  457 |                                         (char *)"%s" _syslog_prefix LOG_PREFIX _fmt, \
+      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  458 |                                         (char *)_fmt, \
+      |                                         ~~~~~~~~~~~~~~~
+  459 |                                         dp_time(), dp_my_pid(), log_prefix, __DP_FUNC, ## args) \
+      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+sqlops_db.c:921:14: note: ‘id’ was declared here
+  921 |         str *id;
+      |              ^~
+```
+
+In sql_api_select(), sql_api_update(), sql_api_insert(),
+sql_api_delete(), and sql_api_replace() functions, the 'id' pointer
+variable (used for prepared statement identifiers) is declared but could
+be uninitialized.
+
+Let's ensure that:
+
+- The variable is always initialized (prevents undefined behavior)
+- Debug logging only occurs when a prepared statement ID was actually
+  generated
+- The code is safe even when no filter keys are provided
+
+Note: This was a real bug, not just a spurious compiler warning. In
+scenarios where DB_CAP_PREPARED_STMT is supported, _query_id_start()
+succeeds, but no filter keys exist, the code would dereference an
+uninitialized pointer.
+
+Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
+Assisted-by: Claude (Anthropic) <https://claude.ai>
+
+diff --git a/modules/sqlops/sqlops_db.c b/modules/sqlops/sqlops_db.c
+index 8b57a13c48..cf364593f8 100644
+--- a/modules/sqlops/sqlops_db.c
++++ b/modules/sqlops/sqlops_db.c
+@@ -752,7 +752,8 @@ int sql_api_select(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
+ 	(keys && (id=_query_id_add_filter(keys,ops,nk))==NULL) ) {
+ 		LM_DBG("not using PS\n");
+ 	} else {
+-		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
++		if(id)
++			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
+ 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
+ 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
+ 				LM_DBG("using PS %p\n",*my_ps);
+@@ -804,7 +805,7 @@ int sql_api_update(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
+ 	db_op_t *uops, *ops;
+ 	db_val_t *uvals, *vals;
+ 	int nk, unk;
+-	str *id;
++	str *id = NULL;
+ 	db_ps_t *my_ps;
+ 
+ 	/* convert JSON to COLs */
+@@ -838,7 +839,8 @@ int sql_api_update(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
+ 	(keys && (id=_query_id_add_filter(keys,ops,nk))==NULL) ) {
+ 		LM_DBG("not using PS\n");
+ 	} else {
+-		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
++		if(id)
++			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
+ 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
+ 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
+ 				LM_DBG("using PS %p\n",*my_ps);
+@@ -868,7 +870,7 @@ int sql_api_insert(struct db_url *url, struct sip_msg* msg, str *table,
+ 	db_op_t *uops;
+ 	db_val_t *uvals;
+ 	int unk;
+-	str *id;
++	str *id = NULL;
+ 	db_ps_t *my_ps;
+ 
+ 	/* convert JSON to COLs */
+@@ -888,7 +890,8 @@ int sql_api_insert(struct db_url *url, struct sip_msg* msg, str *table,
+ 	(id=_query_id_add_filter(ukeys,uops,unk))==NULL ) {
+ 		LM_DBG("not using PS\n");
+ 	} else {
+-		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
++		if(id)
++			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
+ 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
+ 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
+ 				LM_DBG("using PS %p\n",*my_ps);
+@@ -918,7 +921,7 @@ int sql_api_delete(struct db_url *url, struct sip_msg* msg,
+ 	db_op_t *ops;
+ 	db_val_t *vals;
+ 	int nk;
+-	str *id;
++	str *id = NULL;
+ 	db_ps_t *my_ps;
+ 
+ 	/* convert JSON to keys */
+@@ -945,7 +948,8 @@ int sql_api_delete(struct db_url *url, struct sip_msg* msg,
+ 	(keys && (id=_query_id_add_filter(keys,ops,nk))==NULL) ) {
+ 		LM_DBG("not using PS\n");
+ 	} else {
+-		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
++		if(id)
++			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
+ 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
+ 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
+ 				LM_DBG("using PS %p\n",*my_ps);
+@@ -975,7 +979,7 @@ int sql_api_replace(struct db_url *url, struct sip_msg* msg, str *table,
+ 	db_op_t *uops;
+ 	db_val_t *uvals;
+ 	int unk;
+-	str *id;
++	str *id = NULL;
+ 	db_ps_t *my_ps;
+ 
+ 	/* convert JSON to COLs */
+@@ -995,7 +999,8 @@ int sql_api_replace(struct db_url *url, struct sip_msg* msg, str *table,
+ 	(id=_query_id_add_filter(ukeys,uops,unk))==NULL ) {
+ 		LM_DBG("not using PS\n");
+ 	} else {
+-		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
++		if(id)
++			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
+ 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
+ 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
+ 				LM_DBG("using PS %p\n",*my_ps);

diff --git a/opensips-0006-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch b/opensips-0006-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch
new file mode 100644
index 0000000..6c9d628
--- /dev/null
+++ b/opensips-0006-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch
@@ -0,0 +1,100 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Peter Lemenkov <lemenkov@gmail.com>
+Date: Fri, 26 Dec 2025 17:25:05 +0100
+Subject: [PATCH] Fix uninitialized va_list warning on ppc64le and i686 with
+ GCC 15
+
+During compilation on ppc64le and i686 architectures with GCC 15, a
+warning appears:
+
+```
+cachedb_redis_dbase.c: In function 'redis_run_command_argv':
+cachedb_redis_dbase.c:659:16: warning: '_' is used uninitialized [-Wuninitialized]
+  659 |         return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, _);
+      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+cachedb_redis_dbase.c:657:17: note: '_' was declared here
+  657 |         va_list _;
+      |                 ^
+```
+
+In commit d6ad6d4039fcf68624481f69ee67eff92f7b3ab2, the
+`redis_run_command_argv()` function was modified to pass an
+uninitialized `va_list` to `_redis_run_command()`.
+
+The original logic is:
+```c
+static int redis_run_command_argv(...) {
+    va_list _;
+    return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, _);
+}
+```
+
+The underscore `_` was used as a "don't care" placeholder, since when
+`argc` is non-zero, `_redis_run_command()` uses the `argv` path and
+never accesses the `va_list` parameter:
+
+```c
+if (argc) {
+    reply = redisCommandArgv(node->context, argc, argv, argvlen);
+} else {
+    va_copy(aq, ap);  // Only executed when argc == 0
+    reply = redisvCommand(node->context, cmd_fmt, aq);
+    va_end(aq);
+}
+```
+
+While this worked in practice (the uninitialized `va_list` is never
+actually used), GCC 15 now correctly warns that passing uninitialized
+data is undefined behavior, even if that data is never accessed.
+
+Initialize the `va_list` to a safe value using zero-initialization. This
+satisfies the compiler's uninitialized variable check while maintaining
+the original logic - the `va_list` still won't be used when `argc` is
+non-zero, but it's now validly initialized.
+
+**Changed:**
+```c
+va_list _;
+```
+
+**To:**
+```c
+va_list unused_ap = {0};
+```
+
+Also renamed from `_` to `unused_ap` for clarity, as single underscore
+identifiers can be problematic and don't clearly convey intent.
+
+Even though the uninitialized `va_list` is never accessed in practice,
+passing uninitialized data violates C's rules and can cause issues with:
+
+- Static analysis tools
+- Compiler optimizations that assume no undefined behavior
+- Future architecture-specific `va_list` implementations
+- Code maintainability (unclear intent)
+
+This change makes the code compliant with C standards while preserving
+the original functionality.
+
+Related commit: d6ad6d4039fcf68624481f69ee67eff92f7b3ab2
+("cachedb_redis: properly pass variable arguments to a Redis command")
+
+Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
+Assisted-by: Claude (Anthropic) <https://claude.ai>
+
+diff --git a/modules/cachedb_redis/cachedb_redis_dbase.c b/modules/cachedb_redis/cachedb_redis_dbase.c
+index 5ef92c6a5a..5c6a9c72d3 100644
+--- a/modules/cachedb_redis/cachedb_redis_dbase.c
++++ b/modules/cachedb_redis/cachedb_redis_dbase.c
+@@ -660,9 +660,9 @@ static int redis_run_command(cachedb_con *connection, redisReply **rpl,
+ static int redis_run_command_argv(cachedb_con *connection, redisReply **rpl,
+               str *key, int argc, const char **argv, const size_t *argvlen)
+ {
+-	va_list _;
++	va_list unused_ap = {0};
+ 
+-	return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, _);
++	return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, unused_ap);
+ }
+ 
+ int redis_get(cachedb_con *connection,str *attr,str *val)

diff --git a/opensips-0006-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch b/opensips-0006-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch
deleted file mode 100644
index a532bf0..0000000
--- a/opensips-0006-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch
+++ /dev/null
@@ -1,154 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Peter Lemenkov <lemenkov@gmail.com>
-Date: Sun, 26 Oct 2025 16:50:53 +0100
-Subject: [PATCH] Fix uninitialized variable warnings in SQL API functions
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-During compilation of sqlops module with GCC 15, warnings appear about
-potentially uninitialized variables:
-
-```
-Compiling sqlops_db.c
-gcc -fPIC -DPIC -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -DMOD_NAME='sqlops' -DPKG_MALLOC  -DSHM_MMAP  -DUSE_MCAST  -DDISABLE_NAGLE  -DSTATISTICS  -DHAVE_RESOLV_RES  -DF_MALLOC  -DQ_MALLOC  -DHP_MALLOC  -DDBG_MALLOC  -DF_PARALLEL_MALLOC  -DHAVE_STDATOMIC -DHAVE_GENERICS  -DNAME='"opensips"' -DVERSION='"3.6.2"' -DARCH='"x86_64"' -DOS='"linux"' -DCOMPILER='"gcc 15"' -D__CPU_x86_64 -D__OS_linux -D__SMP_yes -DCFG_DIR='"/etc/opensips/"'  -DVERSIONTYPE='"git"' -DTHISREVISION='"994bcd690"' -DFAST_LOCK -DADAPTIVE_WAIT -DADAPTIVE_WAIT_LOOPS=1024 -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H -DHAVE_TIMEGM -DHAVE_EPOLL -DHAVE_SIGIO_RT -DHAVE_SELECT -c sqlops_db.c -o sqlops_db.o
-In file included from ../../mem/mem.h:30,
-                 from sqlops_db.c:27:
-sqlops_db.c: In function ‘sql_api_delete’:
-../../mem/../dprint.h:454:33: warning: ‘id’ may be used uninitialized [-Wmaybe-uninitialized]
-  454 |                                 dprint(_log_level, _log_facility, \
-      |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  455 |                                         LOG_PREFIX_UTIL(MOD_NAME), __DP_FUNC, \
-      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  456 |                                         _stderr_prefix LOG_PREFIX _fmt, \
-      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  457 |                                         (char *)"%s" _syslog_prefix LOG_PREFIX _fmt, \
-      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  458 |                                         (char *)_fmt, \
-      |                                         ~~~~~~~~~~~~~~~
-  459 |                                         dp_time(), dp_my_pid(), log_prefix, __DP_FUNC, ## args) \
-      |                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-sqlops_db.c:921:14: note: ‘id’ was declared here
-  921 |         str *id;
-      |              ^~
-```
-
-In sql_api_select(), sql_api_update(), sql_api_insert(),
-sql_api_delete(), and sql_api_replace() functions, the 'id' pointer
-variable (used for prepared statement identifiers) is declared but could
-be uninitialized.
-
-Let's ensure that:
-
-- The variable is always initialized (prevents undefined behavior)
-- Debug logging only occurs when a prepared statement ID was actually
-  generated
-- The code is safe even when no filter keys are provided
-
-Note: This was a real bug, not just a spurious compiler warning. In
-scenarios where DB_CAP_PREPARED_STMT is supported, _query_id_start()
-succeeds, but no filter keys exist, the code would dereference an
-uninitialized pointer.
-
-Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-Assisted-by: Claude (Anthropic) <https://claude.ai>
-
-diff --git a/modules/sqlops/sqlops_db.c b/modules/sqlops/sqlops_db.c
-index 5de7b55995..cf364593f8 100644
---- a/modules/sqlops/sqlops_db.c
-+++ b/modules/sqlops/sqlops_db.c
-@@ -713,7 +713,7 @@ int sql_api_select(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
- 	db_op_t *ops;
- 	db_val_t *vals;
- 	int nk, nc;
--	str *id;
-+	str *id = NULL;
- 	db_ps_t *my_ps;
- 
- 	/* convert JSON to COLs */
-@@ -752,7 +752,8 @@ int sql_api_select(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
- 	(keys && (id=_query_id_add_filter(keys,ops,nk))==NULL) ) {
- 		LM_DBG("not using PS\n");
- 	} else {
--		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
-+		if(id)
-+			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
- 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
- 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
- 				LM_DBG("using PS %p\n",*my_ps);
-@@ -804,7 +805,7 @@ int sql_api_update(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
- 	db_op_t *uops, *ops;
- 	db_val_t *uvals, *vals;
- 	int nk, unk;
--	str *id;
-+	str *id = NULL;
- 	db_ps_t *my_ps;
- 
- 	/* convert JSON to COLs */
-@@ -838,7 +839,8 @@ int sql_api_update(struct db_url *url, struct sip_msg* msg, cJSON *Jcols,
- 	(keys && (id=_query_id_add_filter(keys,ops,nk))==NULL) ) {
- 		LM_DBG("not using PS\n");
- 	} else {
--		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
-+		if(id)
-+			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
- 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
- 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
- 				LM_DBG("using PS %p\n",*my_ps);
-@@ -868,7 +870,7 @@ int sql_api_insert(struct db_url *url, struct sip_msg* msg, str *table,
- 	db_op_t *uops;
- 	db_val_t *uvals;
- 	int unk;
--	str *id;
-+	str *id = NULL;
- 	db_ps_t *my_ps;
- 
- 	/* convert JSON to COLs */
-@@ -888,7 +890,8 @@ int sql_api_insert(struct db_url *url, struct sip_msg* msg, str *table,
- 	(id=_query_id_add_filter(ukeys,uops,unk))==NULL ) {
- 		LM_DBG("not using PS\n");
- 	} else {
--		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
-+		if(id)
-+			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
- 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
- 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
- 				LM_DBG("using PS %p\n",*my_ps);
-@@ -918,7 +921,7 @@ int sql_api_delete(struct db_url *url, struct sip_msg* msg,
- 	db_op_t *ops;
- 	db_val_t *vals;
- 	int nk;
--	str *id;
-+	str *id = NULL;
- 	db_ps_t *my_ps;
- 
- 	/* convert JSON to keys */
-@@ -945,7 +948,8 @@ int sql_api_delete(struct db_url *url, struct sip_msg* msg,
- 	(keys && (id=_query_id_add_filter(keys,ops,nk))==NULL) ) {
- 		LM_DBG("not using PS\n");
- 	} else {
--		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
-+		if(id)
-+			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
- 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
- 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
- 				LM_DBG("using PS %p\n",*my_ps);
-@@ -975,7 +979,7 @@ int sql_api_replace(struct db_url *url, struct sip_msg* msg, str *table,
- 	db_op_t *uops;
- 	db_val_t *uvals;
- 	int unk;
--	str *id;
-+	str *id = NULL;
- 	db_ps_t *my_ps;
- 
- 	/* convert JSON to COLs */
-@@ -995,7 +999,8 @@ int sql_api_replace(struct db_url *url, struct sip_msg* msg, str *table,
- 	(id=_query_id_add_filter(ukeys,uops,unk))==NULL ) {
- 		LM_DBG("not using PS\n");
- 	} else {
--		LM_DBG("PS id is <%.*s>\n",id->len,id->s);
-+		if(id)
-+			LM_DBG("PS id is <%.*s>\n",id->len,id->s);
- 		if (ps_map!=NULL || (ps_map=map_create(0))!=NULL) {
- 			if ( (my_ps=map_get( ps_map, *id ))!=NULL) {
- 				LM_DBG("using PS %p\n",*my_ps);

diff --git a/opensips-0007-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch b/opensips-0007-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch
new file mode 100644
index 0000000..2689e4e
--- /dev/null
+++ b/opensips-0007-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch
@@ -0,0 +1,381 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Peter Lemenkov <lemenkov@gmail.com>
+Date: Sat, 31 Jan 2026 15:11:20 +0100
+Subject: [PATCH] Fix C90-style declaration warnings in snmpstats module
+
+Build fails with `-Werror=declaration-after-statement` (enforced by
+net-snmp pkg-config) due to variables declared after executable
+statements:
+
+```
+openserObjects.c:619:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
+  619 |         int new_threshold = (int)(long)(int *)val;
+
+openserSIPCommonObjects.c:244:17: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
+  244 |                 char *openBracePosition   = strchr(buffer, '(');
+
+openserSIPCommonObjects.c:475:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
+  475 |         char *strEntityType = (char *)val;
+
+openserSIPContactTable.c:266:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
+  266 |         static char *defaultUser = "DefaultUser";
+
+openserSIPContactTable.c:361:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
+  361 |         netsnmp_variable_list *var = request->requestvb;
+```
+
+The net-snmp library's pkg-config adds
+`-Werror=declaration-after-statement` to CFLAGS, enforcing C90-style
+declaration ordering (all declarations before statements).
+
+While OpenSIPS adheres to the C99 standard (which allows mixed
+declarations and code), the net-snmp library could require C90-style
+declarations for modules that link against it. Following this style
+doesn't hurt C99 compatibility and improves code portability.`
+
+Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
+Assisted-by: Claude (Anthropic) <https://claude.ai>
+
+diff --git a/modules/snmpstats/openserObjects.c b/modules/snmpstats/openserObjects.c
+index 180b62dda7..909db4c80b 100644
+--- a/modules/snmpstats/openserObjects.c
++++ b/modules/snmpstats/openserObjects.c
+@@ -605,6 +605,8 @@ int handle_openserDialogLimitMajorAlarm(netsnmp_mib_handler *handler,
+ static int set_if_valid_threshold(modparam_t type, void *val, char *varStr,
+ 	int *newVal)
+ {
++	int new_threshold;
++
+ 	if (val==0) {
+ 		LM_ERR("%s called with a null value!\n", varStr);
+ 		return -1;
+@@ -616,7 +618,7 @@ static int set_if_valid_threshold(modparam_t type, void *val, char *varStr,
+ 		return -1;
+ 	}
+ 
+-	int new_threshold = (int)(long)(int *)val;
++	new_threshold = (int)(long)(int *)val;
+ 
+ 	if (new_threshold < -1) {
+ 		LM_ERR("%s called with an invalid threshold=%d!\n",
+diff --git a/modules/snmpstats/openserSIPCommonObjects.c b/modules/snmpstats/openserSIPCommonObjects.c
+index e37ab6ef2a..f2ddba5a7a 100644
+--- a/modules/snmpstats/openserSIPCommonObjects.c
++++ b/modules/snmpstats/openserSIPCommonObjects.c
+@@ -225,6 +225,8 @@ int handle_openserSIPServiceStartTime(netsnmp_mib_handler *handler,
+ 
+ 	int elapsedTime = 0;
+ 	char buffer[SNMPGET_MAX_BUFFER];
++	char *openBracePosition = NULL;
++	char *closedBracePosition = NULL;
+ 
+ 	FILE *theFile = fopen(SNMPGET_TEMP_FILE, "r");
+ 
+@@ -241,8 +243,8 @@ int handle_openserSIPServiceStartTime(netsnmp_mib_handler *handler,
+ 
+ 		/* Find the positions of '(' and ')' so we can extract out the
+ 		 * timeticks value. */
+-		char *openBracePosition   = strchr(buffer, '(');
+-		char *closedBracePosition = strchr(buffer, ')');
++		openBracePosition   = strchr(buffer, '(');
++		closedBracePosition = strchr(buffer, ')');
+ 
+ 		/* Make sure that both the '(' and ')' exist in the file, and
+ 		 * that '(' occurs earlier than the ')'.  If all these
+@@ -464,6 +466,7 @@ int handle_openserSIPOtherwiseDiscardedMsgs(netsnmp_mib_handler *handler,
+  */
+ int handleSipEntityType( modparam_t type, void* val)
+ {
++	char *strEntityType = NULL;
+ 
+ 	/* By default we start off as "other". */
+ 	static char firstTime = 1;
+@@ -472,7 +475,7 @@ int handleSipEntityType( modparam_t type, void* val)
+ 		return -1;
+ 	}
+ 
+-	char *strEntityType = (char *)val;
++	strEntityType = (char *)val;
+ 
+ 	/* This is our first time through this function, so we need to change
+ 	 * openserEntityType from its default to 0, allowing our bitmasks below
+diff --git a/modules/snmpstats/openserSIPContactTable.c b/modules/snmpstats/openserSIPContactTable.c
+index 7edc1210ce..03588029c8 100644
+--- a/modules/snmpstats/openserSIPContactTable.c
++++ b/modules/snmpstats/openserSIPContactTable.c
+@@ -261,10 +261,10 @@ void deleteContactRow(int userIndex, int contactIndex)
+  */
+ void init_openserSIPContactTable(void)
+ {
+-	initialize_table_openserSIPContactTable();
+-
+ 	static char *defaultUser = "DefaultUser";
+ 
++	initialize_table_openserSIPContactTable();
++
+ 	createContactRow(1, 1, defaultUser, NULL);
+ }
+ 
+@@ -354,14 +354,16 @@ int openserSIPContactTable_get_value(
+ 	char       *retrievedExpiry;
+ 	struct tm  timeValue;
+ 
++	netsnmp_variable_list *var = NULL;
++	openserSIPContactTable_context *context = NULL;
++
+ 	/* First things first, we need to consume the interprocess buffer, in
+ 	 * case something has changed. We want to return the freshest data. */
+ 	consumeInterprocessBuffer();
+ 
+-	netsnmp_variable_list *var = request->requestvb;
++	var = request->requestvb;
+ 
+-	openserSIPContactTable_context *context =
+-		(openserSIPContactTable_context *)item;
++	context = (openserSIPContactTable_context *)item;
+ 
+ 	switch(table_info->colnum)
+ 	{
+diff --git a/modules/snmpstats/openserSIPPortTable.c b/modules/snmpstats/openserSIPPortTable.c
+index a10758273a..3a03b72b21 100644
+--- a/modules/snmpstats/openserSIPPortTable.c
++++ b/modules/snmpstats/openserSIPPortTable.c
+@@ -104,19 +104,17 @@ openserSIPPortTable_context *getRow(int ipType, unsigned int *ipAddress)
+ {
+ 	int lengthOfOID;
+ 	oid *currentOIDIndex = createIndex(ipType, ipAddress, &lengthOfOID);
++	netsnmp_index theIndex;
++	openserSIPPortTable_context *rowToReturn = NULL;
+ 
+ 	if (currentOIDIndex == NULL)
+ 	{
+ 		return NULL;
+ 	}
+ 
+-	netsnmp_index theIndex;
+-
+ 	theIndex.oids = currentOIDIndex;
+ 	theIndex.len  = lengthOfOID;
+ 
+-	openserSIPPortTable_context *rowToReturn;
+-
+ 	/* Lets check to see if there is an existing row. */
+ 	rowToReturn = CONTAINER_FIND(cb.container, &theIndex);
+ 
+@@ -218,8 +216,6 @@ void init_openserSIPPortTable(void)
+ {
+ 	int curSNMPIndex = 0;
+ 
+-	initialize_table_openserSIPPortTable();
+-
+ 	unsigned int *UDPList = NULL;
+ 	unsigned int *TCPList = NULL;
+ 	unsigned int *TLSList = NULL;
+@@ -228,6 +224,8 @@ void init_openserSIPPortTable(void)
+ 	int numTCPSockets;
+ 	int numTLSSockets;
+ 
++	initialize_table_openserSIPPortTable();
++
+ 	/* Retrieve the list of the number of UDP and TCP sockets. */
+ 	numUDPSockets = get_socket_list_from_proto(&UDPList, PROTO_UDP);
+ 	numTCPSockets = get_socket_list_from_proto(&TCPList, PROTO_TCP);
+diff --git a/modules/snmpstats/openserSIPRegUserLookupTable.c b/modules/snmpstats/openserSIPRegUserLookupTable.c
+index 324df618fd..a54b583752 100644
+--- a/modules/snmpstats/openserSIPRegUserLookupTable.c
++++ b/modules/snmpstats/openserSIPRegUserLookupTable.c
+@@ -514,23 +514,20 @@ void openserSIPRegUserLookupTable_set_reserve2( netsnmp_request_group *rg )
+  */
+ void openserSIPRegUserLookupTable_set_action( netsnmp_request_group *rg )
+ {
+-	/* First things first, we need to consume the interprocess buffer, in
+-	 * case something has changed. We want to return the freshest data. */
+-	consumeInterprocessBuffer();
+-
+ 	aorToIndexStruct_t *hashRecord;
+-
+ 	netsnmp_variable_list *var;
++	netsnmp_request_group_item *current;
++	int row_err = 0;
++	openserSIPRegUserLookupTable_context *row_ctx = NULL;
++	openserSIPRegUserLookupTable_context *undo_ctx = NULL;
+ 
+-	openserSIPRegUserLookupTable_context *row_ctx =
+-		(openserSIPRegUserLookupTable_context *)rg->existing_row;
+-
+-	openserSIPRegUserLookupTable_context *undo_ctx =
+-		(openserSIPRegUserLookupTable_context *)rg->undo_info;
++	/* First things first, we need to consume the interprocess buffer, in
++	 * case something has changed. We want to return the freshest data. */
++	consumeInterprocessBuffer();
+ 
+-	netsnmp_request_group_item *current;
++	row_ctx = (openserSIPRegUserLookupTable_context *)rg->existing_row;
+ 
+-	int			row_err = 0;
++	undo_ctx = (openserSIPRegUserLookupTable_context *)rg->undo_info;
+ 
+ 	/* Copy the actual data to the row. */
+ 	for( current = rg->list; current; current = current->next ) {
+diff --git a/modules/snmpstats/openserSIPRegUserTable.c b/modules/snmpstats/openserSIPRegUserTable.c
+index 43b14cdeb7..9cf029df9d 100644
+--- a/modules/snmpstats/openserSIPRegUserTable.c
++++ b/modules/snmpstats/openserSIPRegUserTable.c
+@@ -225,15 +225,14 @@ void updateUser(char *userName)
+  * Returns: The rows userIndex on success, and 0 otherwise. */
+ int createRegUserRow(char *stringToRegister)
+ {
+-	int static index = 0;
+-
+-	index++;
+-
+ 	openserSIPRegUserTable_context *theRow;
+-
+ 	oid  *OIDIndex;
+ 	int  stringLength;
+ 
++	int static index = 0;
++
++	index++;
++
+ 	theRow = SNMP_MALLOC_TYPEDEF(openserSIPRegUserTable_context);
+ 
+ 	if (theRow == NULL) {
+@@ -280,12 +279,12 @@ int createRegUserRow(char *stringToRegister)
+ /* Initializes the openserSIPRegUserTable module.  */
+ void init_openserSIPRegUserTable(void)
+ {
+-	/* Register this table with the master agent */
+-	initialize_table_openserSIPRegUserTable();
+-
+ 	/* We need to create a default row, so create DefaultUser */
+ 	static char *defaultUser = "DefaultUser";
+ 
++	/* Register this table with the master agent */
++	initialize_table_openserSIPRegUserTable();
++
+ 	createRegUserRow(defaultUser);
+ }
+ 
+@@ -350,14 +349,16 @@ int openserSIPRegUserTable_get_value(
+ 		netsnmp_index *item,
+ 		netsnmp_table_request_info *table_info )
+ {
++	netsnmp_variable_list *var = NULL;
++	openserSIPRegUserTable_context *context = NULL;
++
+ 	/* First things first, we need to consume the interprocess buffer, in
+ 	 * case something has changed. We want to return the freshest data. */
+ 	consumeInterprocessBuffer();
+ 
+-	netsnmp_variable_list *var = request->requestvb;
++	var = request->requestvb;
+ 
+-	openserSIPRegUserTable_context *context =
+-		(openserSIPRegUserTable_context *)item;
++	context = (openserSIPRegUserTable_context *)item;
+ 
+ 	switch(table_info->colnum)
+ 	{
+diff --git a/modules/snmpstats/openserSIPStatusCodesTable.c b/modules/snmpstats/openserSIPStatusCodesTable.c
+index 2b396c6985..79f3a129a3 100644
+--- a/modules/snmpstats/openserSIPStatusCodesTable.c
++++ b/modules/snmpstats/openserSIPStatusCodesTable.c
+@@ -310,6 +310,7 @@ int openserSIPStatusCodesTable_can_delete(
+ openserSIPStatusCodesTable_context *
+ openserSIPStatusCodesTable_create_row( netsnmp_index* hdr)
+ {
++	int codeIndex;
+ 	stat_var *in_status_code;
+ 	stat_var *out_status_code;
+ 
+@@ -337,7 +338,7 @@ openserSIPStatusCodesTable_create_row( netsnmp_index* hdr)
+ 	/* Retrieve the index for the status code, and then assign the starting
+ 	 * values.  The starting values will be used to calculate deltas during
+ 	 * the next snmpget/snmpwalk/snmptable/etc. */
+-	int codeIndex = ctx->openserSIPStatusCodeValue;
++	codeIndex = ctx->openserSIPStatusCodeValue;
+ 
+ 	ctx->startingInStatusCodeValue  = 0;
+ 	ctx->startingOutStatusCodeValue = 0;
+diff --git a/modules/snmpstats/snmpstats.c b/modules/snmpstats/snmpstats.c
+index 95bc1c1f3b..575c0d1068 100644
+--- a/modules/snmpstats/snmpstats.c
++++ b/modules/snmpstats/snmpstats.c
+@@ -346,7 +346,12 @@ static void sigchld_handler(int signal)
+  */
+ static int spawn_sysUpTime_child(void)
+ {
++	pid_t result_pid;
++	int snmpget_fd;
++	int local_path_to_snmpget_length;
++	int snmpget_binary_name_length;
+ 	struct sigaction new_sigchld_handler;
++	char *args[6];
+ 
+ 	char *local_path_to_snmpget = "/usr/bin/";
+ 	char *snmpget_binary_name   = "/snmpget";
+@@ -362,7 +367,7 @@ static int spawn_sysUpTime_child(void)
+ 	new_sigchld_handler.sa_handler = sigchld_handler;
+ 	sigaction(SIGCHLD, &new_sigchld_handler, &old_sigchld_handler);
+ 
+-	pid_t result_pid = fork();
++	result_pid = fork();
+ 
+ 	if (result_pid < 0) {
+ 		LM_ERR("failed to not spawn an agent to check sysUpTime\n");
+@@ -380,7 +385,7 @@ static int spawn_sysUpTime_child(void)
+ 
+ 	/* If we are here, then we are the child process.  Lets set up the file
+ 	 * descriptors so we can capture the output of snmpget. */
+-	int snmpget_fd =
++	snmpget_fd =
+ 		open(SNMPGET_TEMP_FILE, O_CREAT|O_TRUNC|O_RDWR,
+ 				S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
+ 
+@@ -401,8 +406,12 @@ static int spawn_sysUpTime_child(void)
+ 				"  Defaulting to %s\n",	snmp_community_string);
+ 	}
+ 
+-	char *args[] = {"-Ov", "-c",  snmp_community_string, "localhost",
+-		SYSUPTIME_OID, (char *) 0};
++	args[0] = "-Ov";
++	args[1] = "-c";
++	args[2] = snmp_community_string;
++	args[3] = "localhost";
++	args[4] = SYSUPTIME_OID;
++	args[5] = (char *)0;
+ 
+ 	/* Make sure we have a path to snmpget, so we can retrieve the
+ 	 * sysUpTime. */
+@@ -416,8 +425,8 @@ static int spawn_sysUpTime_child(void)
+ 		local_path_to_snmpget = snmpget_path;
+ 	}
+ 
+-	int local_path_to_snmpget_length = strlen(local_path_to_snmpget);
+-	int snmpget_binary_name_length   = strlen(snmpget_binary_name);
++	local_path_to_snmpget_length = strlen(local_path_to_snmpget);
++	snmpget_binary_name_length   = strlen(snmpget_binary_name);
+ 
+ 	/* Allocate enough memory to hold the path, the binary name, and the
+ 	 * null character.  We don't use pkg_memory here. */
+diff --git a/modules/snmpstats/utilities.c b/modules/snmpstats/utilities.c
+index dfc0978b74..2f7ed9a307 100644
+--- a/modules/snmpstats/utilities.c
++++ b/modules/snmpstats/utilities.c
+@@ -72,13 +72,13 @@ int stringHandlerSanityCheck( modparam_t type, void *val, char *parameterName)
+ int get_statistic(char *statName)
+ {
+ 	int result = 0;
+-
++	stat_var *theVar = NULL;
+ 	str theStr;
+ 
+ 	theStr.s   = statName;
+ 	theStr.len = strlen(statName);
+ 
+-	stat_var *theVar = get_stat(&theStr);
++	theVar = get_stat(&theStr);
+ 
+ 	if (theVar==0) {
+ 		LM_INFO("failed to retrieve statistics for %s\n", statName);

diff --git a/opensips-0007-Fix-const-correctness-warnings-in-HTTP-and-FreeSWITC.patch b/opensips-0007-Fix-const-correctness-warnings-in-HTTP-and-FreeSWITC.patch
deleted file mode 100644
index 1eed53d..0000000
--- a/opensips-0007-Fix-const-correctness-warnings-in-HTTP-and-FreeSWITC.patch
+++ /dev/null
@@ -1,156 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Peter Lemenkov <lemenkov@gmail.com>
-Date: Sat, 20 Dec 2025 20:16:48 +0100
-Subject: [PATCH] Fix const-correctness warnings in HTTP and FreeSWITCH ESL
- code
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-During compilation with GCC 15.2.1, const-qualifier warnings appear in multiple modules:
-```
-modules/httpd/httpd_proc.c:348:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
-  348 |                 if ( (p=strchr(value, ';'))!=NULL ) {
-      |                        ^
-
-...
-
-modules/freeswitch/esl/src/esl_event.c:428:24: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
-  428 |         if ((index_ptr = strchr(header_name, '['))) {
-      |                        ^
-```
-
-In `esl_event_base_add_header()`, the `header_name` parameter is `const char *`, and `strchr()` returns `const char *` when given a const input. The `index_ptr` variable was declared as non-const `char *`, causing the warning.
-
-**Fix:** Changed variable declaration from `char *index_ptr` to `const char *index_ptr`.
-
-This is safe because `index_ptr` is only used for reading/parsing, never for modification.
-
-The `getConnectionHeader()` function receives `value` as `const char *`, and `strchr()` preserves const-ness by returning `const char *`. However, the code was assigning this to a non-const `char *p` and then modifying the string by temporarily inserting a null terminator to parse the MIME type.
-
-**Original approach (problematic):**
-```c
-char *p, bk;
-if ( (p=strchr(value, ';'))!=NULL ) {
-    while( p>value && (*(p-1)==' ' || *(p-1)=='\t') ) p--;
-    bk = *p;
-    *p = 0;  // Modify const string!
-    if (strcasecmp("text/xml", value) == 0) ...
-    *p = bk;  // Restore
-}
-```
-
-This violates const-correctness by modifying a const string, which is undefined behavior even if it happens to work in practice.
-
-Calculate the effective length without modifying the string.
-
-**New approach:**
-```c
-const char *p, *end;
-end = value + strlen(value);  // default to full length
-if ( (p=strchr(value, ';'))!=NULL ) {
-    end = p;
-    while( end>value && (*(end-1)==' ' || *(end-1)=='\t') ) end--;
-}
-if (strncasecmp("text/xml", value, end - value) == 0) ...
-```
-
-The length calculation `end - value` ensures we compare exactly the MIME type portion, preventing false matches with longer strings.
-
-**Example of the problem we're preventing:**
-```
-Content-Type: text/xmlfoobar; charset=utf-8
-```
-
-Without using the calculated length:
-```c
-// BAD: Using a fixed length
-if (strncasecmp("text/xml", value, 8) == 0) ...
-// This would match "text/xmlfoobar" because first 8 chars match!
-```
-
-With calculated length:
-```c
-end = strchr(value, ';')  // Points to ';'
-// After trimming: end - value = 14 (length of "text/xmlfoobar")
-if (strncasecmp("text/xml", value, 14) == 0) ...
-// ✓ Correctly rejects: strncasecmp compares 8 chars of "text/xml"
-//   vs 14 chars needed, hits \0 in first string, returns non-zero
-```
-
-The key insight: `strncasecmp(str1, str2, n)` will return non-zero if either string is shorter than `n` characters (due to null terminator), ensuring we don't match strings that are longer than our expected MIME type.
-
-1. Changed `char *p, bk;` to `const char *p, *end;`
-2. Removed `bk` variable (no longer needed)
-3. Calculate `end` pointer to mark the effective end of the MIME type
-4. Updated all MIME type comparisons to use `strncasecmp()` with `end - value` length
-5. Removed code that modified and restored the const string
-
-Affected MIME types:
-- `text/xml`
-- `application/json`
-- `text/html`
-- `text/plain`
-
-Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-Assisted-by: Claude (Anthropic) <https://claude.ai>
-
-diff --git a/modules/freeswitch/esl/src/esl_event.c b/modules/freeswitch/esl/src/esl_event.c
-index a12b6d637b..f624973884 100644
---- a/modules/freeswitch/esl/src/esl_event.c
-+++ b/modules/freeswitch/esl/src/esl_event.c
-@@ -425,7 +425,7 @@ static esl_status_t esl_event_base_add_header(esl_event_t *event, esl_stack_t st
- 		esl_event_set_body(event, data);
- 	}
- 
--	if ((index_ptr = strchr(header_name, '['))) {
-+	if ((index_ptr = (char *)strchr(header_name, '['))) {
- 		index_ptr++;
- 		index = atoi(index_ptr);
- 		real_header_name = DUP(header_name);
-diff --git a/modules/httpd/httpd_proc.c b/modules/httpd/httpd_proc.c
-index 708e00b40d..2646f04147 100644
---- a/modules/httpd/httpd_proc.c
-+++ b/modules/httpd/httpd_proc.c
-@@ -326,7 +326,7 @@ MHD_RET getConnectionHeader(void *cls, enum MHD_ValueKind kind,
- 	struct post_request *pr = (struct post_request*)cls;
- 	str content_length;
- 	unsigned int len;
--	char *p, bk;
-+	const char *p, *end;
- 
- 	if (cls == NULL) {
- 		LM_ERR("Unable to store return data\n");
-@@ -350,24 +350,24 @@ MHD_RET getConnectionHeader(void *cls, enum MHD_ValueKind kind,
- 	if (strcasecmp("Content-Type", key) == 0) {
- 		LM_DBG("Content-Type=%s\n", value);
- 		/* extract only the mime */
-+		end = value + strlen(value);  // default to full length
- 		if ( (p=strchr(value, ';'))!=NULL ) {
--			while( p>value && (*(p-1)==' ' || *(p-1)=='\t') ) p--;
--			bk = *p;
--			*p = 0;
-+			end = p;
-+			while( end>value && (*(end-1)==' ' || *(end-1)=='\t') ) end--;
- 		}
--		if (strcasecmp("text/xml", value) == 0)
-+		len = end - value;
-+		if (strncasecmp("text/xml", value, end - value) == 0)
- 			pr->content_type = HTTPD_TEXT_XML_CNT_TYPE;
--		else if (strncasecmp("application/json", value, 16) == 0)
-+		else if (strncasecmp("application/json", value, end - value) == 0)
- 			pr->content_type = HTTPD_APPLICATION_JSON_CNT_TYPE;
--		else if (strncasecmp("text/html", value, 9) == 0)
-+		else if (strncasecmp("text/html", value, end - value) == 0)
- 			pr->content_type = HTTPD_TEXT_HTML_TYPE;
--		else if (strncasecmp("text/plain", value, 10) == 0)
-+		else if (strncasecmp("text/plain", value, end - value) == 0)
- 			pr->content_type = HTTPD_TEXT_PLAIN_TYPE;
- 		else {
- 			pr->content_type = HTTPD_UNKNOWN_CNT_TYPE;
- 			LM_ERR("Unexpected Content-Type=[%s]\n", value);
- 		}
--		if (p) *p = bk;
- 		goto done;
- 	}
- 	if (strcasecmp("Content-Length", key) == 0) {

diff --git a/opensips-0008-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch b/opensips-0008-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch
deleted file mode 100644
index 6c9d628..0000000
--- a/opensips-0008-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Peter Lemenkov <lemenkov@gmail.com>
-Date: Fri, 26 Dec 2025 17:25:05 +0100
-Subject: [PATCH] Fix uninitialized va_list warning on ppc64le and i686 with
- GCC 15
-
-During compilation on ppc64le and i686 architectures with GCC 15, a
-warning appears:
-
-```
-cachedb_redis_dbase.c: In function 'redis_run_command_argv':
-cachedb_redis_dbase.c:659:16: warning: '_' is used uninitialized [-Wuninitialized]
-  659 |         return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, _);
-      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-cachedb_redis_dbase.c:657:17: note: '_' was declared here
-  657 |         va_list _;
-      |                 ^
-```
-
-In commit d6ad6d4039fcf68624481f69ee67eff92f7b3ab2, the
-`redis_run_command_argv()` function was modified to pass an
-uninitialized `va_list` to `_redis_run_command()`.
-
-The original logic is:
-```c
-static int redis_run_command_argv(...) {
-    va_list _;
-    return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, _);
-}
-```
-
-The underscore `_` was used as a "don't care" placeholder, since when
-`argc` is non-zero, `_redis_run_command()` uses the `argv` path and
-never accesses the `va_list` parameter:
-
-```c
-if (argc) {
-    reply = redisCommandArgv(node->context, argc, argv, argvlen);
-} else {
-    va_copy(aq, ap);  // Only executed when argc == 0
-    reply = redisvCommand(node->context, cmd_fmt, aq);
-    va_end(aq);
-}
-```
-
-While this worked in practice (the uninitialized `va_list` is never
-actually used), GCC 15 now correctly warns that passing uninitialized
-data is undefined behavior, even if that data is never accessed.
-
-Initialize the `va_list` to a safe value using zero-initialization. This
-satisfies the compiler's uninitialized variable check while maintaining
-the original logic - the `va_list` still won't be used when `argc` is
-non-zero, but it's now validly initialized.
-
-**Changed:**
-```c
-va_list _;
-```
-
-**To:**
-```c
-va_list unused_ap = {0};
-```
-
-Also renamed from `_` to `unused_ap` for clarity, as single underscore
-identifiers can be problematic and don't clearly convey intent.
-
-Even though the uninitialized `va_list` is never accessed in practice,
-passing uninitialized data violates C's rules and can cause issues with:
-
-- Static analysis tools
-- Compiler optimizations that assume no undefined behavior
-- Future architecture-specific `va_list` implementations
-- Code maintainability (unclear intent)
-
-This change makes the code compliant with C standards while preserving
-the original functionality.
-
-Related commit: d6ad6d4039fcf68624481f69ee67eff92f7b3ab2
-("cachedb_redis: properly pass variable arguments to a Redis command")
-
-Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-Assisted-by: Claude (Anthropic) <https://claude.ai>
-
-diff --git a/modules/cachedb_redis/cachedb_redis_dbase.c b/modules/cachedb_redis/cachedb_redis_dbase.c
-index 5ef92c6a5a..5c6a9c72d3 100644
---- a/modules/cachedb_redis/cachedb_redis_dbase.c
-+++ b/modules/cachedb_redis/cachedb_redis_dbase.c
-@@ -660,9 +660,9 @@ static int redis_run_command(cachedb_con *connection, redisReply **rpl,
- static int redis_run_command_argv(cachedb_con *connection, redisReply **rpl,
-               str *key, int argc, const char **argv, const size_t *argvlen)
- {
--	va_list _;
-+	va_list unused_ap = {0};
- 
--	return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, _);
-+	return _redis_run_command(connection, rpl, key, argc, argv, argvlen, NULL, unused_ap);
- }
- 
- int redis_get(cachedb_con *connection,str *attr,str *val)

diff --git a/opensips-0009-Fix-pointer-truncation-warning-on-32-bit-architectur.patch b/opensips-0009-Fix-pointer-truncation-warning-on-32-bit-architectur.patch
deleted file mode 100644
index 146a802..0000000
--- a/opensips-0009-Fix-pointer-truncation-warning-on-32-bit-architectur.patch
+++ /dev/null
@@ -1,291 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Peter Lemenkov <lemenkov@gmail.com>
-Date: Fri, 26 Dec 2025 21:08:00 +0100
-Subject: [PATCH] Fix pointer truncation warning on 32-bit architectures in
- aaa_diameter
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-During compilation on i686 (32-bit) architecture with GCC 15, a pointer
-truncation warning appears:
-
-```
-aaa_diameter.c: In function 'dm_send_answer':
-aaa_diameter.c:423:73: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
-  423 |  dmsg = _dm_create_message(NULL, AAA_CUSTOM_RPL, appid, cmdcode, (void *)fd_req);
-```
-
-The `dm_message` struct stores a pointer to a FreeDiameter message
-structure in the `fd_req` field, but the type is mismatched across
-different code paths:
-
-1. In `aaa_diameter.c`, a pointer is serialized as `uint64_t` (8 bytes)
-2. It's then cast to `void *` and passed to `_dm_create_message()`
-3. On **i686**, `void *` is only 4 bytes, causing **truncation** of the
-   upper 32 bits
-4. In `dm_peer.c`, it's cast back to `struct msg *` for use
-
-**On x86_64 (64-bit):**
-
-- `uint64_t` = 8 bytes
-- `void *` = 8 bytes
-- No truncation, works fine
-
-**On i686 (32-bit):**
-
-- `uint64_t` = 8 bytes
-- `void *` = 4 bytes
-- **Truncation occurs**, losing upper 32 bits of the pointer!
-
-Change `fd_req` from `void *` to `uintptr_t` throughout the codebase.
-
-`uintptr_t` is:
-
-- **Portable**: Sized correctly for pointers on any architecture (4
-  bytes on 32-bit, 8 bytes on 64-bit)
-- **Standard**: Defined in C99 `<stdint.h>`
-- **Semantic**: Explicitly designed for storing pointer values as
-  integers
-- **Safe**: Guaranteed by C99 to preserve pointer values during
-  round-trip conversions
-
-**1. Struct definition (`modules/aaa_diameter/dm_impl.h` line 93):**
-
-```c
-struct dm_message {
-    // Changed from: void *fd_req;
-    uintptr_t fd_req;
-    // ...
-};
-```
-
-**2. Function signature (`modules/aaa_diameter/dm_impl.h` ~line 165):**
-
-```c
-aaa_message *_dm_create_message(aaa_conn *_, int msg_type,
-    unsigned int app_id, unsigned int cmd_code, uintptr_t fd_req);
-    // Changed from: void *fd_req
-```
-
-**3. Function definition (`modules/aaa_diameter/dm_impl.c` line 1695):**
-
-```c
-aaa_message *_dm_create_message(aaa_conn *_, int msg_type,
-    unsigned int app_id, unsigned int cmd_code, uintptr_t fd_msg)
-    // Changed from: void *fd_msg
-```
-
-**4. Call sites - pointer to uintptr_t:**
-
-```c
-// aaa_diameter.c line 423 - remove void* cast:
-dmsg = _dm_create_message(NULL, AAA_CUSTOM_RPL, appid, cmdcode, fd_req);
-
-// dm_impl.c - add explicit casts when storing pointers:
-dm.fd_req = (uintptr_t)req;
-dm->fd_req = (uintptr_t)fd_msg;
-```
-
-**5. Call sites with NULL - use 0 instead:**
-
-Since `uintptr_t` is an integer type (not a pointer type), we use `0`
-instead of `NULL` to represent "no pointer":
-
-```c
-// Multiple locations in aaa_diameter.c, dm_impl.c:
-dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, *app_id, *cmd_code, 0);
-// Changed from: ..., NULL);
-```
-
-**Note:** In C, `NULL` is typically `((void *)0)` - a pointer type. When
-passing to an integer parameter like `uintptr_t`, we use the integer `0`
-directly to avoid implicit pointer-to-integer conversion warnings.
-
-**6. Usage site - uintptr_t to pointer (`dm_peer.c`):**
-
-```c
-// Changed from: struct msg *ans = (struct msg *)dm->fd_req;
-struct msg *ans = (struct msg *)(uintptr_t)dm->fd_req;
-```
-
-The double cast `(struct msg *)(uintptr_t)value` is required by C99 for
-guaranteed correctness:
-
-1. **C99 guarantees** that any pointer can be converted to `uintptr_t` and back
-2. Direct `integer → pointer` conversion is **implementation-defined** behavior
-3. The proper conversion path is: `pointer → uintptr_t → pointer`
-
-While a single cast from `uintptr_t` to pointer often works in practice,
-the double cast explicitly follows the C99 standard's guaranteed
-conversion path, ensuring the code is strictly conformant and won't
-cause issues with strict aliasing rules or future compiler
-optimizations.
-
-The pattern is:
-- **Pointer → uintptr_t**: `(uintptr_t)pointer`
-- **uintptr_t → Pointer**: `(struct msg *)(uintptr_t)value`
-- **Null value**: `0` (not `NULL`, since `uintptr_t` is an integer type)
-
-This fix ensures pointers are correctly preserved on all architectures
-without truncation.
-
-Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-Assisted-by: Claude (Anthropic) <https://claude.ai>
-
-diff --git a/modules/aaa_diameter/aaa_diameter.c b/modules/aaa_diameter/aaa_diameter.c
-index 410a4cb122..4382af7acd 100644
---- a/modules/aaa_diameter/aaa_diameter.c
-+++ b/modules/aaa_diameter/aaa_diameter.c
-@@ -19,6 +19,7 @@
-  */
- 
- #include <freeDiameter/extension.h>
-+#include <stdint.h>
- 
- #include "../../sr_module.h"
- #include "../../lib/list.h"
-@@ -308,7 +309,7 @@ static int dm_send_request(struct sip_msg *msg, int *app_id, int *cmd_code,
- 		goto error;
- 	}
- 
--	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, *app_id, *cmd_code, NULL);
-+	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, *app_id, *cmd_code, 0);
- 	if (!dmsg) {
- 		LM_ERR("oom\n");
- 		goto error;
-@@ -421,7 +422,7 @@ static int dm_send_answer(struct sip_msg *msg, str *avp_json, int *is_error)
- 		reverse_hex2int64(res.rs.s, res.rs.len, 1, &fd_req);
- 	}
- 
--	dmsg = _dm_create_message(NULL, AAA_CUSTOM_RPL, appid, cmdcode, (void *)fd_req);
-+	dmsg = _dm_create_message(NULL, AAA_CUSTOM_RPL, appid, cmdcode, fd_req);
- 	if (!dmsg) {
- 		LM_ERR("oom\n");
- 		goto error;
-@@ -581,7 +582,7 @@ static int dm_send_request_async(struct sip_msg *msg, async_ctx *ctx,
- 		goto error;
- 	}
- 
--	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, *app_id, *cmd_code, NULL);
-+	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, *app_id, *cmd_code, 0);
- 	if (!dmsg) {
- 		LM_ERR("oom\n");
- 		goto error;
-diff --git a/modules/aaa_diameter/dm_impl.c b/modules/aaa_diameter/dm_impl.c
-index 1608ec276c..393483fd21 100644
---- a/modules/aaa_diameter/dm_impl.c
-+++ b/modules/aaa_diameter/dm_impl.c
-@@ -21,6 +21,7 @@
- #include <freeDiameter/extension.h>
- #include <sys/eventfd.h>
- #include <inttypes.h>
-+#include <stdint.h>
- 
- #include "../../ut.h"
- #include "../../lib/list.h"
-@@ -601,7 +602,7 @@ static int dm_receive_req(struct msg **_req, struct avp * avp, struct session *
- 
- 		memset(&dm, 0, sizeof dm);
- 
--		dm.fd_req = req;
-+		dm.fd_req = (uintptr_t)req;
- 		dm.app_id = hdr->msg_appl;
- 		dm.cmd_code = hdr->msg_code;
- 		dm.error_bit = 1;
-@@ -1754,7 +1755,7 @@ int dm_api_find_cmd(diameter_conn *conn, int cmd_code)
- }
- 
- aaa_message *_dm_create_message(aaa_conn *_, int msg_type,
--        unsigned int app_id, unsigned int cmd_code, void *fd_msg)
-+        unsigned int app_id, unsigned int cmd_code, uintptr_t fd_msg)
- {
- 	aaa_message *m;
- 	struct dm_message *dm;
-@@ -1781,7 +1782,7 @@ aaa_message *_dm_create_message(aaa_conn *_, int msg_type,
- 	dm->am = m;
- 	dm->app_id = app_id;
- 	dm->cmd_code = cmd_code;
--	dm->fd_req = fd_msg;
-+	dm->fd_req = (uintptr_t)fd_msg;
- 
- 	return m;
- }
-@@ -1789,7 +1790,7 @@ aaa_message *_dm_create_message(aaa_conn *_, int msg_type,
- 
- aaa_message *dm_create_message(aaa_conn *_, int msg_type)
- {
--	return _dm_create_message(_, msg_type, 0, 0, NULL);
-+	return _dm_create_message(_, msg_type, 0, 0, 0);
- }
- 
- 
-@@ -2144,7 +2145,7 @@ int dm_api_send_req(diameter_conn *conn, int app_id, int cmd_code, cJSON *req, d
- 		return -2;
- 	}
- 
--	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, app_id, cmd_code, NULL);
-+	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, app_id, cmd_code, 0);
- 	if (!dmsg) {
- 		LM_ERR("oom\n");
- 		return -1;
-@@ -2181,7 +2182,7 @@ int dm_api_send_req_async(diameter_conn *conn, int app_id, int cmd_code, cJSON *
- 		return -2;
- 	}
- 
--	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, app_id, cmd_code, NULL);
-+	dmsg = _dm_create_message(NULL, AAA_CUSTOM_REQ, app_id, cmd_code, 0);
- 	if (!dmsg) {
- 		LM_ERR("oom\n");
- 		return -1;
-diff --git a/modules/aaa_diameter/dm_impl.h b/modules/aaa_diameter/dm_impl.h
-index b25cd77f19..52e3f23da5 100644
---- a/modules/aaa_diameter/dm_impl.h
-+++ b/modules/aaa_diameter/dm_impl.h
-@@ -24,6 +24,7 @@
- #include "../../aaa/aaa.h"
- #include "../../mem/shm_mem.h"
- #include "diameter_api.h"
-+#include <stdint.h>
- 
- #define __FD_CHECK(__call__, __retok__, __retval__) \
- 	do { \
-@@ -91,7 +92,7 @@ struct _dm_dict {
- struct dm_message {
- 	aaa_message *am; /* back-reference, useful during cleanup */
- 
--	void *fd_req;
-+	uintptr_t fd_req;
- 	unsigned int app_id;   /* these two are used when sending */
- 	unsigned int cmd_code; /* custom Diameter requests */
- 	int error_bit;
-@@ -182,7 +183,7 @@ int dm_register_callbacks(void);
- int dm_find(aaa_conn *_, aaa_map *map, int op);
- aaa_message *dm_create_message(aaa_conn *_, int msg_type);
- aaa_message *_dm_create_message(aaa_conn *_, int msg_type,
--        unsigned int app_id, unsigned int cmd_code, void *fd_req);
-+        unsigned int app_id, unsigned int cmd_code, uintptr_t fd_req);
- int dm_avp_add(aaa_conn *_, aaa_message *msg, aaa_map *avp, void *val,
-                int val_length, int vendor);
- int dm_build_avps(struct list_head *subavps, cJSON *array);
-diff --git a/modules/aaa_diameter/dm_peer.c b/modules/aaa_diameter/dm_peer.c
-index 9dbfd1d6c9..06b17a8845 100644
---- a/modules/aaa_diameter/dm_peer.c
-+++ b/modules/aaa_diameter/dm_peer.c
-@@ -24,6 +24,7 @@
- #include "../../sr_module.h"
- #include "../../locking.h"
- #include "../../lib/list.h"
-+#include <stdint.h>
- 
- #include "dm_impl.h"
- #include "dm_peer.h"
-@@ -511,7 +512,7 @@ static int dm_send_custom_req(struct dm_message *msg)
- 
- int dm_send_custom_rpl(struct dm_message *dm)
- {
--	struct msg *ans = (struct msg *)dm->fd_req;
-+	struct msg *ans = (struct msg *)(uintptr_t)dm->fd_req;
- 	int rc, flags = 0;
- 
- 	if (!dm_server_autoreply_error && dm_remove_unreplied_req(ans) != 0) {

diff --git a/opensips-0010-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch b/opensips-0010-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch
deleted file mode 100644
index 2689e4e..0000000
--- a/opensips-0010-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch
+++ /dev/null
@@ -1,381 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Peter Lemenkov <lemenkov@gmail.com>
-Date: Sat, 31 Jan 2026 15:11:20 +0100
-Subject: [PATCH] Fix C90-style declaration warnings in snmpstats module
-
-Build fails with `-Werror=declaration-after-statement` (enforced by
-net-snmp pkg-config) due to variables declared after executable
-statements:
-
-```
-openserObjects.c:619:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
-  619 |         int new_threshold = (int)(long)(int *)val;
-
-openserSIPCommonObjects.c:244:17: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
-  244 |                 char *openBracePosition   = strchr(buffer, '(');
-
-openserSIPCommonObjects.c:475:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
-  475 |         char *strEntityType = (char *)val;
-
-openserSIPContactTable.c:266:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
-  266 |         static char *defaultUser = "DefaultUser";
-
-openserSIPContactTable.c:361:9: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
-  361 |         netsnmp_variable_list *var = request->requestvb;
-```
-
-The net-snmp library's pkg-config adds
-`-Werror=declaration-after-statement` to CFLAGS, enforcing C90-style
-declaration ordering (all declarations before statements).
-
-While OpenSIPS adheres to the C99 standard (which allows mixed
-declarations and code), the net-snmp library could require C90-style
-declarations for modules that link against it. Following this style
-doesn't hurt C99 compatibility and improves code portability.`
-
-Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-Assisted-by: Claude (Anthropic) <https://claude.ai>
-
-diff --git a/modules/snmpstats/openserObjects.c b/modules/snmpstats/openserObjects.c
-index 180b62dda7..909db4c80b 100644
---- a/modules/snmpstats/openserObjects.c
-+++ b/modules/snmpstats/openserObjects.c
-@@ -605,6 +605,8 @@ int handle_openserDialogLimitMajorAlarm(netsnmp_mib_handler *handler,
- static int set_if_valid_threshold(modparam_t type, void *val, char *varStr,
- 	int *newVal)
- {
-+	int new_threshold;
-+
- 	if (val==0) {
- 		LM_ERR("%s called with a null value!\n", varStr);
- 		return -1;
-@@ -616,7 +618,7 @@ static int set_if_valid_threshold(modparam_t type, void *val, char *varStr,
- 		return -1;
- 	}
- 
--	int new_threshold = (int)(long)(int *)val;
-+	new_threshold = (int)(long)(int *)val;
- 
- 	if (new_threshold < -1) {
- 		LM_ERR("%s called with an invalid threshold=%d!\n",
-diff --git a/modules/snmpstats/openserSIPCommonObjects.c b/modules/snmpstats/openserSIPCommonObjects.c
-index e37ab6ef2a..f2ddba5a7a 100644
---- a/modules/snmpstats/openserSIPCommonObjects.c
-+++ b/modules/snmpstats/openserSIPCommonObjects.c
-@@ -225,6 +225,8 @@ int handle_openserSIPServiceStartTime(netsnmp_mib_handler *handler,
- 
- 	int elapsedTime = 0;
- 	char buffer[SNMPGET_MAX_BUFFER];
-+	char *openBracePosition = NULL;
-+	char *closedBracePosition = NULL;
- 
- 	FILE *theFile = fopen(SNMPGET_TEMP_FILE, "r");
- 
-@@ -241,8 +243,8 @@ int handle_openserSIPServiceStartTime(netsnmp_mib_handler *handler,
- 
- 		/* Find the positions of '(' and ')' so we can extract out the
- 		 * timeticks value. */
--		char *openBracePosition   = strchr(buffer, '(');
--		char *closedBracePosition = strchr(buffer, ')');
-+		openBracePosition   = strchr(buffer, '(');
-+		closedBracePosition = strchr(buffer, ')');
- 
- 		/* Make sure that both the '(' and ')' exist in the file, and
- 		 * that '(' occurs earlier than the ')'.  If all these
-@@ -464,6 +466,7 @@ int handle_openserSIPOtherwiseDiscardedMsgs(netsnmp_mib_handler *handler,
-  */
- int handleSipEntityType( modparam_t type, void* val)
- {
-+	char *strEntityType = NULL;
- 
- 	/* By default we start off as "other". */
- 	static char firstTime = 1;
-@@ -472,7 +475,7 @@ int handleSipEntityType( modparam_t type, void* val)
- 		return -1;
- 	}
- 
--	char *strEntityType = (char *)val;
-+	strEntityType = (char *)val;
- 
- 	/* This is our first time through this function, so we need to change
- 	 * openserEntityType from its default to 0, allowing our bitmasks below
-diff --git a/modules/snmpstats/openserSIPContactTable.c b/modules/snmpstats/openserSIPContactTable.c
-index 7edc1210ce..03588029c8 100644
---- a/modules/snmpstats/openserSIPContactTable.c
-+++ b/modules/snmpstats/openserSIPContactTable.c
-@@ -261,10 +261,10 @@ void deleteContactRow(int userIndex, int contactIndex)
-  */
- void init_openserSIPContactTable(void)
- {
--	initialize_table_openserSIPContactTable();
--
- 	static char *defaultUser = "DefaultUser";
- 
-+	initialize_table_openserSIPContactTable();
-+
- 	createContactRow(1, 1, defaultUser, NULL);
- }
- 
-@@ -354,14 +354,16 @@ int openserSIPContactTable_get_value(
- 	char       *retrievedExpiry;
- 	struct tm  timeValue;
- 
-+	netsnmp_variable_list *var = NULL;
-+	openserSIPContactTable_context *context = NULL;
-+
- 	/* First things first, we need to consume the interprocess buffer, in
- 	 * case something has changed. We want to return the freshest data. */
- 	consumeInterprocessBuffer();
- 
--	netsnmp_variable_list *var = request->requestvb;
-+	var = request->requestvb;
- 
--	openserSIPContactTable_context *context =
--		(openserSIPContactTable_context *)item;
-+	context = (openserSIPContactTable_context *)item;
- 
- 	switch(table_info->colnum)
- 	{
-diff --git a/modules/snmpstats/openserSIPPortTable.c b/modules/snmpstats/openserSIPPortTable.c
-index a10758273a..3a03b72b21 100644
---- a/modules/snmpstats/openserSIPPortTable.c
-+++ b/modules/snmpstats/openserSIPPortTable.c
-@@ -104,19 +104,17 @@ openserSIPPortTable_context *getRow(int ipType, unsigned int *ipAddress)
- {
- 	int lengthOfOID;
- 	oid *currentOIDIndex = createIndex(ipType, ipAddress, &lengthOfOID);
-+	netsnmp_index theIndex;
-+	openserSIPPortTable_context *rowToReturn = NULL;
- 
- 	if (currentOIDIndex == NULL)
- 	{
- 		return NULL;
- 	}
- 
--	netsnmp_index theIndex;
--
- 	theIndex.oids = currentOIDIndex;
- 	theIndex.len  = lengthOfOID;
- 
--	openserSIPPortTable_context *rowToReturn;
--
- 	/* Lets check to see if there is an existing row. */
- 	rowToReturn = CONTAINER_FIND(cb.container, &theIndex);
- 
-@@ -218,8 +216,6 @@ void init_openserSIPPortTable(void)
- {
- 	int curSNMPIndex = 0;
- 
--	initialize_table_openserSIPPortTable();
--
- 	unsigned int *UDPList = NULL;
- 	unsigned int *TCPList = NULL;
- 	unsigned int *TLSList = NULL;
-@@ -228,6 +224,8 @@ void init_openserSIPPortTable(void)
- 	int numTCPSockets;
- 	int numTLSSockets;
- 
-+	initialize_table_openserSIPPortTable();
-+
- 	/* Retrieve the list of the number of UDP and TCP sockets. */
- 	numUDPSockets = get_socket_list_from_proto(&UDPList, PROTO_UDP);
- 	numTCPSockets = get_socket_list_from_proto(&TCPList, PROTO_TCP);
-diff --git a/modules/snmpstats/openserSIPRegUserLookupTable.c b/modules/snmpstats/openserSIPRegUserLookupTable.c
-index 324df618fd..a54b583752 100644
---- a/modules/snmpstats/openserSIPRegUserLookupTable.c
-+++ b/modules/snmpstats/openserSIPRegUserLookupTable.c
-@@ -514,23 +514,20 @@ void openserSIPRegUserLookupTable_set_reserve2( netsnmp_request_group *rg )
-  */
- void openserSIPRegUserLookupTable_set_action( netsnmp_request_group *rg )
- {
--	/* First things first, we need to consume the interprocess buffer, in
--	 * case something has changed. We want to return the freshest data. */
--	consumeInterprocessBuffer();
--
- 	aorToIndexStruct_t *hashRecord;
--
- 	netsnmp_variable_list *var;
-+	netsnmp_request_group_item *current;
-+	int row_err = 0;
-+	openserSIPRegUserLookupTable_context *row_ctx = NULL;
-+	openserSIPRegUserLookupTable_context *undo_ctx = NULL;
- 
--	openserSIPRegUserLookupTable_context *row_ctx =
--		(openserSIPRegUserLookupTable_context *)rg->existing_row;
--
--	openserSIPRegUserLookupTable_context *undo_ctx =
--		(openserSIPRegUserLookupTable_context *)rg->undo_info;
-+	/* First things first, we need to consume the interprocess buffer, in
-+	 * case something has changed. We want to return the freshest data. */
-+	consumeInterprocessBuffer();
- 
--	netsnmp_request_group_item *current;
-+	row_ctx = (openserSIPRegUserLookupTable_context *)rg->existing_row;
- 
--	int			row_err = 0;
-+	undo_ctx = (openserSIPRegUserLookupTable_context *)rg->undo_info;
- 
- 	/* Copy the actual data to the row. */
- 	for( current = rg->list; current; current = current->next ) {
-diff --git a/modules/snmpstats/openserSIPRegUserTable.c b/modules/snmpstats/openserSIPRegUserTable.c
-index 43b14cdeb7..9cf029df9d 100644
---- a/modules/snmpstats/openserSIPRegUserTable.c
-+++ b/modules/snmpstats/openserSIPRegUserTable.c
-@@ -225,15 +225,14 @@ void updateUser(char *userName)
-  * Returns: The rows userIndex on success, and 0 otherwise. */
- int createRegUserRow(char *stringToRegister)
- {
--	int static index = 0;
--
--	index++;
--
- 	openserSIPRegUserTable_context *theRow;
--
- 	oid  *OIDIndex;
- 	int  stringLength;
- 
-+	int static index = 0;
-+
-+	index++;
-+
- 	theRow = SNMP_MALLOC_TYPEDEF(openserSIPRegUserTable_context);
- 
- 	if (theRow == NULL) {
-@@ -280,12 +279,12 @@ int createRegUserRow(char *stringToRegister)
- /* Initializes the openserSIPRegUserTable module.  */
- void init_openserSIPRegUserTable(void)
- {
--	/* Register this table with the master agent */
--	initialize_table_openserSIPRegUserTable();
--
- 	/* We need to create a default row, so create DefaultUser */
- 	static char *defaultUser = "DefaultUser";
- 
-+	/* Register this table with the master agent */
-+	initialize_table_openserSIPRegUserTable();
-+
- 	createRegUserRow(defaultUser);
- }
- 
-@@ -350,14 +349,16 @@ int openserSIPRegUserTable_get_value(
- 		netsnmp_index *item,
- 		netsnmp_table_request_info *table_info )
- {
-+	netsnmp_variable_list *var = NULL;
-+	openserSIPRegUserTable_context *context = NULL;
-+
- 	/* First things first, we need to consume the interprocess buffer, in
- 	 * case something has changed. We want to return the freshest data. */
- 	consumeInterprocessBuffer();
- 
--	netsnmp_variable_list *var = request->requestvb;
-+	var = request->requestvb;
- 
--	openserSIPRegUserTable_context *context =
--		(openserSIPRegUserTable_context *)item;
-+	context = (openserSIPRegUserTable_context *)item;
- 
- 	switch(table_info->colnum)
- 	{
-diff --git a/modules/snmpstats/openserSIPStatusCodesTable.c b/modules/snmpstats/openserSIPStatusCodesTable.c
-index 2b396c6985..79f3a129a3 100644
---- a/modules/snmpstats/openserSIPStatusCodesTable.c
-+++ b/modules/snmpstats/openserSIPStatusCodesTable.c
-@@ -310,6 +310,7 @@ int openserSIPStatusCodesTable_can_delete(
- openserSIPStatusCodesTable_context *
- openserSIPStatusCodesTable_create_row( netsnmp_index* hdr)
- {
-+	int codeIndex;
- 	stat_var *in_status_code;
- 	stat_var *out_status_code;
- 
-@@ -337,7 +338,7 @@ openserSIPStatusCodesTable_create_row( netsnmp_index* hdr)
- 	/* Retrieve the index for the status code, and then assign the starting
- 	 * values.  The starting values will be used to calculate deltas during
- 	 * the next snmpget/snmpwalk/snmptable/etc. */
--	int codeIndex = ctx->openserSIPStatusCodeValue;
-+	codeIndex = ctx->openserSIPStatusCodeValue;
- 
- 	ctx->startingInStatusCodeValue  = 0;
- 	ctx->startingOutStatusCodeValue = 0;
-diff --git a/modules/snmpstats/snmpstats.c b/modules/snmpstats/snmpstats.c
-index 95bc1c1f3b..575c0d1068 100644
---- a/modules/snmpstats/snmpstats.c
-+++ b/modules/snmpstats/snmpstats.c
-@@ -346,7 +346,12 @@ static void sigchld_handler(int signal)
-  */
- static int spawn_sysUpTime_child(void)
- {
-+	pid_t result_pid;
-+	int snmpget_fd;
-+	int local_path_to_snmpget_length;
-+	int snmpget_binary_name_length;
- 	struct sigaction new_sigchld_handler;
-+	char *args[6];
- 
- 	char *local_path_to_snmpget = "/usr/bin/";
- 	char *snmpget_binary_name   = "/snmpget";
-@@ -362,7 +367,7 @@ static int spawn_sysUpTime_child(void)
- 	new_sigchld_handler.sa_handler = sigchld_handler;
- 	sigaction(SIGCHLD, &new_sigchld_handler, &old_sigchld_handler);
- 
--	pid_t result_pid = fork();
-+	result_pid = fork();
- 
- 	if (result_pid < 0) {
- 		LM_ERR("failed to not spawn an agent to check sysUpTime\n");
-@@ -380,7 +385,7 @@ static int spawn_sysUpTime_child(void)
- 
- 	/* If we are here, then we are the child process.  Lets set up the file
- 	 * descriptors so we can capture the output of snmpget. */
--	int snmpget_fd =
-+	snmpget_fd =
- 		open(SNMPGET_TEMP_FILE, O_CREAT|O_TRUNC|O_RDWR,
- 				S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
- 
-@@ -401,8 +406,12 @@ static int spawn_sysUpTime_child(void)
- 				"  Defaulting to %s\n",	snmp_community_string);
- 	}
- 
--	char *args[] = {"-Ov", "-c",  snmp_community_string, "localhost",
--		SYSUPTIME_OID, (char *) 0};
-+	args[0] = "-Ov";
-+	args[1] = "-c";
-+	args[2] = snmp_community_string;
-+	args[3] = "localhost";
-+	args[4] = SYSUPTIME_OID;
-+	args[5] = (char *)0;
- 
- 	/* Make sure we have a path to snmpget, so we can retrieve the
- 	 * sysUpTime. */
-@@ -416,8 +425,8 @@ static int spawn_sysUpTime_child(void)
- 		local_path_to_snmpget = snmpget_path;
- 	}
- 
--	int local_path_to_snmpget_length = strlen(local_path_to_snmpget);
--	int snmpget_binary_name_length   = strlen(snmpget_binary_name);
-+	local_path_to_snmpget_length = strlen(local_path_to_snmpget);
-+	snmpget_binary_name_length   = strlen(snmpget_binary_name);
- 
- 	/* Allocate enough memory to hold the path, the binary name, and the
- 	 * null character.  We don't use pkg_memory here. */
-diff --git a/modules/snmpstats/utilities.c b/modules/snmpstats/utilities.c
-index dfc0978b74..2f7ed9a307 100644
---- a/modules/snmpstats/utilities.c
-+++ b/modules/snmpstats/utilities.c
-@@ -72,13 +72,13 @@ int stringHandlerSanityCheck( modparam_t type, void *val, char *parameterName)
- int get_statistic(char *statName)
- {
- 	int result = 0;
--
-+	stat_var *theVar = NULL;
- 	str theStr;
- 
- 	theStr.s   = statName;
- 	theStr.len = strlen(statName);
- 
--	stat_var *theVar = get_stat(&theStr);
-+	theVar = get_stat(&theStr);
- 
- 	if (theVar==0) {
- 		LM_INFO("failed to retrieve statistics for %s\n", statName);

diff --git a/opensips.spec b/opensips.spec
index 7e8697e..0881f7e 100644
--- a/opensips.spec
+++ b/opensips.spec
@@ -1,10 +1,10 @@
-%global git_commit eaee48e28e31e09d65f735b478d9ca57dc7ccced
+%global git_commit f9f85260e5def73e3f854f5e22d148d2d977e85f
 
 %global EXCLUDE_MODULES cachedb_cassandra cachedb_dynamodb %{!?_with_oracle:db_oracle} event_sqs example launch_darkly osp rtp.io sngtc tls_wolfssl
 
 Summary:  Open Source SIP Server
 Name:     opensips
-Version:  3.6.7
+Version:  3.6.8
 Release:  %autorelease
 License:  GPL-2.0-or-later
 Source0:  https://github.com/%{name}/%{name}/archive/%{version}/%{name}-%{version}.tar.gz
@@ -14,12 +14,9 @@ Patch: opensips-0001-Consistently-use-rtpproxy-switches.patch
 Patch: opensips-0002-Cleanup-Oracle-s-makefiles.patch
 Patch: opensips-0003-db_ora-null-terminating-string-is-more-safely-most-m.patch
 Patch: opensips-0004-Return-actual-payload-ID-in-case-of-a-dynamic-payloa.patch
-Patch: opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch
-Patch: opensips-0006-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch
-Patch: opensips-0007-Fix-const-correctness-warnings-in-HTTP-and-FreeSWITC.patch
-Patch: opensips-0008-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch
-Patch: opensips-0009-Fix-pointer-truncation-warning-on-32-bit-architectur.patch
-Patch: opensips-0010-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch
+Patch: opensips-0005-Fix-uninitialized-variable-warnings-in-SQL-API-funct.patch
+Patch: opensips-0006-Fix-uninitialized-va_list-warning-on-ppc64le-and-i68.patch
+Patch: opensips-0007-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch
 
 URL:      https://opensips.org
 
@@ -915,7 +912,7 @@ clients.
 %autosetup -p1
 
 %build
-LOCALBASE=/usr NICER=0 CFLAGS="%{optflags}" LDFLAGS="%{?__global_ldflags}" %{?_with_oracle:ORAHOME="$ORACLE_HOME"} %{__make} all modules-readme %{?_smp_mflags} TLS=1 VERSIONTYPE=git THISREVISION=%{sub %git_commit 0 9} HTTP2D_USE_SYSTEM=yes HTTP2D_USE_SHARED=yes \
+LOCALBASE=/usr NICER=0 CFLAGS="%{optflags}" LDFLAGS="%{?__global_ldflags}" %{?_with_oracle:ORAHOME="$ORACLE_HOME"} %{__make} all %{?_smp_mflags} TLS=1 VERSIONTYPE=git THISREVISION=%{sub %git_commit 0 9} HTTP2D_USE_SYSTEM=yes HTTP2D_USE_SHARED=yes \
   exclude_modules="%EXCLUDE_MODULES" \
   PYTHON=/usr/bin/python3 \
   cfg_target=%{_sysconfdir}/opensips/
@@ -996,12 +993,15 @@ install -D -p -m 644 packaging/redhat_fedora/%{name}.sysconfig %{buildroot}%{_sy
 %config(noreplace) %{_sysconfdir}/opensips/tls/user/user-privkey.pem
 
 %dir %{_datadir}/opensips/
+%dir %{_datadir}/opensips/examples/
+%dir %{_datadir}/opensips/examples/templates/
 %dir %{_datadir}/opensips/dbtext/
 %dir %{_datadir}/opensips/dbtext/opensips/
 %dir %{_datadir}/opensips/menuconfig_templates/
 
 %{_datadir}/opensips/dbtext/opensips/*
 %{_datadir}/opensips/menuconfig_templates/*.m4
+%{_datadir}/opensips/examples/templates/*
 
 %{_mandir}/man5/opensips.cfg.5*
 %{_mandir}/man8/opensips.8*

diff --git a/sources b/sources
index 5f878c3..feff6ef 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (opensips-3.6.7.tar.gz) = 1750b1b76b549a2442b8a27d4a9b10a79ff670d1f7a7075d471fcc050d47b39ea9b78d8545ac3b4132b3611b2c411580436393829fb45130c7915f3bcc794f3b
+SHA512 (opensips-3.6.8.tar.gz) = c886ffe0f1950fff5253edfe57234aee55d504b9a7f75edd2e7781abe92cd7c9ee1dba13abcff57432e720b840a8bbc5076447d2023522f99e01ee20f22182cb

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-19 17:39 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-19 17:39 [rpms/opensips] f43: OpenSIPS ver. 3.6.8 Peter Lemenkov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox