summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins2 <jenkins2@gerrit.asterisk.org>2017-05-04 17:55:54 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2017-05-04 17:55:54 -0500
commit4262a5aa6a3d4d74e909e2d1586816bf4d52654c (patch)
treef58f17e3f5e751b7c9f4eb3bd3f7789951a718fa
parent7b0e3b92fd49e5fbe406ef74336e164eb3f31b6e (diff)
parent008e25def96eaf58ccaef2276eb0cb36ff4b67bf (diff)
Merge "res_rtp_asterisk: Clearing the remote RTCP address causes RTCP failures"
-rw-r--r--res/res_rtp_asterisk.c24
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);
}