From 2e842e9c11b136270b56b2b48a0364a94749c4ed Mon Sep 17 00:00:00 2001 From: Federico Cabiddu Date: Tue, 26 May 2020 10:24:58 +0200 Subject: [PATCH] dispatcher: add attrs param to rpc 'add' call --- src/modules/dispatcher/dispatch.c | 11 ++++++----- src/modules/dispatcher/dispatch.h | 2 +- src/modules/dispatcher/dispatcher.c | 5 +++-- src/modules/dispatcher/doc/dispatcher_admin.xml | 6 +++++- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/modules/dispatcher/dispatch.c b/src/modules/dispatcher/dispatch.c index b5d56d405a9..8cff6cdb564 100644 --- a/src/modules/dispatcher/dispatch.c +++ b/src/modules/dispatcher/dispatch.c @@ -2419,15 +2419,16 @@ void ds_add_dest_cb(ds_set_t *node, int i, void *arg) } /* add dispatcher entry to in-memory dispatcher list */ -int ds_add_dst(int group, str *address, int flags) +int ds_add_dst(int group, str *address, int flags, str *attrs) { int setn, priority; - str attrs; setn = _ds_list_nr; priority = 0; - attrs.s = 0; - attrs.len = 0; + + if (attrs->len == 0) { + attrs->s = 0; + } *next_idx = (*crt_idx + 1) % 2; ds_avl_destroy(&ds_lists[*next_idx]); @@ -2436,7 +2437,7 @@ int ds_add_dst(int group, str *address, int flags) ds_iter_set(_ds_list, &ds_add_dest_cb, NULL); // add new destination - if(add_dest2list(group, *address, flags, priority, &attrs, + if(add_dest2list(group, *address, flags, priority, attrs, *next_idx, &setn) != 0) { LM_WARN("unable to add destination %.*s to set %d", address->len, address->s, group); if(ds_load_mode==1) { diff --git a/src/modules/dispatcher/dispatch.h b/src/modules/dispatcher/dispatch.h index ee4ea0b7607..2bd63dc64b3 100644 --- a/src/modules/dispatcher/dispatch.h +++ b/src/modules/dispatcher/dispatch.h @@ -140,7 +140,7 @@ int ds_select_dst_limit(sip_msg_t *msg, int set, int alg, uint32_t limit, int mode); int ds_select_dst(struct sip_msg *msg, int set, int alg, int mode); int ds_update_dst(struct sip_msg *msg, int upos, int mode); -int ds_add_dst(int group, str *address, int flags); +int ds_add_dst(int group, str *address, int flags, str *attrs); int ds_remove_dst(int group, str *address); int ds_update_state(sip_msg_t *msg, int group, str *address, int state, ds_rctx_t *rctx); diff --git a/src/modules/dispatcher/dispatcher.c b/src/modules/dispatcher/dispatcher.c index 2a566ab730c..b2693a29475 100644 --- a/src/modules/dispatcher/dispatcher.c +++ b/src/modules/dispatcher/dispatcher.c @@ -1800,15 +1800,16 @@ static void dispatcher_rpc_add(rpc_t *rpc, void *ctx) { int group, flags; str dest; + str attrs; flags = 0; - if(rpc->scan(ctx, "dS*d", &group, &dest, &flags) < 2) { + if(rpc->scan(ctx, "dS*d", &group, &dest, &flags, &attrs) < 3) { rpc->fault(ctx, 500, "Invalid Parameters"); return; } - if(ds_add_dst(group, &dest, flags) != 0) { + if(ds_add_dst(group, &dest, flags, &attrs) != 0) { rpc->fault(ctx, 500, "Adding dispatcher dst failed"); return; } diff --git a/src/modules/dispatcher/doc/dispatcher_admin.xml b/src/modules/dispatcher/doc/dispatcher_admin.xml index b872adc156d..984b53258d5 100644 --- a/src/modules/dispatcher/doc/dispatcher_admin.xml +++ b/src/modules/dispatcher/doc/dispatcher_admin.xml @@ -1938,15 +1938,19 @@ DEST: { _flags_ (optional): as described in the list file format, default 0 + _attrs_ (optional): as described in the list file format, + default "" + Example: ... -# prototype: &sercmd; dispatcher.add _group_ _address_ _flags_ +# prototype: &sercmd; dispatcher.add _group_ _address_ _flags_ _attrs_ &sercmd; dispatcher.add 2 sip:127.0.0.1:5080 &sercmd; dispatcher.add 3 sip:127.0.0.1:5075 8 +&sercmd; dispatcher.add 3 sip:127.0.0.1:5075 0 duid=abc;socket=udp:127.0.0.1:5060 ...