diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-03-11 21:38:05 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-03-11 21:38:05 +0000 |
commit | 4e1d5dc0d96e099f12ea0127434b4f7029e95b2b (patch) | |
tree | 8471f75aefe77e864a4c9216f29ad04f2c8bf945 /pjsip | |
parent | cedeaec6e1f22463dc1e13e3dee467fc4dcd4019 (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.c | 38 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_core.c | 16 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_media.c | 6 |
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; |