diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-12-07 00:58:52 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2007-12-07 00:58:52 +0000 |
commit | d5f961dfd6a090fe44f95d509e69ec9e35083390 (patch) | |
tree | 886bc45b9f4e2ac4ee4923c895281efcf8928bc4 /main/rtp.c | |
parent | bb15c2571fcf41787d1cab30ae68ed21fe043351 (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: http://svn.digium.com/svn/asterisk/trunk@91638 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/rtp.c')
-rw-r--r-- | main/rtp.c | 30 |
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) |