diff options
author | Nanang Izzuddin <nanang@teluu.com> | 2008-09-18 12:58:33 +0000 |
---|---|---|
committer | Nanang Izzuddin <nanang@teluu.com> | 2008-09-18 12:58:33 +0000 |
commit | 079dfbcbbe8e1d401a106c097845fd777c809011 (patch) | |
tree | a7bb7702da1bdfa7d73b0bd153c30ee40fae89bf /pjmedia | |
parent | fd64f65109f5cc5ce611cd5ec842c08796566a05 (diff) |
Ticket #631:
- Changed rem_rtp/rtcp_addr to src_rtp/rtcp_addr in media transport info
- Updated behaviour of media transport get info, when the transport hasn't receive any packet src_rtp/rtcp_addr will not be set.
- Fixed bug in pjsua_call_dump that rem_addr was unset.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2293 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/include/pjmedia/transport.h | 7 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/transport_ice.c | 96 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/transport_udp.c | 9 |
3 files changed, 65 insertions, 47 deletions
diff --git a/pjmedia/include/pjmedia/transport.h b/pjmedia/include/pjmedia/transport.h index 2ce195e5..29a34247 100644 --- a/pjmedia/include/pjmedia/transport.h +++ b/pjmedia/include/pjmedia/transport.h @@ -493,10 +493,11 @@ struct pjmedia_transport_info pjmedia_sock_info sock_info; /** - * Remote address where RTP/RTCP originated from. + * Remote address where RTP/RTCP originated from. In case this transport + * hasn't ever received packet, the */ - pj_sockaddr rem_rtp_name; - pj_sockaddr rem_rtcp_name; + pj_sockaddr src_rtp_name; + pj_sockaddr src_rtcp_name; /** * Specifies number of transport specific info included. diff --git a/pjmedia/src/pjmedia/transport_ice.c b/pjmedia/src/pjmedia/transport_ice.c index 461d5768..e911f52d 100644 --- a/pjmedia/src/pjmedia/transport_ice.c +++ b/pjmedia/src/pjmedia/transport_ice.c @@ -1424,9 +1424,13 @@ static pj_status_t transport_get_info(pjmedia_transport *tp, pj_sockaddr_cp(&info->sock_info.rtcp_addr_name, &cand.addr); } - /* Get remote address originating RTP & RTCP. */ - info->rem_rtp_name = tp_ice->rtp_src_addr; - info->rem_rtcp_name = tp_ice->rtcp_src_addr; + /* Set remote address originating RTP & RTCP if this transport has + * received any packets. + */ + if (tp_ice->rtp_src_cnt) { + info->src_rtp_name = tp_ice->rtp_src_addr; + info->src_rtcp_name = tp_ice->rtcp_src_addr; + } return PJ_SUCCESS; } @@ -1454,6 +1458,11 @@ static pj_status_t transport_attach (pjmedia_transport *tp, pj_memcpy(&tp_ice->remote_rtcp, rem_rtcp, addr_len); tp_ice->addr_len = addr_len; + /* Init source RTP & RTCP addresses and counter */ + tp_ice->rtp_src_addr = tp_ice->remote_rtp; + tp_ice->rtcp_src_addr = tp_ice->remote_rtcp; + tp_ice->rtp_src_cnt = 0; + return PJ_SUCCESS; } @@ -1550,55 +1559,58 @@ static void ice_on_rx_data(pj_ice_strans *ice_st, unsigned comp_id, * source packet address after several consecutive packets * have been received. */ - if (!tp_ice->use_ice && - pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) != 0 ) - { - /* Check if the source address is recognized. */ - if (pj_sockaddr_cmp(src_addr, &tp_ice->rtp_src_addr) != 0) { - /* Remember the new source address. */ - pj_sockaddr_cp(&tp_ice->rtp_src_addr, src_addr); - - /* Reset counter */ - tp_ice->rtp_src_cnt = 0; - } + if (!tp_ice->use_ice) { - tp_ice->rtp_src_cnt++; + /* Increment counter and avoid zero */ + if (++tp_ice->rtp_src_cnt == 0) + tp_ice->rtp_src_cnt = 1; - if ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING) == 0 && - tp_ice->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) - { - - char addr_text[80]; - - /* Set remote RTP address to source address */ - pj_sockaddr_cp(&tp_ice->remote_rtp, &tp_ice->rtp_src_addr); - tp_ice->addr_len = pj_sockaddr_get_len(&tp_ice->remote_rtp); - - /* Reset counter */ - tp_ice->rtp_src_cnt = 0; + if (pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) != 0) { - PJ_LOG(4,(tp_ice->base.name, - "Remote RTP address switched to %s", - pj_sockaddr_print(&tp_ice->remote_rtp, addr_text, - sizeof(addr_text), 3))); + /* Check if the source address is recognized. */ + if (pj_sockaddr_cmp(src_addr, &tp_ice->rtp_src_addr) != 0) { + /* Remember the new source address. */ + pj_sockaddr_cp(&tp_ice->rtp_src_addr, src_addr); + /* Reset counter */ + tp_ice->rtp_src_cnt = 0; + } - /* Also update remote RTCP address if actual RTCP source - * address is not heard yet. - */ - if (!pj_sockaddr_has_addr(&tp_ice->rtcp_src_addr)) { - pj_uint16_t port; + if ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0 && + tp_ice->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) + { + char addr_text[80]; - pj_sockaddr_cp(&tp_ice->remote_rtcp, &tp_ice->remote_rtp); + /* Set remote RTP address to source address */ + pj_sockaddr_cp(&tp_ice->remote_rtp, &tp_ice->rtp_src_addr); + tp_ice->addr_len = pj_sockaddr_get_len(&tp_ice->remote_rtp); - port = (pj_uint16_t) - (pj_sockaddr_get_port(&tp_ice->remote_rtp)+1); - pj_sockaddr_set_port(&tp_ice->remote_rtcp, port); + /* Reset counter */ + tp_ice->rtp_src_cnt = 0; PJ_LOG(4,(tp_ice->base.name, - "Remote RTCP address switched to %s", - pj_sockaddr_print(&tp_ice->remote_rtcp, addr_text, + "Remote RTP address switched to %s", + pj_sockaddr_print(&tp_ice->remote_rtp, addr_text, sizeof(addr_text), 3))); + /* Also update remote RTCP address if actual RTCP source + * address is not heard yet. + */ + if (!pj_sockaddr_has_addr(&tp_ice->rtcp_src_addr)) { + pj_uint16_t port; + + pj_sockaddr_cp(&tp_ice->remote_rtcp, + &tp_ice->remote_rtp); + + port = (pj_uint16_t) + (pj_sockaddr_get_port(&tp_ice->remote_rtp)+1); + pj_sockaddr_set_port(&tp_ice->remote_rtcp, port); + + PJ_LOG(4,(tp_ice->base.name, + "Remote RTCP address switched to %s", + pj_sockaddr_print(&tp_ice->remote_rtcp, + addr_text, + sizeof(addr_text), 3))); + } } } } diff --git a/pjmedia/src/pjmedia/transport_udp.c b/pjmedia/src/pjmedia/transport_udp.c index 3b49421b..bb48431e 100644 --- a/pjmedia/src/pjmedia/transport_udp.c +++ b/pjmedia/src/pjmedia/transport_udp.c @@ -606,8 +606,8 @@ static pj_status_t transport_get_info(pjmedia_transport *tp, info->sock_info.rtcp_addr_name = udp->rtcp_addr_name; /* Get remote address originating RTP & RTCP. */ - info->rem_rtp_name = udp->rtp_src_addr; - info->rem_rtcp_name = udp->rtcp_src_addr; + info->src_rtp_name = udp->rtp_src_addr; + info->src_rtcp_name = udp->rtcp_src_addr; return PJ_SUCCESS; } @@ -665,6 +665,11 @@ static pj_status_t transport_attach( pjmedia_transport *tp, /* Last, mark transport as attached */ udp->attached = PJ_TRUE; + /* Reset source RTP & RTCP addresses and counter */ + pj_bzero(&udp->rtp_src_addr, sizeof(udp->rtp_src_addr)); + pj_bzero(&udp->rtcp_src_addr, sizeof(udp->rtcp_src_addr)); + udp->rtp_src_cnt = 0; + return PJ_SUCCESS; } |