summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2008-09-18 12:58:33 +0000
committerNanang Izzuddin <nanang@teluu.com>2008-09-18 12:58:33 +0000
commit079dfbcbbe8e1d401a106c097845fd777c809011 (patch)
treea7bb7702da1bdfa7d73b0bd153c30ee40fae89bf /pjmedia
parentfd64f65109f5cc5ce611cd5ec842c08796566a05 (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.h7
-rw-r--r--pjmedia/src/pjmedia/transport_ice.c96
-rw-r--r--pjmedia/src/pjmedia/transport_udp.c9
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;
}