Module: sems Branch: master Commit: f6c061b66d1ea5ac26344bb909130d586141b7db URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=f6c061b66d1ea5ac26344bb909130d586141b7db
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Mon Nov 3 17:45:30 2014 +0100 core:zrtp: separate out ZRTP protocol description --- core/AmRtpStream.cpp | 13 +++++++ core/AmSession.cpp | 92 +++++++++----------------------------------------- core/AmZRTP.cpp | 40 ++++++++++++++++++++++ core/AmZRTP.h | 4 ++ 4 files changed, 73 insertions(+), 76 deletions(-) diff --git a/core/AmRtpStream.cpp b/core/AmRtpStream.cpp index b7b776f..4cf0254 100644 --- a/core/AmRtpStream.cpp +++ b/core/AmRtpStream.cpp @@ -772,6 +772,13 @@ void AmRtpStream::pause() { DBG("RTP Stream instance [%p] pausing (receiving=false)\n", this); receiving = false; + +#ifdef WITH_ZRTP + if (session && session->enable_zrtp) { + session->zrtp_session_state.stopStreams(); + } +#endif + } void AmRtpStream::resume() @@ -783,6 +790,12 @@ void AmRtpStream::resume() receive_buf.clear(); receive_mut.unlock(); receiving = true; + +#ifdef WITH_ZRTP + if (session && session->enable_zrtp) { + session->zrtp_session_state.startStreams(get_ssrc()); + } +#endif } void AmRtpStream::setOnHold(bool on_hold) { diff --git a/core/AmSession.cpp b/core/AmSession.cpp index fd76432..2f6c5f5 100644 --- a/core/AmSession.cpp +++ b/core/AmSession.cpp @@ -97,11 +97,6 @@ AmSession::~AmSession() delete *evh; } -#ifdef WITH_ZRTP - if (enable_zrtp) - zrtp_session_state.freeSession(); -#endif - delete dlg; DBG("AmSession destructor finished\n"); @@ -434,6 +429,12 @@ void AmSession::finalize() DBG("running finalize sequence...\n"); dlg->finalize(); +#ifdef WITH_ZRTP + if (enable_zrtp) { + zrtp_session_state.freeSession(); + } +#endif + onBeforeDestroy(); destroy(); @@ -1247,23 +1248,9 @@ bool AmSession::removeTimers() { #ifdef WITH_ZRTP void AmSession::onZRTPProtocolEvent(zrtp_protocol_event_t event, zrtp_stream_t *stream_ctx) { - DBG("AmSession::onZRTPProtocolEvent\n"); - switch (event) - { - case ZRTP_EVENT_UNSUPPORTED: - INFO("ZRTP_EVENT_UNSUPPORTED\n"); - break; - case ZRTP_EVENT_IS_CLEAR: - INFO("ZRTP_EVENT_IS_CLEAR\n"); - break; - case ZRTP_EVENT_IS_INITIATINGSECURE: - INFO("ZRTP_EVENT_IS_INITIATINGSECURE\n"); - break; - case ZRTP_EVENT_IS_PENDINGSECURE: - INFO("ZRTP_EVENT_PENDINGSECURE\n"); - break; + DBG("AmSession::onZRTPProtocolEvent: %s\n", zrtp_protocol_event_desc(event)); - case ZRTP_EVENT_IS_SECURE: { + if (event==ZRTP_EVENT_IS_SECURE) { INFO("ZRTP_EVENT_IS_SECURE \n"); // info->is_verified = ctx->_session_ctx->secrets.verifieds & ZRTP_BIT_RS0; @@ -1275,66 +1262,19 @@ void AmSession::onZRTPProtocolEvent(zrtp_protocol_event_t event, zrtp_stream_t * // DBG("Got SAS values SAS1 '%s' and SAS2 '%s'\n", // session->sas_values.str1.buffer, // session->sas_values.str2.buffer); - // } - } break; + // } + } - case ZRTP_EVENT_IS_PENDINGCLEAR: - INFO("ZRTP_EVENT_IS_PENDINGCLEAR\n"); - INFO("other side requested goClear. Going clear.\n\n"); - // zrtp_clear_stream(zrtp_audio); - break; + // case ZRTP_EVENT_IS_PENDINGCLEAR: + // INFO("ZRTP_EVENT_IS_PENDINGCLEAR\n"); + // INFO("other side requested goClear. Going clear.\n\n"); + // // zrtp_clear_stream(zrtp_audio); + // break; - case ZRTP_EVENT_IS_SECURE_DONE: - INFO("ZRTP_EVENT_IS_SECURE_DONE\n"); - break; - case ZRTP_EVENT_NO_ZRTP: - INFO("ZRTP_EVENT_NO_ZRTP\n"); - break; - case ZRTP_EVENT_NO_ZRTP_QUICK: - INFO("ZRTP_EVENT_NO_ZRTP_QUICK\n"); - break; - - // pbx functions - case ZRTP_EVENT_IS_CLIENT_ENROLLMENT: - INFO("ZRTP_EVENT_IS_CLIENT_ENROLLMENT\n"); - break; - case ZRTP_EVENT_NEW_USER_ENROLLED: - INFO("ZRTP_EVENT_NEW_USER_ENROLLED\n"); - break; - case ZRTP_EVENT_USER_ALREADY_ENROLLED: - INFO("ZRTP_EVENT_USER_ALREADY_ENROLLED\n"); - break; - case ZRTP_EVENT_USER_UNENROLLED: - INFO("ZRTP_EVENT_USER_UNENROLLED\n"); - break; - case ZRTP_EVENT_LOCAL_SAS_UPDATED: - INFO("ZRTP_EVENT_LOCAL_SAS_UPDATED\n"); - break; - case ZRTP_EVENT_REMOTE_SAS_UPDATED: - INFO("ZRTP_EVENT_REMOTE_SAS_UPDATED\n"); - break; - - // errors - case ZRTP_EVENT_WRONG_SIGNALING_HASH: - INFO("ZRTP_EVENT_WRONG_SIGNALING_HASH\n"); - break; - case ZRTP_EVENT_WRONG_MESSAGE_HMAC: - INFO("ZRTP_EVENT_WRONG_MESSAGE_HMAC\n"); - break; - - case ZRTP_EVENT_IS_PASSIVE_RESTRICTION: - INFO("ZRTP_EVENT_IS_PASSIVE_RESTRICTION\n"); - break; - - default: - INFO("unknown ZRTP_EVENT\n"); - break; - } // end events case } void AmSession::onZRTPSecurityEvent(zrtp_security_event_t event, zrtp_stream_t *stream_ctx) { - DBG("AmSession::onZRTPSecurityEvent\n"); - + DBG("AmSession::onZRTPSecurityEvent: %s\n", zrtp_security_event_desc(event)); } #endif diff --git a/core/AmZRTP.cpp b/core/AmZRTP.cpp index 2496125..59bb60e 100644 --- a/core/AmZRTP.cpp +++ b/core/AmZRTP.cpp @@ -192,6 +192,9 @@ int AmZRTPSessionState::initSession(AmSession* session) { } int AmZRTPSessionState::startStreams(uint32_t ssrc){ + if (NULL == zrtp_audio) + return -1; + zrtp_status_t status = zrtp_stream_start(zrtp_audio, ssrc); if (zrtp_status_ok != status) { ERROR("starting ZRTP stream\n"); @@ -201,6 +204,9 @@ int AmZRTPSessionState::startStreams(uint32_t ssrc){ } int AmZRTPSessionState::stopStreams(){ + if (NULL == zrtp_audio) + return -1; + zrtp_status_t status = zrtp_stream_stop(zrtp_audio); if (zrtp_status_ok != status) { ERROR("stopping ZRTP stream\n"); @@ -297,4 +303,38 @@ void AmZRTP::on_zrtp_protocol_event(zrtp_stream_t *stream, zrtp_protocol_event_t sess->postEvent(new AmZRTPProtocolEvent(event, stream)); } +const char* zrtp_protocol_event_desc(zrtp_protocol_event_t e) { + switch (e) { + case ZRTP_EVENT_UNSUPPORTED: return "ZRTP_EVENT_UNSUPPORTED"; + + case ZRTP_EVENT_IS_CLEAR: return "ZRTP_EVENT_IS_CLEAR"; + case ZRTP_EVENT_IS_INITIATINGSECURE: return "ZRTP_EVENT_IS_INITIATINGSECURE"; + case ZRTP_EVENT_IS_PENDINGSECURE: return "ZRTP_EVENT_IS_PENDINGSECURE"; + case ZRTP_EVENT_IS_PENDINGCLEAR: return "ZRTP_EVENT_IS_PENDINGCLEAR"; + case ZRTP_EVENT_NO_ZRTP: return "ZRTP_EVENT_NO_ZRTP"; + case ZRTP_EVENT_NO_ZRTP_QUICK: return "ZRTP_EVENT_NO_ZRTP_QUICK"; + case ZRTP_EVENT_IS_CLIENT_ENROLLMENT: return "ZRTP_EVENT_IS_CLIENT_ENROLLMENT"; + case ZRTP_EVENT_NEW_USER_ENROLLED: return "ZRTP_EVENT_NEW_USER_ENROLLED"; + case ZRTP_EVENT_USER_ALREADY_ENROLLED: return "ZRTP_EVENT_USER_ALREADY_ENROLLED"; + case ZRTP_EVENT_USER_UNENROLLED: return "ZRTP_EVENT_USER_UNENROLLED"; + case ZRTP_EVENT_LOCAL_SAS_UPDATED: return "ZRTP_EVENT_LOCAL_SAS_UPDATED"; + case ZRTP_EVENT_REMOTE_SAS_UPDATED: return "ZRTP_EVENT_REMOTE_SAS_UPDATED"; + case ZRTP_EVENT_IS_SECURE: return "ZRTP_EVENT_IS_SECURE"; + case ZRTP_EVENT_IS_SECURE_DONE: return "ZRTP_EVENT_IS_SECURE_DONE"; + case ZRTP_EVENT_IS_PASSIVE_RESTRICTION: return "ZRTP_EVENT_IS_PASSIVE_RESTRICTION"; + case ZRTP_EVENT_COUNT: return "ZRTP_EVENT_COUNT"; // ? + default: return "UNKNOWN_ZRTP_PROTOCOL_EVENT"; + } +}; + +const char* zrtp_security_event_desc(zrtp_security_event_t e) { + switch (e) { + case ZRTP_EVENT_PROTOCOL_ERROR: return "ZRTP_EVENT_PROTOCOL_ERROR"; + case ZRTP_EVENT_WRONG_SIGNALING_HASH: return "ZRTP_EVENT_WRONG_SIGNALING_HASH"; + case ZRTP_EVENT_WRONG_MESSAGE_HMAC: return "ZRTP_EVENT_WRONG_MESSAGE_HMAC"; + case ZRTP_EVENT_MITM_WARNING: return "ZRTP_EVENT_MITM_WARNING"; + default: return "UNKNOWN_ZRTP_SECURITY_EVENT"; + } +} + #endif diff --git a/core/AmZRTP.h b/core/AmZRTP.h index 15e2f47..5fa4129 100644 --- a/core/AmZRTP.h +++ b/core/AmZRTP.h @@ -86,6 +86,10 @@ struct AmZRTPSessionState { zrtp_session_t* zrtp_session; // ZRTP session zrtp_stream_t* zrtp_audio; // ZRTP stream for audio }; + +const char* zrtp_protocol_event_desc(zrtp_protocol_event_t e); +const char* zrtp_security_event_desc(zrtp_security_event_t e); + #if defined(__cplusplus) extern "C" { _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
