Module: kamailio Branch: 5.8 Commit: 9fb936b75dd7a06ac8b9a012b03b7c85ca7884ab URL: https://github.com/kamailio/kamailio/commit/9fb936b75dd7a06ac8b9a012b03b7c85...
Author: Torrey Searle torrey.searle@wavecrest.com Committer: Torrey Searle torrey.searle@wavecrest.com Date: 2025-05-07T16:41:50+02:00
rtpengine: improve compatibility of rtpengine per call leg stats parsing
not all versions of rtpengine sends a key SSRC per stream. For those that do not the same information can be found in ingress SSRCs. Add logic to check for the SSRC value there if the SSRC key is not present.
(cherry picked from commit 992ee3df02148a940c255b8be7eb9d8e63465834) (cherry picked from commit e3b1220b375b48f16ae361cfe592e8c1bd8e7649)
---
Modified: src/modules/rtpengine/rtpengine.c
---
Diff: https://github.com/kamailio/kamailio/commit/9fb936b75dd7a06ac8b9a012b03b7c85... Patch: https://github.com/kamailio/kamailio/commit/9fb936b75dd7a06ac8b9a012b03b7c85...
---
diff --git a/src/modules/rtpengine/rtpengine.c b/src/modules/rtpengine/rtpengine.c index 561384df566..81456c4faea 100644 --- a/src/modules/rtpengine/rtpengine.c +++ b/src/modules/rtpengine/rtpengine.c @@ -4052,7 +4052,8 @@ static void parse_call_stats_1(struct minmax_mos_label_stats *mmls, long long ssrc; char *endp; bencode_item_t *ssrc_list, *ssrc_key, *ssrc_dict, *tags, *tag_key, - *tag_dict, *medias, *media, *streams, *stream; + *tag_dict, *medias, *media, *streams, *stream, *ingress_ssrcs, + *ingress_ssrc; struct minmax_stats_vals min_vals = {.mos = 100}, max_vals = {.mos = -1}, average_vals = {.avg_samples = 0}, vals_decoded;
@@ -4107,9 +4108,21 @@ static void parse_call_stats_1(struct minmax_mos_label_stats *mmls, (char *)stream->child->iov[1].iov_base); LM_DBG("rtpengine: XXX stream child val type %i\n", stream->child->sibling->type); - if((ssrc = bencode_dictionary_get_integer(stream, "SSRC", -1)) - == -1) - continue; + ssrc = bencode_dictionary_get_integer(stream, "SSRC", -1); + if(ssrc == -1) { + ingress_ssrcs = bencode_dictionary_get_expect( + stream, "ingress SSRCs", BENCODE_LIST); + if(!ingress_ssrcs || !ingress_ssrcs->child) + continue; + LM_DBG("rtpengine: XXX got ingress SSRCs\n"); + ingress_ssrc = ingress_ssrcs->child; + if((ssrc = bencode_dictionary_get_integer( + ingress_ssrc, "SSRC", -1)) + == -1) { + continue; + } + } + /* got a valid SSRC to watch for */ ssrcs[num_ssrcs] = ssrc; LM_DBG("rtpengine: found SSRC '%lli' for label '%.*s'\n", ssrc,