summaryrefslogtreecommitdiff
path: root/pjsip
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-03-11 21:38:05 +0000
committerBenny Prijono <bennylp@teluu.com>2008-03-11 21:38:05 +0000
commit4e1d5dc0d96e099f12ea0127434b4f7029e95b2b (patch)
tree8471f75aefe77e864a4c9216f29ad04f2c8bf945 /pjsip
parentcedeaec6e1f22463dc1e13e3dee467fc4dcd4019 (diff)
Ticket #479: allow media transport framework to return transport specific info (for example, to know whether SRTP is enabled)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1860 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_call.c38
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c16
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c6
3 files changed, 43 insertions, 17 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_call.c b/pjsip/src/pjsua-lib/pjsua_call.c
index 403a473a..6329732a 100644
--- a/pjsip/src/pjsua-lib/pjsua_call.c
+++ b/pjsip/src/pjsua-lib/pjsua_call.c
@@ -2200,6 +2200,7 @@ PJ_DEF(pj_status_t) pjsua_call_dump( pjsua_call_id call_id,
char *p, *end;
pj_status_t status;
int len;
+ pjmedia_transport_info tp_info;
PJ_ASSERT_RETURN(call_id>=0 && call_id<(int)pjsua_var.ua_cfg.max_calls,
PJ_EINVAL);
@@ -2258,6 +2259,31 @@ PJ_DEF(pj_status_t) pjsua_call_dump( pjsua_call_id call_id,
*p = '\0';
}
+ /* Get SRTP status */
+ pjmedia_transport_get_info(call->med_tp, &tp_info);
+ if (tp_info.specific_info_cnt > 0) {
+ int i;
+ for (i = 0; i < tp_info.specific_info_cnt; ++i) {
+ if (tp_info.spc_info[i].type == PJMEDIA_TRANSPORT_TYPE_SRTP)
+ {
+ pjmedia_srtp_info *srtp_info =
+ (pjmedia_srtp_info*) tp_info.spc_info[i].buffer;
+
+ len = pj_ansi_snprintf(p, end-p,
+ "%s SRTP status: %s Crypto-suite: %s",
+ indent,
+ (srtp_info->active?"Active":"Not active"),
+ srtp_info->tx_policy.name.ptr);
+ if (len > 0 && len < end-p) {
+ p += len;
+ *p++ = '\n';
+ *p = '\0';
+ }
+ break;
+ }
+ }
+ }
+
/* Dump session statistics */
if (with_media && call->session)
dump_media_session(indent, p, end-p, call->session);
@@ -2442,11 +2468,11 @@ static void call_disconnect( pjsip_inv_session *inv,
code==PJSIP_SC_NOT_ACCEPTABLE_HERE)
{
pjmedia_sdp_session *local_sdp;
- pjmedia_sock_info si;
+ pjmedia_transport_info ti;
- call->med_tp->op->get_info(call->med_tp, &si);
+ pjmedia_transport_get_info(call->med_tp, &ti);
status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, tdata->pool,
- 1, &si, &local_sdp);
+ 1, &ti.sock_info, &local_sdp);
if (status == PJ_SUCCESS) {
pjsip_create_sdp_body(tdata->pool, local_sdp,
&tdata->msg->body);
@@ -2551,15 +2577,15 @@ static pj_status_t create_inactive_sdp(pjsua_call *call,
pj_status_t status;
pjmedia_sdp_conn *conn;
pjmedia_sdp_attr *attr;
- pjmedia_sock_info skinfo;
+ pjmedia_transport_info tp_info;
pjmedia_sdp_session *sdp;
/* Get media socket info */
- pjmedia_transport_get_info(call->med_tp, &skinfo);
+ pjmedia_transport_get_info(call->med_tp, &tp_info);
/* Create new offer */
status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, pjsua_var.pool, 1,
- &skinfo, &sdp);
+ &tp_info.sock_info, &sdp);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE, "Unable to create local SDP", status);
return status;
diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c
index 40471583..ef838ba8 100644
--- a/pjsip/src/pjsua-lib/pjsua_core.c
+++ b/pjsip/src/pjsua-lib/pjsua_core.c
@@ -260,7 +260,7 @@ static pj_bool_t options_on_rx_request(pjsip_rx_data *rdata)
{
pjsip_tx_data *tdata;
pjsip_response_addr res_addr;
- pjmedia_sock_info skinfo;
+ pjmedia_transport_info tpinfo;
pjmedia_sdp_session *sdp;
const pjsip_hdr *cap_hdr;
pj_status_t status;
@@ -320,11 +320,11 @@ static pj_bool_t options_on_rx_request(pjsip_rx_data *rdata)
}
/* Get media socket info */
- pjmedia_transport_get_info(pjsua_var.calls[0].med_tp, &skinfo);
+ pjmedia_transport_get_info(pjsua_var.calls[0].med_tp, &tpinfo);
/* Add SDP body, using call0's RTP address */
status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, tdata->pool, 1,
- &skinfo, &sdp);
+ &tpinfo.sock_info, &sdp);
if (status == PJ_SUCCESS) {
pjsip_create_sdp_body(tdata->pool, sdp, &tdata->msg->body);
}
@@ -2060,17 +2060,17 @@ PJ_DEF(void) pjsua_dump(pj_bool_t detail)
PJ_LOG(3,(THIS_FILE, "Dumping media transports:"));
for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
pjsua_call *call = &pjsua_var.calls[i];
- pjmedia_sock_info skinfo;
+ pjmedia_transport_info tpinfo;
char addr_buf[80];
- /* MSVC complains about skinfo not being initialized */
- pj_bzero(&skinfo, sizeof(skinfo));
+ /* MSVC complains about tpinfo not being initialized */
+ pj_bzero(&tpinfo, sizeof(tpinfo));
- pjmedia_transport_get_info(call->med_tp, &skinfo);
+ pjmedia_transport_get_info(call->med_tp, &tpinfo);
PJ_LOG(3,(THIS_FILE, " %s: %s",
(pjsua_var.media_cfg.enable_ice ? "ICE" : "UDP"),
- pj_sockaddr_print(&skinfo.rtp_addr_name, addr_buf,
+ pj_sockaddr_print(&tpinfo.sock_info.rtp_addr_name, addr_buf,
sizeof(addr_buf), 3)));
}
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index dea8b5b7..238b1fb5 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -814,7 +814,7 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id,
{
enum { MAX_MEDIA = 1, MEDIA_IDX = 0 };
pjmedia_sdp_session *sdp;
- pjmedia_sock_info skinfo;
+ pjmedia_transport_info tpinfo;
pjsua_call *call = &pjsua_var.calls[call_id];
pj_status_t status;
@@ -826,11 +826,11 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id,
}
/* Get media socket info */
- pjmedia_transport_get_info(call->med_tp, &skinfo);
+ pjmedia_transport_get_info(call->med_tp, &tpinfo);
/* Create SDP */
status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, pool, MAX_MEDIA,
- &skinfo, &sdp);
+ &tpinfo.sock_info, &sdp);
if (status != PJ_SUCCESS) {
if (sip_status_code) *sip_status_code = 500;
goto on_error;