summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-06-22 00:54:54 +0000
committerBenny Prijono <bennylp@teluu.com>2006-06-22 00:54:54 +0000
commitaebddd09236b938f3d535f888cbc339b92a40817 (patch)
treea04c1f8d8c74a87055a7491f0a7085020f829e16
parentbd513117b6514f5901874d539d1398deccde6cd4 (diff)
Added capability to build pjmedia_sock_info from an UDP media transport
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@533 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/include/pjmedia/transport_udp.h12
-rw-r--r--pjmedia/src/pjmedia/transport_udp.c22
2 files changed, 34 insertions, 0 deletions
diff --git a/pjmedia/include/pjmedia/transport_udp.h b/pjmedia/include/pjmedia/transport_udp.h
index 3d7b22ef..536aeb7a 100644
--- a/pjmedia/include/pjmedia/transport_udp.h
+++ b/pjmedia/include/pjmedia/transport_udp.h
@@ -76,6 +76,18 @@ PJ_DECL(pj_status_t) pjmedia_transport_udp_create(pjmedia_endpt *endpt,
/**
+ * Get media socket info from the specified UDP transport.
+ *
+ * @param tp The UDP transport interface.
+ * @param i Media socket info to be initialized.
+ *
+ * @return PJ_SUCCESS on success.
+ */
+PJ_DECL(pj_status_t) pjmedia_transport_udp_get_sock_info(pjmedia_transport *tp,
+ pjmedia_sock_info *i);
+
+
+/**
* Create UDP stream transport from existing sockets. Use this function when
* the sockets have previously been created.
*
diff --git a/pjmedia/src/pjmedia/transport_udp.c b/pjmedia/src/pjmedia/transport_udp.c
index 6af2b124..2ba16659 100644
--- a/pjmedia/src/pjmedia/transport_udp.c
+++ b/pjmedia/src/pjmedia/transport_udp.c
@@ -48,6 +48,7 @@ struct transport_udp
pj_ssize_t);
pj_sock_t rtp_sock; /**< RTP socket */
+ pj_sockaddr_in rtp_addr_name; /**< Published RTP address. */
pj_ioqueue_key_t *rtp_key; /**< RTP socket key in ioqueue */
pj_ioqueue_op_key_t rtp_read_op; /**< Pending read operation */
pj_ioqueue_op_key_t rtp_write_op; /**< Pending write operation */
@@ -57,6 +58,7 @@ struct transport_udp
char rtp_pkt[RTP_LEN];/**< Incoming RTP packet buffer */
pj_sock_t rtcp_sock; /**< RTCP socket */
+ pj_sockaddr_in rtcp_addr_name; /**< Published RTCP address. */
pj_ioqueue_key_t *rtcp_key; /**< RTCP socket key in ioqueue */
pj_ioqueue_op_key_t rtcp_read_op; /**< Pending read operation */
pj_ioqueue_op_key_t rtcp_write_op; /**< Pending write operation */
@@ -206,7 +208,9 @@ PJ_DEF(pj_status_t) pjmedia_transport_udp_attach( pjmedia_endpt *endpt,
/* Copy socket infos */
tp->rtp_sock = si->rtp_sock;
+ tp->rtp_addr_name = si->rtp_addr_name;
tp->rtcp_sock = si->rtcp_sock;
+ tp->rtcp_addr_name = si->rtcp_addr_name;
/* Setup RTP socket with the ioqueue */
@@ -263,6 +267,24 @@ on_error:
}
+/*
+ * Get media socket info.
+ */
+PJ_DEF(pj_status_t) pjmedia_transport_udp_get_sock_info(pjmedia_transport *tp,
+ pjmedia_sock_info *inf)
+{
+ struct transport_udp *udp = (struct transport_udp*)tp;
+ PJ_ASSERT_RETURN(tp && inf, PJ_EINVAL);
+
+ inf->rtp_sock = udp->rtp_sock;
+ inf->rtp_addr_name = udp->rtp_addr_name;
+ inf->rtcp_sock = udp->rtcp_sock;
+ inf->rtcp_addr_name = udp->rtcp_addr_name;
+
+ return PJ_SUCCESS;
+}
+
+
/**
* Close UDP transport.
*/