Merged revisions 91637 via svnmerge from
[asterisk/asterisk.git] / main / rtp.c
index 97bbe59..4bc9842 100644 (file)
@@ -2389,20 +2389,34 @@ char *ast_rtp_get_quality(struct ast_rtp *rtp, struct ast_rtp_quality *qual)
        *rtt           round trip time
        */
 
-       if (qual) {
+       if (qual && rtp) {
                qual->local_ssrc = rtp->ssrc;
-               qual->local_lostpackets = rtp->rtcp->expected_prior - rtp->rtcp->received_prior;
                qual->local_jitter = rtp->rxjitter;
                qual->local_count = rtp->rxcount;
                qual->remote_ssrc = rtp->themssrc;
-               qual->remote_lostpackets = rtp->rtcp->reported_lost;
-               qual->remote_jitter = rtp->rtcp->reported_jitter / 65536.0;
                qual->remote_count = rtp->txcount;
-               qual->rtt = rtp->rtcp->rtt;
+               if (rtp->rtcp) {
+                       qual->local_lostpackets = rtp->rtcp->expected_prior - rtp->rtcp->received_prior;
+                       qual->remote_lostpackets = rtp->rtcp->reported_lost;
+                       qual->remote_jitter = rtp->rtcp->reported_jitter / 65536.0;
+                       qual->rtt = rtp->rtcp->rtt;
+               }
        }
-       snprintf(rtp->rtcp->quality, sizeof(rtp->rtcp->quality), "ssrc=%u;themssrc=%u;lp=%u;rxjitter=%f;rxcount=%u;txjitter=%f;txcount=%u;rlp=%u;rtt=%f", rtp->ssrc, rtp->themssrc, rtp->rtcp->expected_prior - rtp->rtcp->received_prior, rtp->rxjitter, rtp->rxcount, (double)rtp->rtcp->reported_jitter/65536., rtp->txcount, rtp->rtcp->reported_lost, rtp->rtcp->rtt);
-       
-       return rtp->rtcp->quality;
+       if (rtp->rtcp) {
+               snprintf(rtp->rtcp->quality, sizeof(rtp->rtcp->quality),
+                       "ssrc=%u;themssrc=%u;lp=%u;rxjitter=%f;rxcount=%u;txjitter=%f;txcount=%u;rlp=%u;rtt=%f",
+                       rtp->ssrc,
+                       rtp->themssrc,
+                       rtp->rtcp->expected_prior - rtp->rtcp->received_prior,
+                       rtp->rxjitter,
+                       rtp->rxcount,
+                       (double)rtp->rtcp->reported_jitter / 65536.0,
+                       rtp->txcount,
+                       rtp->rtcp->reported_lost,
+                       rtp->rtcp->rtt);
+               return rtp->rtcp->quality;
+       } else
+               return "<Unknown> - RTP/RTCP has already been destroyed";
 }
 
 void ast_rtp_destroy(struct ast_rtp *rtp)