Module: kamailio Branch: master Commit: 56950be0a0170ba307e59015d1117309d6bf7a86 URL: https://github.com/kamailio/kamailio/commit/56950be0a0170ba307e59015d1117309...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@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/56950be0a0170ba307e59015d1117309... Patch: https://github.com/kamailio/kamailio/commit/56950be0a0170ba307e59015d1117309...
---
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;