zrtp_state_info jzrtp_getInfoFromTransport(pjmedia_transport* tp){ PJSUA_LOCK(); struct jzrtp_allContext ctxt; ctxt.zrtpContext = pjmedia_transport_zrtp_getZrtpContext(tp); ctxt.cbUserData = (zrtp_cb_user_data*) pjmedia_transport_zrtp_getUserData(tp); zrtp_state_info info = jzrtp_getInfoFromContext(ctxt); PJSUA_UNLOCK(); return info; }
struct jzrtp_allContext jzrtp_getContext(pjsua_call_id call_id) { pjsua_call *call; pj_status_t status; unsigned i; pjmedia_transport_info tp_info; struct jzrtp_allContext result; result.cbUserData = NULL; result.zrtpContext = NULL; PJ_ASSERT_RETURN(call_id>=0 && call_id<(int)pjsua_var.ua_cfg.max_calls, NULL); if (pjsua_call_has_media(call_id)) { call = &pjsua_var.calls[call_id]; for (i = 0; i < call->med_cnt; ++i) { pjsua_call_media *call_med = &call->media[i]; if (call_med->tp && call_med->type == PJMEDIA_TYPE_AUDIO) { pjmedia_transport_info tp_info; pjmedia_transport_info_init(&tp_info); pjmedia_transport_get_info(call_med->tp, &tp_info); if (tp_info.specific_info_cnt > 0) { unsigned j; for (j = 0; j < tp_info.specific_info_cnt; ++j) { if (tp_info.spc_info[j].type == PJMEDIA_TRANSPORT_TYPE_ZRTP) { result.zrtpContext = pjmedia_transport_zrtp_getZrtpContext(call_med->tp); result.cbUserData = (zrtp_cb_user_data*) pjmedia_transport_zrtp_getUserData(call_med->tp); } } } } } } return result; }
pj_str_t jzrtp_getInfo(pjmedia_transport* tp) { pj_str_t result; char msg[512]; ZrtpContext *ctx = pjmedia_transport_zrtp_getZrtpContext(tp); int32_t state = zrtp_inState(ctx, SecureState); zrtp_cb_user_data* zrtp_cb_data = (zrtp_cb_user_data*) pjmedia_transport_zrtp_getUserData(tp); if (state) { pj_ansi_snprintf(msg, sizeof(msg), "ZRTP - %s\n%.*s\n%.*s", "OK", zrtp_cb_data->sas.slen, zrtp_cb_data->sas.ptr, zrtp_cb_data->cipher.slen, zrtp_cb_data->cipher.ptr); } else { pj_ansi_snprintf(msg, sizeof(msg), ""); } pj_strdup2_with_null(css_var.pool, &result, msg); PJ_LOG(4, (THIS_FILE, "ZRTP getInfos : %s", msg)); return result; }