Module: kamailio Branch: master Commit: db65368108b0de14e40cbbd7c92561e5c8740dac URL: https://github.com/kamailio/kamailio/commit/db65368108b0de14e40cbbd7c92561e5c8740dac
Author: Daniel-Constantin Mierla <mico...@gmail.com> Committer: Daniel-Constantin Mierla <mico...@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/db65368108b0de14e40cbbd7c92561e5c8740dac.diff Patch: https://github.com/kamailio/kamailio/commit/db65368108b0de14e40cbbd7c92561e5c8740dac.patch --- 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, _______________________________________________ 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!