public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/opensips] rawhide: OpenSIPS ver. 4.0.0
@ 2026-06-24 18:04 Peter Lemenkov
  0 siblings, 0 replies; only message in thread
From: Peter Lemenkov @ 2026-06-24 18:04 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/opensips
            Branch : rawhide
            Commit : 096f7b1c9759b5c9004ad910cb3202f3aed17855
            Author : Peter Lemenkov <lemenkov@gmail.com>
            Date   : 2026-06-24T20:04:35+02:00
            Stats  : +687/-777 in 11 file(s)
            URL    : https://src.fedoraproject.org/rpms/opensips/c/096f7b1c9759b5c9004ad910cb3202f3aed17855?branch=rawhide

            Log:
            OpenSIPS ver. 4.0.0

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 ac00108..c14856b 100644
--- a/opensips-0001-Consistently-use-rtpproxy-switches.patch
+++ b/opensips-0001-Consistently-use-rtpproxy-switches.patch
@@ -19,7 +19,7 @@ index a93761a66d..b185166786 100644
  				</para></listitem>
  				<listitem><para>
 diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c
-index fd8fbe8290..7ec68403fe 100644
+index 3cf24c9d46..570008b254 100644
 --- a/modules/rtpproxy/rtpproxy.c
 +++ b/modules/rtpproxy/rtpproxy.c
 @@ -3747,8 +3747,6 @@ static int rtpproxy_offer_answer(struct sip_msg *msg, struct rtpp_args *args,

diff --git a/opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch b/opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch
index b7bf490..208c50b 100644
--- a/opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch
+++ b/opensips-0005-Fix-rabbitmq-c-deprecated-header-warnings.patch
@@ -89,7 +89,7 @@ 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
+index 7cb213f35a..5351eadcc6 100644
 --- a/modules/event_rabbitmq/README
 +++ b/modules/event_rabbitmq/README
 @@ -130,7 +130,7 @@ Chapter 1. Admin Guide
@@ -410,7 +410,7 @@ index a700d80049..0d853f8f2b 100644
  	int heartbeat;
  	str tls_dom_name;
 diff --git a/modules/rabbitmq_consumer/README b/modules/rabbitmq_consumer/README
-index aed3bf49fb..6c760d5547 100644
+index 02df6024ba..1f3bc058e1 100644
 --- a/modules/rabbitmq_consumer/README
 +++ b/modules/rabbitmq_consumer/README
 @@ -72,8 +72,8 @@ Chapter 1. Admin Guide

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
index 9c6140d..375fd42 100644
--- a/opensips-0007-Fix-const-correctness-warnings-in-HTTP-and-FreeSWITC.patch
+++ b/opensips-0007-Fix-const-correctness-warnings-in-HTTP-and-FreeSWITC.patch
@@ -109,10 +109,10 @@ index a12b6d637b..f624973884 100644
  		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 0671a7d390..3297806092 100644
+index 8e87661048..b12cc41b9c 100644
 --- a/modules/httpd/httpd_proc.c
 +++ b/modules/httpd/httpd_proc.c
-@@ -327,7 +327,7 @@ MHD_RET getConnectionHeader(void *cls, enum MHD_ValueKind kind,
+@@ -332,7 +332,7 @@ MHD_RET getConnectionHeader(void *cls, enum MHD_ValueKind kind,
  	struct post_request *pr = (struct post_request*)cls;
  	str content_length;
  	unsigned int len;
@@ -121,7 +121,7 @@ index 0671a7d390..3297806092 100644
  
  	if (cls == NULL) {
  		LM_ERR("Unable to store return data\n");
-@@ -351,24 +351,24 @@ MHD_RET getConnectionHeader(void *cls, enum MHD_ValueKind kind,
+@@ -356,24 +356,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 */

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
index bc39146..957cef5 100644
--- 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
@@ -83,10 +83,10 @@ 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 02c29c89a5..ee17cca441 100644
+index 1750495333..32ec4d2f18 100644
 --- a/modules/cachedb_redis/cachedb_redis_dbase.c
 +++ b/modules/cachedb_redis/cachedb_redis_dbase.c
-@@ -1005,9 +1005,9 @@ static int redis_run_command(cachedb_con *connection, redisReply **rpl,
+@@ -1007,9 +1007,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)
  {

diff --git a/opensips-0009-Fix-format-specifier-warnings-on-32-bit-architecture.patch b/opensips-0009-Fix-format-specifier-warnings-on-32-bit-architecture.patch
deleted file mode 100644
index f5b6a11..0000000
--- a/opensips-0009-Fix-format-specifier-warnings-on-32-bit-architecture.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Peter Lemenkov <lemenkov@gmail.com>
-Date: Fri, 26 Dec 2025 17:49:21 +0100
-Subject: [PATCH] Fix format specifier warnings on 32-bit architectures (i686)
-
-During compilation on i686 (32-bit) architecture with GCC 15, format
-specifier warnings appear due to type size differences between 32-bit
-and 64-bit platforms.
-
-```
-server.c: In function 'on_frame_recv_callback':
-warning: format '%ld' expects argument of type 'long int', but argument 14
-has type 'size_t' {aka 'unsigned int'} [-Wformat=]
-  638 |  LM_DBG("h2 header [%d], %p %ld\n", frame->hd.type, frame->headers.nva, frame->headers.nvlen);
-
-dm_impl.c: In function 'dm_avps2json':
-warning: format '%ld' expects argument of type 'long int', but argument 15
-has type 'int64_t' {aka 'long long int'} [-Wformat=]
-  484 |  LM_DBG("%2d. got int64   AVP %s (%u), value: %ld\n", i, dm_avp.avp_name, h->avp_code, h->avp_value->i64);
-
-warning: format '%lu' expects argument of type 'long unsigned int', but argument 15
-has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=]
-  494 |  LM_DBG("%2d. got uint64  AVP %s (%u), value: %lu\n", i, dm_avp.avp_name, h->avp_code, h->avp_value->u64);
-```
-
-Type sizes differ between 32-bit and 64-bit architectures:
-
-**On x86_64 (64-bit):**
-- `size_t` = `unsigned long` (8 bytes)
-- `int64_t` = `long int` (8 bytes)
-
-**On i686 (32-bit):**
-- `size_t` = `unsigned int` (4 bytes)
-- `int64_t` = `long long int` (8 bytes)
-- `uint64_t` = `unsigned long long int` (8 bytes)
-
-Use portable C99 format specifiers that work correctly on all
-architectures:
-
-- `%zu` for `size_t` (modules/http2d/server.c line 638)
-- `%" PRId64` for `int64_t` (modules/aaa_diameter/dm_impl.c line 484)
-- `%" PRIu64` for `uint64_t` (modules/aaa_diameter/dm_impl.c line 494)
-
-Signed-off-by: Peter Lemenkov <lemenkov@gmail.com>
-Assisted-by: Claude (Anthropic) <https://claude.ai>
-
-diff --git a/modules/aaa_diameter/dm_impl.c b/modules/aaa_diameter/dm_impl.c
-index a2ad4c6287..ffbc139f97 100644
---- a/modules/aaa_diameter/dm_impl.c
-+++ b/modules/aaa_diameter/dm_impl.c
-@@ -20,6 +20,7 @@
- 
- #include <freeDiameter/extension.h>
- #include <sys/eventfd.h>
-+#include <inttypes.h>
- 
- #include "../../ut.h"
- #include "../../lib/list.h"
-@@ -485,7 +486,7 @@ static int dm_avps2json(void *root, cJSON *avps)
- 			break;
- 
- 		case AVP_TYPE_INTEGER64:
--			LM_DBG("%2d. got int64   AVP %s (%u), value: %ld\n", i, dm_avp.avp_name, h->avp_code, h->avp_value->i64);
-+			LM_DBG("%2d. got int64   AVP %s (%u), value: %" PRId64 "\n", i, dm_avp.avp_name, h->avp_code, h->avp_value->i64);
- 			num_val = (double)h->avp_value->i64;
- 			break;
- 
-@@ -495,7 +496,7 @@ static int dm_avps2json(void *root, cJSON *avps)
- 			break;
- 
- 		case AVP_TYPE_UNSIGNED64:
--			LM_DBG("%2d. got uint64  AVP %s (%u), value: %lu\n", i, dm_avp.avp_name, h->avp_code, h->avp_value->u64);
-+			LM_DBG("%2d. got uint64  AVP %s (%u), value: %" PRIu64 "\n", i, dm_avp.avp_name, h->avp_code, h->avp_value->u64);
- 			num_val = (double)h->avp_value->u64;
- 			break;
- 
-diff --git a/modules/http2d/server.c b/modules/http2d/server.c
-index 0154e1e851..8707286283 100644
---- a/modules/http2d/server.c
-+++ b/modules/http2d/server.c
-@@ -635,7 +635,7 @@ static int on_frame_recv_callback(nghttp2_session *session,
- 	switch (frame->hd.type) {
- 	case NGHTTP2_DATA:
- 	case NGHTTP2_HEADERS:
--		LM_DBG("h2 header [%d], %p %ld\n", frame->hd.type, frame->headers.nva, frame->headers.nvlen);
-+		LM_DBG("h2 header [%d], %p %zu\n", frame->hd.type, frame->headers.nva, frame->headers.nvlen);
- 		/* Check that the client request has finished */
- 		if (frame->hd.flags & NGHTTP2_FLAG_END_STREAM) {
- 			stream_data =

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
new file mode 100644
index 0000000..9097093
--- /dev/null
+++ b/opensips-0009-Fix-pointer-truncation-warning-on-32-bit-architectur.patch
@@ -0,0 +1,291 @@
+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 3a426bd929..d1a9c8cbd2 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"
+@@ -315,7 +316,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;
+@@ -425,7 +426,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 433e078358..7dff9fbbf7 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"
+@@ -602,7 +603,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;
+@@ -1755,7 +1756,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;
+@@ -1782,7 +1783,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;
+ }
+@@ -1790,7 +1791,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);
+ }
+ 
+ 
+@@ -2145,7 +2146,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;
+@@ -2182,7 +2183,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
new file mode 100644
index 0000000..2689e4e
--- /dev/null
+++ b/opensips-0010-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-0010-Fix-pointer-truncation-warning-on-32-bit-architectur.patch b/opensips-0010-Fix-pointer-truncation-warning-on-32-bit-architectur.patch
deleted file mode 100644
index 8b9581b..0000000
--- a/opensips-0010-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 fa1933044f..b8a19602e1 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"
-@@ -315,7 +316,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;
-@@ -425,7 +426,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;
-@@ -582,7 +583,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 ffbc139f97..8788c8d0aa 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);
- }
- 
- 
-@@ -2143,7 +2144,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;
-@@ -2180,7 +2181,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-0011-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch b/opensips-0011-Fix-C90-style-declaration-warnings-in-snmpstats-modu.patch
deleted file mode 100644
index 2689e4e..0000000
--- a/opensips-0011-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 9e5448b..dddcc13 100644
--- a/opensips.spec
+++ b/opensips.spec
@@ -1,13 +1,13 @@
-%global git_commit 985272ff3d7ebc5e9f24ad9f8fcf8b1d2549f1b6
+%global git_commit acf45c08e7a169b18f7b53f02d42c19c035c1c43
 
 %global EXCLUDE_MODULES cachedb_cassandra cachedb_dynamodb %{!?_with_oracle:db_oracle} event_sqs example launch_darkly opentelemetry osp rtp.io sngtc tls_wolfssl
 
 Summary:  Open Source SIP Server
 Name:     opensips
 Version:  4.0.0
-Release:  %autorelease -p -s beta
+Release:  %autorelease
 License:  GPL-2.0-or-later
-Source0:  https://github.com/%{name}/%{name}/archive/%{version}-beta/%{name}-%{version}-beta.tar.gz
+Source0:  https://github.com/%{name}/%{name}/archive/%{version}/%{name}-%{version}.tar.gz
 Source3:  opensips.sysusers
 # Fedora-specific patches
 Patch: opensips-0001-Consistently-use-rtpproxy-switches.patch
@@ -18,9 +18,8 @@ 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-format-specifier-warnings-on-32-bit-architecture.patch
-Patch: opensips-0010-Fix-pointer-truncation-warning-on-32-bit-architectur.patch
-Patch: opensips-0011-Fix-C90-style-declaration-warnings-in-snmpstats-modu.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
 
 URL:      https://opensips.org
 
@@ -927,7 +926,7 @@ the exchange of instant messages between SIP clients and XMPP(jabber)
 clients.
 
 %prep
-%autosetup -p1 -n %{name}-%{version}-beta
+%autosetup -p1 -n %{name}-%{version}
 
 %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 STIR_SHAKEN_OPENSSL=yes \

diff --git a/sources b/sources
index 6fd7dcf..d93306b 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (opensips-4.0.0-beta.tar.gz) = 95b8571c74d4f6dd8209663bdd80d4d393aa5553839132240c2f60604b440836e3e06195b99a99caaf3f476708c66e519c21816bcb7314dea2fb88ebd15fa904
+SHA512 (opensips-4.0.0.tar.gz) = 78cc599dae15926eeac0ed50727e42b336dcc3b431769a5b0d52ec9de71250084eca0893ecfad515acc0eb82149643b6410ca1f94702257449df2d9d57132290

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

only message in thread, other threads:[~2026-06-24 18:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-24 18:04 [rpms/opensips] rawhide: OpenSIPS ver. 4.0.0 Peter Lemenkov

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