mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-01 11:32:25 +00:00
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 ........ Merged revisions 360993 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@360994 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -30402,16 +30402,48 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp_instance *i
|
|||||||
|
|
||||||
if (instance) {
|
if (instance) {
|
||||||
changed |= ast_rtp_instance_get_and_cmp_remote_address(instance, &p->redirip);
|
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)) {
|
} else if (!ast_sockaddr_isnull(&p->redirip)) {
|
||||||
memset(&p->redirip, 0, sizeof(p->redirip));
|
memset(&p->redirip, 0, sizeof(p->redirip));
|
||||||
changed = 1;
|
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) {
|
if (vinstance) {
|
||||||
changed |= ast_rtp_instance_get_and_cmp_remote_address(vinstance, &p->vredirip);
|
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)) {
|
} else if (!ast_sockaddr_isnull(&p->vredirip)) {
|
||||||
memset(&p->vredirip, 0, sizeof(p->vredirip));
|
memset(&p->vredirip, 0, sizeof(p->vredirip));
|
||||||
changed = 1;
|
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) {
|
if (tinstance) {
|
||||||
changed |= ast_rtp_instance_get_and_cmp_remote_address(tinstance, &p->tredirip);
|
changed |= ast_rtp_instance_get_and_cmp_remote_address(tinstance, &p->tredirip);
|
||||||
} else if (!ast_sockaddr_isnull(&p->tredirip)) {
|
} else if (!ast_sockaddr_isnull(&p->tredirip)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user