Module: kamailio
Branch: master
Commit: 56950be0a0170ba307e59015d1117309d6bf7a86
URL: 
https://github.com/kamailio/kamailio/commit/56950be0a0170ba307e59015d1117309d6bf7a86

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2025-08-04T14:58:22+02:00

dispatcher: generate internal uid per destination and print it over rpc

---

Modified: src/modules/dispatcher/dispatch.c
Modified: src/modules/dispatcher/dispatch.h
Modified: src/modules/dispatcher/dispatcher.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/56950be0a0170ba307e59015d1117309d6bf7a86.diff
Patch: 
https://github.com/kamailio/kamailio/commit/56950be0a0170ba307e59015d1117309d6bf7a86.patch

---

diff --git a/src/modules/dispatcher/dispatch.c 
b/src/modules/dispatcher/dispatch.c
index 4f33d2789f0..4c0d729310d 100644
--- a/src/modules/dispatcher/dispatch.c
+++ b/src/modules/dispatcher/dispatch.c
@@ -142,6 +142,8 @@ static ds_set_t *ds_strictest_node = NULL;
 static int ds_strictest_idx = 0;
 static int ds_strictest_match = 0;
 
+static sruid_t _ds_sruid = {0};
+
 #define _ds_list (ds_lists[*ds_crt_idx])
 #define _ds_list_nr (*ds_list_nr)
 
@@ -154,6 +156,18 @@ void shuffle_char100array(char *arr);
 int ds_reinit_rweight_on_state_change(
                int old_state, int new_state, ds_set_t *dset);
 
+
+/**
+ *
+ */
+int ds_sruid_init(void)
+{
+       if(sruid_init(&_ds_sruid, '-', "dspt", SRUID_INC) < 0) {
+               return -1;
+       }
+       return 0;
+}
+
 /**
  *
  */
@@ -759,6 +773,10 @@ ds_dest_t *add_dest2list(int id, str uri, int flags, int 
priority, str *attrs,
        if(!dp) {
                goto error;
        }
+       sruid_nextunid_safe(&_ds_sruid, id);
+       memcpy(dp->buid, _ds_sruid.uid.s, _ds_sruid.uid.len);
+       dp->suid.s = dp->buid;
+       dp->suid.len = _ds_sruid.uid.len;
 
        if(latency_stats != NULL) {
                dp->latency_stats.stdev = latency_stats->stdev;
@@ -1025,7 +1043,7 @@ int reindex_dests(ds_set_t *node)
                        dp0[j].next = NULL;
                else
                        dp0[j].next = &dp0[j + 1];
-
+               dp0[j].suid.s = dp0[j].buid;
 
                dp = node->dlist;
                node->dlist = dp->next;
@@ -2928,6 +2946,9 @@ void ds_add_dest_cb(ds_set_t *node, int i, void *arg)
                                node->dlist[i].uri.len, node->dlist[i].uri.s);
        } else {
                memcpy(&ndst->ocdata, &node->dlist[i].ocdata, 
sizeof(ds_ocdata_t));
+               memcpy(ndst->buid, node->dlist[i].suid.s, 
node->dlist[i].suid.len);
+               ndst->suid.s = ndst->buid;
+               ndst->suid.len = node->dlist[i].suid.len;
        }
        return;
 }
diff --git a/src/modules/dispatcher/dispatch.h 
b/src/modules/dispatcher/dispatch.h
index adbd83fe58e..f8237788f2b 100644
--- a/src/modules/dispatcher/dispatch.h
+++ b/src/modules/dispatcher/dispatch.h
@@ -312,6 +312,8 @@ int ds_ping_active_init(void);
 int ds_ping_active_get(void);
 int ds_ping_active_set(int v);
 
+int ds_sruid_init(void);
+
 /* Create if not exist and return ds_set_t by id */
 ds_set_t *ds_avl_insert(ds_set_t **root, int id, int *setn);
 ds_set_t *ds_avl_find(ds_set_t *node, int id);
diff --git a/src/modules/dispatcher/dispatcher.c 
b/src/modules/dispatcher/dispatcher.c
index 6d338f410a3..b11c329b6c2 100644
--- a/src/modules/dispatcher/dispatcher.c
+++ b/src/modules/dispatcher/dispatcher.c
@@ -375,6 +375,9 @@ static int mod_init(void)
        if(ds_ping_active_init() < 0) {
                return -1;
        }
+       if(ds_sruid_init() < 0) {
+               return -1;
+       }
 
        if(ds_init_rpc() < 0) {
                LM_ERR("failed to register RPC commands\n");
@@ -2039,8 +2042,9 @@ int ds_rpc_print_set(
                else
                        c[1] = 'X';
 
-               if(rpc->struct_add(vh, "Ssd", "URI", &node->dlist[j].uri, 
"FLAGS", c,
-                                  "PRIORITY", node->dlist[j].priority)
+               if(rpc->struct_add(vh, "SsdS", "URI", &node->dlist[j].uri, 
"FLAGS", c,
+                                  "PRIORITY", node->dlist[j].priority, "IUID",
+                                  &node->dlist[j].suid)
                                < 0) {
                        rpc->fault(ctx, 500, "Internal error creating dest 
struct");
                        return -1;

_______________________________________________
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to