From 4e5a6e13d68bcfadd900bcecd9564d45b0038c95 Mon Sep 17 00:00:00 2001 From: Razvan Crainea Date: Wed, 23 Oct 2024 12:03:32 +0300 Subject: [PATCH] rtpengine: add set in the E_RTPENGINE_STATUS event When having the same node in multiple sets, this event will be triggered multiple times, but there is no way of figuring out for which set it has been triggered. Adding the set allows you to do a better management of the event, and also filter it better. Many thanks to Wayne Davies from Five9 for reporting this issue! --- modules/rtpengine/doc/rtpengine_admin.xml | 6 +++++- modules/rtpengine/rtpengine.c | 12 ++++++++++++ modules/rtpengine/rtpengine.h | 1 + 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/rtpengine/doc/rtpengine_admin.xml b/modules/rtpengine/doc/rtpengine_admin.xml index 8db1eca8012..72fa0e8c41a 100644 --- a/modules/rtpengine/doc/rtpengine_admin.xml +++ b/modules/rtpengine/doc/rtpengine_admin.xml @@ -408,7 +408,7 @@ modparam("rtpengine", "set_column", "set_new") Set <varname>ping_enabled</varname> parameter ... -modparam("rtpengine", "ping_enables", yes) +modparam("rtpengine", "ping_enabled", yes) ... @@ -1673,6 +1673,10 @@ $ opensips-cli -x mi teardown Y2IwYjQ2YmE2ZDg5MWVkNDNkZGIwZjAzNGM1ZDY0ZDQ the RTPEngine instance responds to probing or inactive if the instance was deactivated. + + set - the numeric id of the set + this RTPEngine instance is part of. + diff --git a/modules/rtpengine/rtpengine.c b/modules/rtpengine/rtpengine.c index 96c94c922cb..824542441da 100644 --- a/modules/rtpengine/rtpengine.c +++ b/modules/rtpengine/rtpengine.c @@ -395,8 +395,10 @@ static event_id_t rtpengine_status_event = EVI_ERROR; static evi_params_p rtpengine_status_event_params; static str rtpengine_status_event_socket_s = str_init("socket"); static str rtpengine_status_event_status_s = str_init("status"); +static str rtpengine_status_event_set_s = str_init("set"); static evi_param_p rtpengine_status_event_socket; static evi_param_p rtpengine_status_event_status; +static evi_param_p rtpengine_status_event_set; static inline void raise_rtpengine_status_event(struct rtpe_node *node); /* array with the sockets used by rtpengine (per process)*/ @@ -1016,6 +1018,7 @@ static int add_rtpengine_socks(struct rtpe_set * rtpe_list, return -1; } memset(pnode, 0, sizeof(*pnode)); + pnode->set = rtpe_list->id_set; pnode->rn_recheck_ticks = 0; pnode->rn_weight = weight; pnode->rn_umode = 0; @@ -1594,6 +1597,11 @@ mod_init(void) LM_ERR("could not create RTPEngine Status status param\n"); return -1; } + if ((rtpengine_status_event_set = evi_param_create(rtpengine_status_event_params, + &rtpengine_status_event_set_s)) == NULL) { + LM_ERR("could not create RTPEngine Status set param\n"); + return -1; + } if(db_url.s == NULL) { /* storing the list of rtp proxy sets in shared memory*/ @@ -4766,6 +4774,10 @@ static inline void raise_rtpengine_status_event(struct rtpe_node *node) LM_ERR("cannot set rtpengine status parameter\n"); return; } + if (evi_param_set_int(rtpengine_status_event_set, &node->set) < 0) { + LM_ERR("cannot set rtpengine status parameter\n"); + return; + } if (evi_raise_event(rtpengine_status_event, rtpengine_status_event_params)) LM_ERR("unable to send event\n"); } diff --git a/modules/rtpengine/rtpengine.h b/modules/rtpengine/rtpengine.h index e137a311a82..a8c2bdd747c 100644 --- a/modules/rtpengine/rtpengine.h +++ b/modules/rtpengine/rtpengine.h @@ -36,6 +36,7 @@ struct rtpe_node { unsigned int idx; /* overall index */ + unsigned int set; /* id of the set index */ str rn_url; /* unparsed, deletable, NULL-term */ int rn_umode; char *rn_address; /* substring of rn_url */