summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2007-12-07 00:58:52 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2007-12-07 00:58:52 +0000
commit77ec19e25506d02936a63600b7a4a8a70f7aa405 (patch)
tree886bc45b9f4e2ac4ee4923c895281efcf8928bc4 /main
parent258f3caf0f0a27693d0ff04b00cffb4612dbd3e8 (diff)
Merged revisions 91637 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r91637 | tilghman | 2007-12-06 18:52:17 -0600 (Thu, 06 Dec 2007) | 5 lines At the end of a call, when we're reporting, RTCP may already be partially torn down, so check for NULL dereference Reported by: blitzrage Patch by: tilghman (Closes issue #11450) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@91638 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r--main/rtp.c30
1 files changed, 22 insertions, 8 deletions
diff --git a/main/rtp.c b/main/rtp.c
index 97bbe59fc..4bc9842f7 100644
--- a/main/rtp.c
+++ b/main/rtp.c
@@ -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)