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_AUTODETECTPROXY_H_ 12 #define WEBRTC_BASE_AUTODETECTPROXY_H_ 13 14 #include <string> 15 16 #include "webrtc/base/constructormagic.h" 17 #include "webrtc/base/cryptstring.h" 18 #include "webrtc/base/proxydetect.h" 19 #include "webrtc/base/proxyinfo.h" 20 #include "webrtc/base/signalthread.h" 21 22 namespace rtc { 23 24 /////////////////////////////////////////////////////////////////////////////// 25 // AutoDetectProxy 26 /////////////////////////////////////////////////////////////////////////////// 27 28 class AsyncResolverInterface; 29 class AsyncSocket; 30 31 class AutoDetectProxy : public SignalThread { 32 public: 33 explicit AutoDetectProxy(const std::string& user_agent); 34 proxy()35 const ProxyInfo& proxy() const { return proxy_; } 36 set_server_url(const std::string & url)37 void set_server_url(const std::string& url) { 38 server_url_ = url; 39 } set_proxy(const SocketAddress & proxy)40 void set_proxy(const SocketAddress& proxy) { 41 proxy_.type = PROXY_UNKNOWN; 42 proxy_.address = proxy; 43 } set_auth_info(bool use_auth,const std::string & username,const CryptString & password)44 void set_auth_info(bool use_auth, const std::string& username, 45 const CryptString& password) { 46 if (use_auth) { 47 proxy_.username = username; 48 proxy_.password = password; 49 } 50 } 51 // Default implementation of GetProxySettingsForUrl. Override for special 52 // implementation. 53 virtual bool GetProxyForUrl(const char* agent, 54 const char* url, 55 rtc::ProxyInfo* proxy); 56 enum { MSG_TIMEOUT = SignalThread::ST_MSG_FIRST_AVAILABLE, 57 MSG_UNRESOLVABLE, 58 ADP_MSG_FIRST_AVAILABLE}; 59 60 protected: 61 ~AutoDetectProxy() override; 62 63 // SignalThread Interface 64 void DoWork() override; 65 void OnMessage(Message* msg) override; 66 67 void Next(); 68 void Complete(ProxyType type); 69 70 void OnConnectEvent(AsyncSocket * socket); 71 void OnReadEvent(AsyncSocket * socket); 72 void OnCloseEvent(AsyncSocket * socket, int error); 73 void OnResolveResult(AsyncResolverInterface* resolver); 74 bool DoConnect(); 75 76 private: 77 std::string agent_; 78 std::string server_url_; 79 ProxyInfo proxy_; 80 AsyncResolverInterface* resolver_; 81 AsyncSocket* socket_; 82 int next_; 83 84 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AutoDetectProxy); 85 }; 86 87 } // namespace rtc 88 89 #endif // WEBRTC_BASE_AUTODETECTPROXY_H_ 90