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

Reply via email to