case ZRTP_EVENT_IS_SECURE:
switch_set_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_SEND);
switch_set_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_RECV);
- switch_set_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM);
+ switch_set_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND);
+ switch_set_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV);
if (zrtp_status_ok == zrtp_session_get(rtp_session->zrtp_session, &zrtp_session_info)) {
if (zrtp_session_info.sas_is_ready) {
case ZRTP_EVENT_IS_PENDINGCLEAR:
switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_SEND);
switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_RECV);
- switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM);
+ switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND);
+ switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV);
rtp_session->zrtp_mitm_tries = 0;
break;
case ZRTP_EVENT_NO_ZRTP:
frame->m = rtp_session->recv_msg.header.m ? SWITCH_TRUE : SWITCH_FALSE;
#ifdef ENABLE_ZRTP
- if (zrtp_on && switch_test_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM)) {
- frame->extra_data = rtp_session->zrtp_ctx;
- switch_set_flag(frame, SFF_ZRTP);
- if (rtp_session->zrtp_mitm_tries > 10) {
- switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM);
+ if (zrtp_on && switch_test_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV)) {
+ zrtp_session_info_t zrtp_session_info;
+
+ if (zrtp_status_ok == zrtp_session_get(rtp_session->zrtp_session, &zrtp_session_info)) {
+ if (zrtp_session_info.sas_is_ready) {
+ frame->extra_data = rtp_session->zrtp_ctx;
+ switch_set_flag(frame, SFF_ZRTP);
+ if (rtp_session->zrtp_mitm_tries > 20) {
+ switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_RECV);
+ }
+ rtp_session->zrtp_mitm_tries++;
+ }
}
- rtp_session->zrtp_mitm_tries++;
}
#endif
}
#ifdef ENABLE_ZRTP
- if (zrtp_on && switch_test_flag(frame, SFF_ZRTP)) {
-
- if (zrtp_status_ok == zrtp_resolve_mitm_call(frame->extra_data, rtp_session->zrtp_ctx)) {
- switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM);
+ if (zrtp_on && switch_test_flag(frame, SFF_ZRTP) && switch_test_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND)) {
+ zrtp_session_info_t zrtp_session_info;
+
+ if (zrtp_status_ok == zrtp_session_get(rtp_session->zrtp_session, &zrtp_session_info)) {
+ if (zrtp_session_info.sas_is_ready) {
+ if (zrtp_status_ok == zrtp_resolve_mitm_call(frame->extra_data, rtp_session->zrtp_ctx)) {
+ switch_clear_flag(rtp_session, SWITCH_ZRTP_FLAG_SECURE_MITM_SEND);
+ }
+ rtp_session->zrtp_mitm_tries++;
+ }
}
- rtp_session->zrtp_mitm_tries++;
}
#endif