summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib/pjsua_media.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2013-06-24 09:53:16 +0000
committerBenny Prijono <bennylp@teluu.com>2013-06-24 09:53:16 +0000
commitac1d9cc6e18880bf3a5d142f20d53e4382c0e611 (patch)
tree38c2a40619cdd8e3fc06bddf6c95689b7b5508e5 /pjsip/src/pjsua-lib/pjsua_media.c
parent0a2c5325be043699024c91a0268c22050975f5ff (diff)
Closed #1668: Option to use the IP address found in REGISTER response in the SDP
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4543 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib/pjsua_media.c')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 22da8ec7..2f58e71f 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -239,12 +239,14 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med,
pj_sockaddr mapped_addr[2];
pj_status_t status = PJ_SUCCESS;
char addr_buf[PJ_INET6_ADDRSTRLEN+10];
+ pjsua_acc *acc;
pj_sock_t sock[2];
- pjsua_acc *acc = &pjsua_var.acc[call_med->call->acc_id];
use_ipv6 = (acc->cfg.ipv6_media_use != PJSUA_IPV6_DISABLED);
af = use_ipv6 ? pj_AF_INET6() : pj_AF_INET();
+ acc = &pjsua_var.acc[call_med->call->acc_id];
+
/* Make sure STUN server resolution has completed */
if (!use_ipv6 && pjsua_sip_acc_is_using_stun(call_med->call->acc_id)) {
status = resolve_stun_server(PJ_TRUE);
@@ -423,6 +425,19 @@ static pj_status_t create_rtp_rtcp_sock(pjsua_call_media *call_med,
break;
} else {
+ if (acc->cfg.allow_sdp_nat_rewrite && acc->reg_mapped_addr.slen) {
+ pj_status_t status;
+
+ /* Take the address from mapped addr as seen by registrar */
+ status = pj_sockaddr_set_str_addr(af, &bound_addr,
+ &acc->reg_mapped_addr);
+ if (status != PJ_SUCCESS) {
+ /* just leave bound_addr with whatever it was
+ pj_bzero(pj_sockaddr_get_addr(&bound_addr),
+ pj_sockaddr_get_addr_len(&bound_addr));
+ */
+ }
+ }
if (!pj_sockaddr_has_addr(&bound_addr)) {
pj_sockaddr addr;