From: Kinsey Moore Date: Mon, 2 Apr 2012 22:22:07 +0000 (+0000) Subject: Stop sending out RTCP if RTP is inactive X-Git-Tag: 10.4.0-rc1~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d3ec89d9b6c7346452694fb7d14bbf008483ad5c;p=thirdparty%2Fasterisk.git Stop sending out RTCP if RTP is inactive This change prevents Asterisk from sending RTCP receiver reports during a remote bridge since it is no longer receiving media and should not be reporting anything. (related to ASTERISK-19366) ........ Merged revisions 360987 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@360993 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 3eba035d35..7cd8dd71a3 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -30142,16 +30142,48 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp_instance *i if (instance) { changed |= ast_rtp_instance_get_and_cmp_remote_address(instance, &p->redirip); + + if (p->rtp) { + /* Prevent audio RTCP reads */ + ast_channel_set_fd(chan, 1, -1); + /* Silence RTCP while audio RTP is inactive */ + ast_rtp_instance_set_prop(p->rtp, AST_RTP_PROPERTY_RTCP, 0); + } } else if (!ast_sockaddr_isnull(&p->redirip)) { memset(&p->redirip, 0, sizeof(p->redirip)); changed = 1; + + if (p->rtp) { + /* Enable RTCP since it will be inactive if we're coming back + * from a reinvite */ + ast_rtp_instance_set_prop(p->rtp, AST_RTP_PROPERTY_RTCP, 1); + /* Enable audio RTCP reads */ + ast_channel_set_fd(chan, 1, ast_rtp_instance_fd(p->rtp, 1)); + } } + if (vinstance) { changed |= ast_rtp_instance_get_and_cmp_remote_address(vinstance, &p->vredirip); + + if (p->vrtp) { + /* Prevent video RTCP reads */ + ast_channel_set_fd(chan, 3, -1); + /* Silence RTCP while video RTP is inactive */ + ast_rtp_instance_set_prop(p->vrtp, AST_RTP_PROPERTY_RTCP, 0); + } } else if (!ast_sockaddr_isnull(&p->vredirip)) { memset(&p->vredirip, 0, sizeof(p->vredirip)); changed = 1; + + if (p->vrtp) { + /* Enable RTCP since it will be inactive if we're coming back + * from a reinvite */ + ast_rtp_instance_set_prop(p->vrtp, AST_RTP_PROPERTY_RTCP, 1); + /* Enable video RTCP reads */ + ast_channel_set_fd(chan, 3, ast_rtp_instance_fd(p->vrtp, 1)); + } } + if (tinstance) { changed |= ast_rtp_instance_get_and_cmp_remote_address(tinstance, &p->tredirip); } else if (!ast_sockaddr_isnull(&p->tredirip)) {