* #35924 (zrtp): switch to libzrtpcpp
diff --git a/jni/libzrtp/sources/common/MutexClass.cpp b/jni/libzrtp/sources/common/MutexClass.cpp
new file mode 100644
index 0000000..ebf8e4e
--- /dev/null
+++ b/jni/libzrtp/sources/common/MutexClass.cpp
@@ -0,0 +1,128 @@
+//
+// MutexClass.cpp: implementation file
+//
+// Copyright (C) Walter E. Capers.  All rights reserved
+//
+// This source is free to use as you like.  If you make
+// any changes please keep me in the loop.  Email them to
+// walt.capers@comcast.net.
+//
+// PURPOSE:
+//
+//  To implement mutexes as a C++ object
+//
+// REVISIONS
+// =======================================================
+// Date: 10.25.07        
+// Name: Walter E. Capers
+// Description: File creation
+//
+// Date:
+// Name:
+// Description:
+//
+//
+#include "Thread.h"
+
+#include <iostream>
+using namespace std;
+
+CMutexClass::CMutexClass(void)
+:m_bCreated(TRUE)
+{
+#ifdef WINDOWS
+   m_mutex = CreateMutex(NULL,FALSE,NULL);
+   if( !m_mutex ) m_bCreated = FALSE;
+#else
+   pthread_mutexattr_t mattr;
+
+   pthread_mutexattr_init( &mattr );
+   pthread_mutex_init(&m_mutex,&mattr);
+
+#endif
+   memset(&m_owner,0,sizeof(ThreadId_t));
+
+}
+
+CMutexClass::~CMutexClass(void)
+{
+#ifdef WINDOWS
+	WaitForSingleObject(m_mutex,INFINITE);
+	CloseHandle(m_mutex);
+#else
+	pthread_mutex_lock(&m_mutex);
+	pthread_mutex_unlock(&m_mutex); 
+	pthread_mutex_destroy(&m_mutex);
+#endif
+}
+
+/**
+ *
+ * Lock
+ * the same thread can not lock the same mutex
+ * more than once
+ *
+ **/
+void
+CMutexClass::Lock()
+{
+	ThreadId_t id = CThread::ThreadId();
+	try {
+		if(CThread::ThreadIdsEqual(&m_owner,&id) )
+		    throw "\n\tthe same thread can not acquire a mutex twice!\n"; // the mutex is already locked by this thread
+#ifdef WINDOWS
+		WaitForSingleObject(m_mutex,INFINITE);
+#else
+		pthread_mutex_lock(&m_mutex);
+#endif
+		m_owner = CThread::ThreadId();
+	}
+	catch( char *psz )
+	{
+#ifdef WINDOWS
+		MessageBoxA(NULL,&psz[2],"Fatal exception CMutexClass::Lock",MB_ICONHAND);
+		exit(-1);
+#else
+		cerr << "Fatal exception CMutexClass::Lock : " << psz;
+#endif
+
+
+	}
+
+}
+
+/**
+ *
+ * Unlock
+ * releases a mutex.  only the thread that acquires
+ * the mutex can release it.
+ *
+ **/
+void 
+CMutexClass::Unlock()
+{
+	ThreadId_t id = CThread::ThreadId();
+	try 
+	{
+	  if( ! CThread::ThreadIdsEqual(&id,&m_owner) )
+		throw "\n\tonly the thread that acquires a mutex can release it!"; 
+
+	   memset(&m_owner,0,sizeof(ThreadId_t));
+#ifdef WINDOWS
+	   ReleaseMutex(m_mutex);
+#else
+	   pthread_mutex_unlock(&m_mutex);
+#endif
+	}
+	catch ( char *psz)
+	{
+#ifdef WINDOWS
+		MessageBoxA(NULL,&psz[2],"Fatal exception CMutexClass::Unlock",MB_ICONHAND);
+		exit(-1);
+#else
+		cerr << "Fatal exception CMutexClass::Unlock : " << psz;
+#endif
+
+	}
+}
+