| OLD | NEW | 
 | (Empty) | 
|   1 /* |  | 
|   2  *  Copyright 2009 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 #include <memory> |  | 
|  12 #include <string> |  | 
|  13 #include "webrtc/base/gunit.h" |  | 
|  14 #include "webrtc/base/httpserver.h" |  | 
|  15 #include "webrtc/base/proxyserver.h" |  | 
|  16 #include "webrtc/base/socketadapters.h" |  | 
|  17 #include "webrtc/base/testclient.h" |  | 
|  18 #include "webrtc/base/testechoserver.h" |  | 
|  19 #include "webrtc/base/virtualsocketserver.h" |  | 
|  20  |  | 
|  21 using rtc::Socket; |  | 
|  22 using rtc::Thread; |  | 
|  23 using rtc::SocketAddress; |  | 
|  24  |  | 
|  25 static const SocketAddress kSocksProxyIntAddr("1.2.3.4", 1080); |  | 
|  26 static const SocketAddress kSocksProxyExtAddr("1.2.3.5", 0); |  | 
|  27 static const SocketAddress kHttpsProxyIntAddr("1.2.3.4", 443); |  | 
|  28 static const SocketAddress kHttpsProxyExtAddr("1.2.3.5", 0); |  | 
|  29 static const SocketAddress kBogusProxyIntAddr("1.2.3.4", 999); |  | 
|  30  |  | 
|  31 // Sets up a virtual socket server and HTTPS/SOCKS5 proxy servers. |  | 
|  32 class ProxyTest : public testing::Test { |  | 
|  33  public: |  | 
|  34   ProxyTest() : ss_(new rtc::VirtualSocketServer()), thread_(ss_.get()) { |  | 
|  35     socks_.reset(new rtc::SocksProxyServer( |  | 
|  36         ss_.get(), kSocksProxyIntAddr, ss_.get(), kSocksProxyExtAddr)); |  | 
|  37     https_.reset(new rtc::HttpListenServer()); |  | 
|  38     https_->Listen(kHttpsProxyIntAddr); |  | 
|  39   } |  | 
|  40   ~ProxyTest() {} |  | 
|  41  |  | 
|  42   rtc::SocketServer* ss() { return ss_.get(); } |  | 
|  43  |  | 
|  44  private: |  | 
|  45   std::unique_ptr<rtc::SocketServer> ss_; |  | 
|  46   rtc::AutoSocketServerThread thread_; |  | 
|  47   std::unique_ptr<rtc::SocksProxyServer> socks_; |  | 
|  48   // TODO: Make this a real HTTPS proxy server. |  | 
|  49   std::unique_ptr<rtc::HttpListenServer> https_; |  | 
|  50 }; |  | 
|  51  |  | 
|  52 // Tests whether we can use a SOCKS5 proxy to connect to a server. |  | 
|  53 TEST_F(ProxyTest, TestSocks5Connect) { |  | 
|  54   rtc::AsyncSocket* socket = |  | 
|  55       ss()->CreateAsyncSocket(kSocksProxyIntAddr.family(), SOCK_STREAM); |  | 
|  56   rtc::AsyncSocksProxySocket* proxy_socket = |  | 
|  57       new rtc::AsyncSocksProxySocket(socket, kSocksProxyIntAddr, |  | 
|  58                                            "", rtc::CryptString()); |  | 
|  59   // TODO: IPv6-ize these tests when proxy supports IPv6. |  | 
|  60  |  | 
|  61   rtc::TestEchoServer server(Thread::Current(), |  | 
|  62                                    SocketAddress(INADDR_ANY, 0)); |  | 
|  63  |  | 
|  64   std::unique_ptr<rtc::AsyncTCPSocket> packet_socket( |  | 
|  65       rtc::AsyncTCPSocket::Create(proxy_socket, SocketAddress(INADDR_ANY, 0), |  | 
|  66                                   server.address())); |  | 
|  67   EXPECT_TRUE(packet_socket != nullptr); |  | 
|  68   rtc::TestClient client(std::move(packet_socket)); |  | 
|  69  |  | 
|  70   EXPECT_EQ(Socket::CS_CONNECTING, proxy_socket->GetState()); |  | 
|  71   EXPECT_TRUE(client.CheckConnected()); |  | 
|  72   EXPECT_EQ(Socket::CS_CONNECTED, proxy_socket->GetState()); |  | 
|  73   EXPECT_EQ(server.address(), client.remote_address()); |  | 
|  74   client.Send("foo", 3); |  | 
|  75   EXPECT_TRUE(client.CheckNextPacket("foo", 3, nullptr)); |  | 
|  76   EXPECT_TRUE(client.CheckNoPacket()); |  | 
|  77 } |  | 
| OLD | NEW |