• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
GetProxyForUrl(const char * agent,const char * url,rtc::ProxyInfo * proxy)53   virtual bool GetProxyForUrl(const char* agent, const char* url,
54                               rtc::ProxyInfo* proxy) {
55     return GetProxySettingsForUrl(agent, url, proxy, true);
56   }
57   enum { MSG_TIMEOUT = SignalThread::ST_MSG_FIRST_AVAILABLE,
58          MSG_UNRESOLVABLE,
59          ADP_MSG_FIRST_AVAILABLE};
60 
61  protected:
62   virtual ~AutoDetectProxy();
63 
64   // SignalThread Interface
65   virtual void DoWork();
66   virtual void OnMessage(Message *msg);
67 
68   void Next();
69   void Complete(ProxyType type);
70 
71   void OnConnectEvent(AsyncSocket * socket);
72   void OnReadEvent(AsyncSocket * socket);
73   void OnCloseEvent(AsyncSocket * socket, int error);
74   void OnResolveResult(AsyncResolverInterface* resolver);
75   bool DoConnect();
76 
77  private:
78   std::string agent_;
79   std::string server_url_;
80   ProxyInfo proxy_;
81   AsyncResolverInterface* resolver_;
82   AsyncSocket* socket_;
83   int next_;
84 
85   DISALLOW_IMPLICIT_CONSTRUCTORS(AutoDetectProxy);
86 };
87 
88 }  // namespace rtc
89 
90 #endif  // WEBRTC_BASE_AUTODETECTPROXY_H_
91