diff options
Diffstat (limited to 'res/res_rtp_asterisk.c')
-rw-r--r-- | res/res_rtp_asterisk.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 9b35301f9..6dc0d3abe 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -4972,6 +4972,15 @@ static int ast_rtp_fd(struct ast_rtp_instance *instance, int rtcp) static void ast_rtp_remote_address_set(struct ast_rtp_instance *instance, struct ast_sockaddr *addr) { struct ast_rtp *rtp = ast_rtp_instance_get_data(instance); + struct ast_sockaddr local, us; + + if (!ast_sockaddr_isnull(addr)) { + /* Update the local RTP address with what is being used */ + ast_ouraddrfor(addr, &us); + ast_rtp_instance_get_local_address(instance, &local); + ast_sockaddr_set_port(&us, ast_sockaddr_port(&local)); + ast_rtp_instance_set_local_address(instance, &us); + } if (rtp->rtcp) { ast_debug(1, "Setting RTCP address on RTP instance '%p'\n", instance); @@ -4980,6 +4989,15 @@ static void ast_rtp_remote_address_set(struct ast_rtp_instance *instance, struct ast_sockaddr_set_port(&rtp->rtcp->them, ast_sockaddr_port(addr) + 1); } + + if (!ast_sockaddr_isnull(addr)) { + /* Update the local RTCP address with what is being used */ + ast_sockaddr_set_port(&us, ast_sockaddr_port(&local) + 1); + ast_sockaddr_copy(&rtp->rtcp->us, &us); + + ast_free(rtp->rtcp->local_addr_str); + rtp->rtcp->local_addr_str = ast_strdup(ast_sockaddr_stringify(&us)); + } } rtp->rxseqno = 0; |