Module: kamailio Branch: master Commit: db65368108b0de14e40cbbd7c92561e5c8740dac URL: https://github.com/kamailio/kamailio/commit/db65368108b0de14e40cbbd7c92561e5...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2025-06-25T17:03:58+02:00
dispatcher: clone dispatcher uri for event route variable
---
Modified: src/modules/dispatcher/dispatch.c
---
Diff: https://github.com/kamailio/kamailio/commit/db65368108b0de14e40cbbd7c92561e5... Patch: https://github.com/kamailio/kamailio/commit/db65368108b0de14e40cbbd7c92561e5...
---
diff --git a/src/modules/dispatcher/dispatch.c b/src/modules/dispatcher/dispatch.c index cb7ccf44685..4a5c2d90cf8 100644 --- a/src/modules/dispatcher/dispatch.c +++ b/src/modules/dispatcher/dispatch.c @@ -143,6 +143,7 @@ static int ds_strictest_match = 0; #define _ds_list (ds_lists[*ds_crt_idx]) #define _ds_list_nr (*ds_list_nr)
+void ds_rctx_set_uri(ds_rctx_t *rctx, str *uri); static void ds_run_route( struct sip_msg *msg, str *uri, char *route, ds_rctx_t *rctx);
@@ -3045,7 +3046,7 @@ int ds_mark_addr(sip_msg_t *msg, int state, int group, str *uri, int mode) rctx.code = 800; } rctx.setid = group; - rctx.uri = *uri; + ds_rctx_set_uri(&rctx, uri);
ret = ds_update_state(msg, group, uri, state, mode, &rctx);
@@ -3478,6 +3479,28 @@ int ds_update_state(sip_msg_t *msg, int group, str *address, int state, * */ static ds_rctx_t *_ds_rctx = NULL; +static char _ds_rctx_buri[MAX_URI_SIZE]; + +/** + * + */ +void ds_rctx_set_uri(ds_rctx_t *rctx, str *uri) +{ + _ds_rctx_buri[0] = '\0'; + rctx->uri.s = _ds_rctx_buri; + rctx->uri.len = 0; + if(uri == NULL || uri->s == NULL || uri->len < 0) { + return; + } + if(uri->len >= MAX_URI_SIZE - 1) { + LM_ERR("uri too long: %d\n", uri->len); + return; + } + memcpy(_ds_rctx_buri, uri->s, uri->len); + _ds_rctx_buri[uri->len] = '\0'; + rctx->uri.len = uri->len; + return; +}
/** * @@ -4073,7 +4096,7 @@ static void ds_options_callback( } } rctx.setid = group; - rctx.uri = uri; + ds_rctx_set_uri(&rctx, &uri);
/* Check if in the meantime someone disabled probing of the target * through RPC or reload */ @@ -4237,7 +4260,7 @@ void ds_ping_set(ds_set_t *node) rctx.reason.s = "Sending keepalive failed"; rctx.reason.len = 24; rctx.setid = node->id; - rctx.uri = node->dlist[j].uri; + ds_rctx_set_uri(&rctx, &node->dlist[j].uri); /* check if meantime someone disabled the target via RPC */ if(!(node->dlist[j].flags & DS_DISABLED_DST) && ds_update_state(NULL, node->id, &node->dlist[j].uri,