summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2008-09-17 15:32:06 +0000
committerNanang Izzuddin <nanang@teluu.com>2008-09-17 15:32:06 +0000
commit5059cf00692fdb889344d9839fad80773e58deb8 (patch)
tree2c12e7aef106072f12cddcfefa370d08e01722a5
parent85e32856f0f9b30fe2366587c9d7180f2bbbcdd2 (diff)
Ticket #631:
- Added new fields in media transport info: remote address originating RTP & RTCP. - Updated transport UDP & ICE to fill above fields in getting transport info. - Updated pjsua call dump, instead of showing remote RTP address from SDP, it will show address of RTP originator. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2291 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/include/pjmedia/transport.h6
-rw-r--r--pjmedia/src/pjmedia/transport_ice.c29
-rw-r--r--pjmedia/src/pjmedia/transport_udp.c4
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c26
4 files changed, 48 insertions, 17 deletions
diff --git a/pjmedia/include/pjmedia/transport.h b/pjmedia/include/pjmedia/transport.h
index 6c5ffde6..2ce195e5 100644
--- a/pjmedia/include/pjmedia/transport.h
+++ b/pjmedia/include/pjmedia/transport.h
@@ -493,6 +493,12 @@ struct pjmedia_transport_info
pjmedia_sock_info sock_info;
/**
+ * Remote address where RTP/RTCP originated from.
+ */
+ pj_sockaddr rem_rtp_name;
+ pj_sockaddr rem_rtcp_name;
+
+ /**
* Specifies number of transport specific info included.
*/
int specific_info_cnt;
diff --git a/pjmedia/src/pjmedia/transport_ice.c b/pjmedia/src/pjmedia/transport_ice.c
index 99964aab..461d5768 100644
--- a/pjmedia/src/pjmedia/transport_ice.c
+++ b/pjmedia/src/pjmedia/transport_ice.c
@@ -1424,6 +1424,10 @@ 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;
+
return PJ_SUCCESS;
}
@@ -1547,7 +1551,6 @@ static void ice_on_rx_data(pj_ice_strans *ice_st, unsigned comp_id,
* have been received.
*/
if (!tp_ice->use_ice &&
- (tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING) == 0 &&
pj_sockaddr_cmp(&tp_ice->remote_rtp, src_addr) != 0 )
{
/* Check if the source address is recognized. */
@@ -1561,7 +1564,9 @@ static void ice_on_rx_data(pj_ice_strans *ice_st, unsigned comp_id,
tp_ice->rtp_src_cnt++;
- if (tp_ice->rtp_src_cnt >= PJMEDIA_RTP_NAT_PROBATION_CNT) {
+ 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];
@@ -1605,20 +1610,22 @@ static void ice_on_rx_data(pj_ice_strans *ice_st, unsigned comp_id,
* different.
*/
if (!tp_ice->use_ice &&
- (tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0 &&
pj_sockaddr_cmp(&tp_ice->remote_rtcp, src_addr) != 0)
{
- char addr_text[80];
-
- pj_sockaddr_cp(&tp_ice->remote_rtcp, src_addr);
pj_sockaddr_cp(&tp_ice->rtcp_src_addr, src_addr);
- pj_assert(tp_ice->addr_len == pj_sockaddr_get_len(src_addr));
+ if ((tp_ice->options & PJMEDIA_ICE_NO_SRC_ADDR_CHECKING)==0) {
+ char addr_text[80];
- 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)));
+ pj_sockaddr_cp(&tp_ice->remote_rtcp, src_addr);
+
+ pj_assert(tp_ice->addr_len == pj_sockaddr_get_len(src_addr));
+
+ 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 0ef28ccb..3b49421b 100644
--- a/pjmedia/src/pjmedia/transport_udp.c
+++ b/pjmedia/src/pjmedia/transport_udp.c
@@ -605,6 +605,10 @@ static pj_status_t transport_get_info(pjmedia_transport *tp,
info->sock_info.rtcp_sock = udp->rtcp_sock;
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;
+
return PJ_SUCCESS;
}
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index c1d5441c..de9a7976 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -2018,13 +2018,18 @@ const char *good_number(char *buf, pj_int32_t val)
/* Dump media session */
static void dump_media_session(const char *indent,
char *buf, unsigned maxlen,
- pjmedia_session *session)
+ pjsua_call *call)
{
unsigned i;
char *p = buf, *end = buf+maxlen;
int len;
pjmedia_session_info info;
+ pjmedia_session *session = call->session;
+ pjmedia_transport_info tp_info;
+
+ pjmedia_transport_info_init(&tp_info);
+ pjmedia_transport_get_info(call->med_tp, &tp_info);
pjmedia_session_get_info(session, &info);
for (i=0; i<info.stream_cnt; ++i) {
@@ -2037,8 +2042,17 @@ static void dump_media_session(const char *indent,
pj_time_val media_duration, now;
pjmedia_session_get_stream_stat(session, i, &stat);
- rem_addr = pj_sockaddr_print(&info.stream_info[i].rem_addr,
- rem_addr_buf, sizeof(rem_addr_buf), 3);
+ // rem_addr will contain actual address of RTP originator, instead of
+ // remote RTP address specified by stream which is fetched from the SDP.
+ // Please note that we are assuming only one stream per call.
+ //rem_addr = pj_sockaddr_print(&info.stream_info[i].rem_addr,
+ // rem_addr_buf, sizeof(rem_addr_buf), 3);
+ if (pj_sockaddr_has_addr(&tp_info.rem_rtp_name)) {
+ rem_addr = pj_sockaddr_print(&tp_info.rem_rtp_name, rem_addr_buf,
+ sizeof(rem_addr_buf), 3);
+ } else {
+ pj_ansi_snprintf(rem_addr_buf, sizeof(rem_addr_buf), "-");
+ }
if (info.stream_info[i].dir == PJMEDIA_DIR_ENCODING)
dir = "sendonly";
@@ -2627,8 +2641,8 @@ static void dump_media_session(const char *indent,
/* Print call info */
void print_call(const char *title,
- int call_id,
- char *buf, pj_size_t size)
+ int call_id,
+ char *buf, pj_size_t size)
{
int len;
pjsip_inv_session *inv = pjsua_var.calls[call_id].inv;
@@ -2758,7 +2772,7 @@ PJ_DEF(pj_status_t) pjsua_call_dump( pjsua_call_id call_id,
/* Dump session statistics */
if (with_media && call->session)
- dump_media_session(indent, p, end-p, call->session);
+ dump_media_session(indent, p, end-p, call);
pjsip_dlg_dec_lock(dlg);