summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-03-17 16:05:35 +0000
committerBenny Prijono <bennylp@teluu.com>2008-03-17 16:05:35 +0000
commit0e602ccdd09d4e09556b93dbdd63841865d08388 (patch)
tree469548248ae7c70d6e2c7284b5ac2725efd0b95c
parentdf316c166181fd58ebc4efad3d4a2f5bfdf86e9e (diff)
More ticket #479: bug in pjmedia_transport_get_info(), the info should be initialized by caller
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1873 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/include/pjmedia/transport.h23
-rw-r--r--pjmedia/src/pjmedia/transport_ice.c2
-rw-r--r--pjmedia/src/pjmedia/transport_srtp.c6
-rw-r--r--pjmedia/src/pjmedia/transport_udp.c1
-rw-r--r--pjsip-apps/src/samples/simpleua.c1
-rw-r--r--pjsip-apps/src/samples/siprtp.c2
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c3
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c4
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c1
9 files changed, 28 insertions, 15 deletions
diff --git a/pjmedia/include/pjmedia/transport.h b/pjmedia/include/pjmedia/transport.h
index fcf120da..19869a9b 100644
--- a/pjmedia/include/pjmedia/transport.h
+++ b/pjmedia/include/pjmedia/transport.h
@@ -405,7 +405,7 @@ struct pjmedia_transport
};
/**
- * This structure describes buffer storage of transport specific info.
+ * This structure describes storage buffer of transport specific info.
* The actual transport specific info contents will be defined by transport
* implementation. Note that some transport implementations do not need to
* provide specific info, since the general socket info is enough.
@@ -456,10 +456,23 @@ struct pjmedia_transport_info
/**
- * Get media socket info from the specified transport. The socket info
- * contains information about the local address of this transport, and
- * would be needed for example to fill in the "c=" and "m=" line of local
- * SDP.
+ * Initialize transport info.
+ *
+ * @param info Transport info to be initialized.
+ */
+PJ_INLINE(void) pjmedia_transport_info_init(pjmedia_transport_info *info)
+{
+ pj_bzero(&info->sock_info, sizeof(pjmedia_sock_info));
+ info->sock_info.rtp_sock = info->sock_info.rtcp_sock = PJ_INVALID_SOCKET;
+ info->specific_info_cnt = 0;
+}
+
+
+/**
+ * Get media transport info from the specified transport and all underlying
+ * transports if any. The transport also contains information about socket info
+ * which describes the local address of the transport, and would be needed
+ * for example to fill in the "c=" and "m=" line of local SDP.
*
* @param tp The transport.
* @param info Media socket info to be initialized.
diff --git a/pjmedia/src/pjmedia/transport_ice.c b/pjmedia/src/pjmedia/transport_ice.c
index 0534ad4b..59408dd8 100644
--- a/pjmedia/src/pjmedia/transport_ice.c
+++ b/pjmedia/src/pjmedia/transport_ice.c
@@ -700,8 +700,6 @@ static pj_status_t transport_get_info(pjmedia_transport *tp,
sizeof(pj_sockaddr_in));
}
- info->specific_info_cnt = 0;
-
return PJ_SUCCESS;
}
diff --git a/pjmedia/src/pjmedia/transport_srtp.c b/pjmedia/src/pjmedia/transport_srtp.c
index 3bd95c88..6cc3881a 100644
--- a/pjmedia/src/pjmedia/transport_srtp.c
+++ b/pjmedia/src/pjmedia/transport_srtp.c
@@ -564,10 +564,6 @@ static pj_status_t transport_get_info(pjmedia_transport *tp,
PJ_ASSERT_RETURN(sizeof(pjmedia_srtp_info) <=
PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXSIZE, PJ_ENOMEM);
- status = pjmedia_transport_get_info(srtp->real_tp, info);
- if (status != PJ_SUCCESS)
- return status;
-
srtp_info.active = srtp->session_inited;
srtp_info.rx_policy = srtp->rx_policy;
srtp_info.tx_policy = srtp->tx_policy;
@@ -578,7 +574,7 @@ static pj_status_t transport_get_info(pjmedia_transport *tp,
pj_memcpy(&info->spc_info[spc_info_idx].buffer, &srtp_info,
sizeof(srtp_info));
- return PJ_SUCCESS;
+ return pjmedia_transport_get_info(srtp->real_tp, info);
}
static pj_status_t transport_attach(pjmedia_transport *tp,
diff --git a/pjmedia/src/pjmedia/transport_udp.c b/pjmedia/src/pjmedia/transport_udp.c
index f4e12cd1..c671d0f7 100644
--- a/pjmedia/src/pjmedia/transport_udp.c
+++ b/pjmedia/src/pjmedia/transport_udp.c
@@ -593,7 +593,6 @@ static pj_status_t transport_get_info(pjmedia_transport *tp,
info->sock_info.rtp_addr_name = udp->rtp_addr_name;
info->sock_info.rtcp_sock = udp->rtcp_sock;
info->sock_info.rtcp_addr_name = udp->rtcp_addr_name;
- info->specific_info_cnt = 0;
return PJ_SUCCESS;
}
diff --git a/pjsip-apps/src/samples/simpleua.c b/pjsip-apps/src/samples/simpleua.c
index 634bc539..4e9d3954 100644
--- a/pjsip-apps/src/samples/simpleua.c
+++ b/pjsip-apps/src/samples/simpleua.c
@@ -301,6 +301,7 @@ int main(int argc, char *argv[])
* need this info to create SDP (i.e. the address and port info in
* the SDP).
*/
+ pjmedia_transport_info_init(&g_med_tpinfo);
pjmedia_transport_get_info(g_med_transport, &g_med_tpinfo);
diff --git a/pjsip-apps/src/samples/siprtp.c b/pjsip-apps/src/samples/siprtp.c
index 53abcdee..a091d839 100644
--- a/pjsip-apps/src/samples/siprtp.c
+++ b/pjsip-apps/src/samples/siprtp.c
@@ -1012,7 +1012,7 @@ static pj_status_t create_sdp( pj_pool_t *pool,
/* Get transport info */
- pj_bzero(&tpinfo, sizeof(tpinfo));
+ pjmedia_transport_info_init(&tpinfo);
pjmedia_transport_get_info(audio->transport, &tpinfo);
/* Create and initialize basic SDP session */
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index 6329732a..4035011a 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -2260,6 +2260,7 @@ PJ_DEF(pj_status_t) pjsua_call_dump( pjsua_call_id call_id,
}
/* Get SRTP status */
+ pjmedia_transport_info_init(&tp_info);
pjmedia_transport_get_info(call->med_tp, &tp_info);
if (tp_info.specific_info_cnt > 0) {
int i;
@@ -2470,6 +2471,7 @@ static void call_disconnect( pjsip_inv_session *inv,
pjmedia_sdp_session *local_sdp;
pjmedia_transport_info ti;
+ pjmedia_transport_info_init(&ti);
pjmedia_transport_get_info(call->med_tp, &ti);
status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, tdata->pool,
1, &ti.sock_info, &local_sdp);
@@ -2581,6 +2583,7 @@ static pj_status_t create_inactive_sdp(pjsua_call *call,
pjmedia_sdp_session *sdp;
/* Get media socket info */
+ pjmedia_transport_info_init(&tp_info);
pjmedia_transport_get_info(call->med_tp, &tp_info);
/* Create new offer */
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index ef838ba8..9bbbca7a 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -320,6 +320,7 @@ static pj_bool_t options_on_rx_request(pjsip_rx_data *rdata)
}
/* Get media socket info */
+ pjmedia_transport_info_init(&tpinfo);
pjmedia_transport_get_info(pjsua_var.calls[0].med_tp, &tpinfo);
/* Add SDP body, using call0's RTP address */
@@ -2064,8 +2065,9 @@ PJ_DEF(void) pjsua_dump(pj_bool_t detail)
char addr_buf[80];
/* MSVC complains about tpinfo not being initialized */
- pj_bzero(&tpinfo, sizeof(tpinfo));
+ //pj_bzero(&tpinfo, sizeof(tpinfo));
+ pjmedia_transport_info_init(&tpinfo);
pjmedia_transport_get_info(call->med_tp, &tpinfo);
PJ_LOG(3,(THIS_FILE, " %s: %s",
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 765fec0f..86f3d4f0 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -839,6 +839,7 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id,
}
/* Get media socket info */
+ pjmedia_transport_info_init(&tpinfo);
pjmedia_transport_get_info(call->med_tp, &tpinfo);
/* Create SDP */