Module: kamailio
Branch: master
Commit: 992ee3df02148a940c255b8be7eb9d8e63465834
URL: 
https://github.com/kamailio/kamailio/commit/992ee3df02148a940c255b8be7eb9d8e63465834

Author: Torrey Searle <torrey.sea...@wavecrest.com>
Committer: Richard Fuchs <rfu...@sipwise.com>
Date: 2025-05-07T09:06:19-04: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.

---

Modified: src/modules/rtpengine/rtpengine.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/992ee3df02148a940c255b8be7eb9d8e63465834.diff
Patch: 
https://github.com/kamailio/kamailio/commit/992ee3df02148a940c255b8be7eb9d8e63465834.patch

---

diff --git a/src/modules/rtpengine/rtpengine.c 
b/src/modules/rtpengine/rtpengine.c
index 49c942627cd..2401ad09cbd 100644
--- a/src/modules/rtpengine/rtpengine.c
+++ b/src/modules/rtpengine/rtpengine.c
@@ -4490,7 +4490,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;
 
@@ -4545,9 +4546,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,

_______________________________________________
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!

Reply via email to