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