| Index: webrtc/base/openssladapter.cc
|
| diff --git a/webrtc/base/openssladapter.cc b/webrtc/base/openssladapter.cc
|
| index 264dae9e28b623db4ea6145bcf12af3b9fbbb240..818e326940ff25900fae7736d79c5318fecca16c 100644
|
| --- a/webrtc/base/openssladapter.cc
|
| +++ b/webrtc/base/openssladapter.cc
|
| @@ -40,34 +40,6 @@
|
| #include "webrtc/base/stringutils.h"
|
| #include "webrtc/base/thread.h"
|
|
|
| -#ifndef OPENSSL_IS_BORINGSSL
|
| -
|
| -// TODO: Use a nicer abstraction for mutex.
|
| -
|
| -#if defined(WEBRTC_WIN)
|
| - #define MUTEX_TYPE HANDLE
|
| - #define MUTEX_SETUP(x) (x) = CreateMutex(NULL, FALSE, NULL)
|
| - #define MUTEX_CLEANUP(x) CloseHandle(x)
|
| - #define MUTEX_LOCK(x) WaitForSingleObject((x), INFINITE)
|
| - #define MUTEX_UNLOCK(x) ReleaseMutex(x)
|
| - #define THREAD_ID GetCurrentThreadId()
|
| -#elif defined(WEBRTC_POSIX)
|
| - #define MUTEX_TYPE pthread_mutex_t
|
| - #define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL)
|
| - #define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x))
|
| - #define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
|
| - #define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
|
| - #define THREAD_ID pthread_self()
|
| -#else
|
| - #error You must define mutex operations appropriate for your platform!
|
| -#endif
|
| -
|
| -struct CRYPTO_dynlock_value {
|
| - MUTEX_TYPE mutex;
|
| -};
|
| -
|
| -#endif // #ifndef OPENSSL_IS_BORINGSSL
|
| -
|
| //////////////////////////////////////////////////////////////////////
|
| // SocketBIO
|
| //////////////////////////////////////////////////////////////////////
|
| @@ -177,105 +149,14 @@ static long socket_ctrl(BIO* b, int cmd, long num, void* ptr) {
|
|
|
| namespace rtc {
|
|
|
| -#ifndef OPENSSL_IS_BORINGSSL
|
| -
|
| -// This array will store all of the mutexes available to OpenSSL.
|
| -static MUTEX_TYPE* mutex_buf = NULL;
|
| -
|
| -static void locking_function(int mode, int n, const char * file, int line) {
|
| - if (mode & CRYPTO_LOCK) {
|
| - MUTEX_LOCK(mutex_buf[n]);
|
| - } else {
|
| - MUTEX_UNLOCK(mutex_buf[n]);
|
| - }
|
| -}
|
| -
|
| -static unsigned long id_function() { // NOLINT
|
| - // Use old-style C cast because THREAD_ID's type varies with the platform,
|
| - // in some cases requiring static_cast, and in others requiring
|
| - // reinterpret_cast.
|
| - return (unsigned long)THREAD_ID; // NOLINT
|
| -}
|
| -
|
| -static CRYPTO_dynlock_value* dyn_create_function(const char* file, int line) {
|
| - CRYPTO_dynlock_value* value = new CRYPTO_dynlock_value;
|
| - if (!value)
|
| - return NULL;
|
| - MUTEX_SETUP(value->mutex);
|
| - return value;
|
| -}
|
| -
|
| -static void dyn_lock_function(int mode, CRYPTO_dynlock_value* l,
|
| - const char* file, int line) {
|
| - if (mode & CRYPTO_LOCK) {
|
| - MUTEX_LOCK(l->mutex);
|
| - } else {
|
| - MUTEX_UNLOCK(l->mutex);
|
| - }
|
| -}
|
| -
|
| -static void dyn_destroy_function(CRYPTO_dynlock_value* l,
|
| - const char* file, int line) {
|
| - MUTEX_CLEANUP(l->mutex);
|
| - delete l;
|
| -}
|
| -
|
| -#endif // #ifndef OPENSSL_IS_BORINGSSL
|
| -
|
| VerificationCallback OpenSSLAdapter::custom_verify_callback_ = NULL;
|
|
|
| bool OpenSSLAdapter::InitializeSSL(VerificationCallback callback) {
|
| - if (!InitializeSSLThread() || !SSL_library_init())
|
| - return false;
|
| -#if !defined(ADDRESS_SANITIZER) || !defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
|
| - // Loading the error strings crashes mac_asan. Omit this debugging aid there.
|
| - SSL_load_error_strings();
|
| -#endif
|
| - ERR_load_BIO_strings();
|
| - OpenSSL_add_all_algorithms();
|
| - RAND_poll();
|
| + CRYPTO_library_init();
|
| custom_verify_callback_ = callback;
|
| return true;
|
| }
|
|
|
| -bool OpenSSLAdapter::InitializeSSLThread() {
|
| - // BoringSSL is doing the locking internally, so the callbacks are not used
|
| - // in this case (and are no-ops anyways).
|
| -#ifndef OPENSSL_IS_BORINGSSL
|
| - mutex_buf = new MUTEX_TYPE[CRYPTO_num_locks()];
|
| - if (!mutex_buf)
|
| - return false;
|
| - for (int i = 0; i < CRYPTO_num_locks(); ++i)
|
| - MUTEX_SETUP(mutex_buf[i]);
|
| -
|
| - // we need to cast our id_function to return an unsigned long -- pthread_t is
|
| - // a pointer
|
| - CRYPTO_set_id_callback(id_function);
|
| - CRYPTO_set_locking_callback(locking_function);
|
| - CRYPTO_set_dynlock_create_callback(dyn_create_function);
|
| - CRYPTO_set_dynlock_lock_callback(dyn_lock_function);
|
| - CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function);
|
| -#endif // #ifndef OPENSSL_IS_BORINGSSL
|
| - return true;
|
| -}
|
| -
|
| -bool OpenSSLAdapter::CleanupSSL() {
|
| -#ifndef OPENSSL_IS_BORINGSSL
|
| - if (!mutex_buf)
|
| - return false;
|
| - CRYPTO_set_id_callback(NULL);
|
| - CRYPTO_set_locking_callback(NULL);
|
| - CRYPTO_set_dynlock_create_callback(NULL);
|
| - CRYPTO_set_dynlock_lock_callback(NULL);
|
| - CRYPTO_set_dynlock_destroy_callback(NULL);
|
| - for (int i = 0; i < CRYPTO_num_locks(); ++i)
|
| - MUTEX_CLEANUP(mutex_buf[i]);
|
| - delete [] mutex_buf;
|
| - mutex_buf = NULL;
|
| -#endif // #ifndef OPENSSL_IS_BORINGSSL
|
| - return true;
|
| -}
|
| -
|
| OpenSSLAdapter::OpenSSLAdapter(AsyncSocket* socket)
|
| : SSLAdapter(socket),
|
| state_(SSL_NONE),
|
|
|