1 /* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_BASE_SSLADAPTER_H_ 12 #define WEBRTC_BASE_SSLADAPTER_H_ 13 14 #include "webrtc/base/asyncsocket.h" 15 #include "webrtc/base/sslstreamadapter.h" 16 17 namespace rtc { 18 19 /////////////////////////////////////////////////////////////////////////////// 20 21 class SSLAdapter : public AsyncSocketAdapter { 22 public: SSLAdapter(AsyncSocket * socket)23 explicit SSLAdapter(AsyncSocket* socket) 24 : AsyncSocketAdapter(socket), ignore_bad_cert_(false) { } 25 ignore_bad_cert()26 bool ignore_bad_cert() const { return ignore_bad_cert_; } set_ignore_bad_cert(bool ignore)27 void set_ignore_bad_cert(bool ignore) { ignore_bad_cert_ = ignore; } 28 29 // Do DTLS or TLS (default is TLS, if unspecified) 30 virtual void SetMode(SSLMode mode) = 0; 31 32 // StartSSL returns 0 if successful. 33 // If StartSSL is called while the socket is closed or connecting, the SSL 34 // negotiation will begin as soon as the socket connects. 35 virtual int StartSSL(const char* hostname, bool restartable) = 0; 36 37 // Create the default SSL adapter for this platform. On failure, returns NULL 38 // and deletes |socket|. Otherwise, the returned SSLAdapter takes ownership 39 // of |socket|. 40 static SSLAdapter* Create(AsyncSocket* socket); 41 42 private: 43 // If true, the server certificate need not match the configured hostname. 44 bool ignore_bad_cert_; 45 }; 46 47 /////////////////////////////////////////////////////////////////////////////// 48 49 typedef bool (*VerificationCallback)(void* cert); 50 51 // Call this on the main thread, before using SSL. 52 // Call CleanupSSLThread when finished with SSL. 53 bool InitializeSSL(VerificationCallback callback = NULL); 54 55 // Call to initialize additional threads. 56 bool InitializeSSLThread(); 57 58 // Call to cleanup additional threads, and also the main thread. 59 bool CleanupSSL(); 60 61 /////////////////////////////////////////////////////////////////////////////// 62 63 } // namespace rtc 64 65 #endif // WEBRTC_BASE_SSLADAPTER_H_ 66