/* * Copyright 2004 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_BASE_SSLADAPTER_H_ #define WEBRTC_BASE_SSLADAPTER_H_ #include "webrtc/base/asyncsocket.h" #include "webrtc/base/sslstreamadapter.h" namespace rtc { /////////////////////////////////////////////////////////////////////////////// class SSLAdapter : public AsyncSocketAdapter { public: explicit SSLAdapter(AsyncSocket* socket) : AsyncSocketAdapter(socket), ignore_bad_cert_(false) { } bool ignore_bad_cert() const { return ignore_bad_cert_; } void set_ignore_bad_cert(bool ignore) { ignore_bad_cert_ = ignore; } // Do DTLS or TLS (default is TLS, if unspecified) virtual void SetMode(SSLMode mode) = 0; // StartSSL returns 0 if successful. // If StartSSL is called while the socket is closed or connecting, the SSL // negotiation will begin as soon as the socket connects. virtual int StartSSL(const char* hostname, bool restartable) = 0; // Create the default SSL adapter for this platform. On failure, returns NULL // and deletes |socket|. Otherwise, the returned SSLAdapter takes ownership // of |socket|. static SSLAdapter* Create(AsyncSocket* socket); private: // If true, the server certificate need not match the configured hostname. bool ignore_bad_cert_; }; /////////////////////////////////////////////////////////////////////////////// typedef bool (*VerificationCallback)(void* cert); // Call this on the main thread, before using SSL. // Call CleanupSSLThread when finished with SSL. bool InitializeSSL(VerificationCallback callback = NULL); // Call to initialize additional threads. bool InitializeSSLThread(); // Call to cleanup additional threads, and also the main thread. bool CleanupSSL(); /////////////////////////////////////////////////////////////////////////////// } // namespace rtc #endif // WEBRTC_BASE_SSLADAPTER_H_