diff options
author | Jenkins2 <jenkins2@gerrit.asterisk.org> | 2017-05-04 17:55:54 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2017-05-04 17:55:54 -0500 |
commit | 4262a5aa6a3d4d74e909e2d1586816bf4d52654c (patch) | |
tree | f58f17e3f5e751b7c9f4eb3bd3f7789951a718fa | |
parent | 7b0e3b92fd49e5fbe406ef74336e164eb3f31b6e (diff) | |
parent | 008e25def96eaf58ccaef2276eb0cb36ff4b67bf (diff) |
Merge "res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures"
-rw-r--r-- | res/res_rtp_asterisk.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 85e2425cb..f7e976272 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -3908,7 +3908,7 @@ static int ast_rtp_write(struct ast_rtp_instance *instance, struct ast_frame *fr return 0; } - if (ast_sockaddr_isnull(&rtp->rtcp->them)) { + if (ast_sockaddr_isnull(&rtp->rtcp->them) || rtp->rtcp->schedid < 0) { /* * RTCP was stopped. */ @@ -5527,21 +5527,20 @@ static void ast_rtp_remote_address_set(struct ast_rtp_instance *instance, struct } } - if (rtp->rtcp) { + if (rtp->rtcp && !ast_sockaddr_isnull(addr)) { ast_debug(1, "Setting RTCP address on RTP instance '%p'\n", instance); ast_sockaddr_copy(&rtp->rtcp->them, addr); - if (!ast_sockaddr_isnull(addr)) { - if (rtp->rtcp->type == AST_RTP_INSTANCE_RTCP_STANDARD) { - ast_sockaddr_set_port(&rtp->rtcp->them, ast_sockaddr_port(addr) + 1); - /* Update the local RTCP address with what is being used */ - ast_sockaddr_set_port(&local, ast_sockaddr_port(&local) + 1); - } - ast_sockaddr_copy(&rtp->rtcp->us, &local); + if (rtp->rtcp->type == AST_RTP_INSTANCE_RTCP_STANDARD) { + ast_sockaddr_set_port(&rtp->rtcp->them, ast_sockaddr_port(addr) + 1); - ast_free(rtp->rtcp->local_addr_str); - rtp->rtcp->local_addr_str = ast_strdup(ast_sockaddr_stringify(&local)); + /* Update the local RTCP address with what is being used */ + ast_sockaddr_set_port(&local, ast_sockaddr_port(&local) + 1); } + ast_sockaddr_copy(&rtp->rtcp->us, &local); + + ast_free(rtp->rtcp->local_addr_str); + rtp->rtcp->local_addr_str = ast_strdup(ast_sockaddr_stringify(&local)); } rtp->rxseqno = 0; @@ -5751,9 +5750,6 @@ static void ast_rtp_stop(struct ast_rtp_instance *instance) } ast_rtp_instance_set_remote_address(instance, &addr); - if (rtp->rtcp) { - ast_sockaddr_setnull(&rtp->rtcp->them); - } ast_set_flag(rtp, FLAG_NEED_MARKER_BIT); } |