/* * libjingle * Copyright 2007, Google Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef TALK_BASE_SSLSOCKETFACTORY_H__ #define TALK_BASE_SSLSOCKETFACTORY_H__ #include "talk/base/proxyinfo.h" #include "talk/base/socketserver.h" namespace talk_base { /////////////////////////////////////////////////////////////////////////////// // SslSocketFactory /////////////////////////////////////////////////////////////////////////////// class SslSocketFactory : public SocketFactory { public: SslSocketFactory(SocketFactory* factory, const std::string& user_agent) : factory_(factory), agent_(user_agent), autodetect_proxy_(true), force_connect_(false), logging_level_(LS_VERBOSE), binary_mode_(false), ignore_bad_cert_(false) { } void SetAutoDetectProxy() { autodetect_proxy_ = true; } void SetForceConnect(bool force) { force_connect_ = force; } void SetProxy(const ProxyInfo& proxy) { autodetect_proxy_ = false; proxy_ = proxy; } bool autodetect_proxy() const { return autodetect_proxy_; } const ProxyInfo& proxy() const { return proxy_; } void UseSSL(const char* hostname) { hostname_ = hostname; } void DisableSSL() { hostname_.clear(); } void SetIgnoreBadCert(bool ignore) { ignore_bad_cert_ = ignore; } bool ignore_bad_cert() const { return ignore_bad_cert_; } void SetLogging(LoggingSeverity level, const std::string& label, bool binary_mode = false) { logging_level_ = level; logging_label_ = label; binary_mode_ = binary_mode; } // SocketFactory Interface virtual Socket* CreateSocket(int type); virtual Socket* CreateSocket(int family, int type); virtual AsyncSocket* CreateAsyncSocket(int type); virtual AsyncSocket* CreateAsyncSocket(int family, int type); private: friend class ProxySocketAdapter; AsyncSocket* CreateProxySocket(const ProxyInfo& proxy, int family, int type); SocketFactory* factory_; std::string agent_; bool autodetect_proxy_, force_connect_; ProxyInfo proxy_; std::string hostname_, logging_label_; LoggingSeverity logging_level_; bool binary_mode_; bool ignore_bad_cert_; }; /////////////////////////////////////////////////////////////////////////////// } // namespace talk_base #endif // TALK_BASE_SSLSOCKETFACTORY_H__