Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(153)

Side by Side Diff: net/socket/socks5_client_socket_unittest.cc

Issue 8824006: Migrate net/socket/socket.h, net/socket/stream_socket.h to base::Bind(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/socket/socks5_client_socket.cc ('k') | net/socket/socks_client_socket.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/socket/socks5_client_socket.h" 5 #include "net/socket/socks5_client_socket.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "net/base/address_list.h" 10 #include "net/base/address_list.h"
(...skipping 29 matching lines...) Expand all
40 NetLog* net_log); 40 NetLog* net_log);
41 41
42 virtual void SetUp(); 42 virtual void SetUp();
43 43
44 protected: 44 protected:
45 const uint16 kNwPort; 45 const uint16 kNwPort;
46 CapturingNetLog net_log_; 46 CapturingNetLog net_log_;
47 scoped_ptr<SOCKS5ClientSocket> user_sock_; 47 scoped_ptr<SOCKS5ClientSocket> user_sock_;
48 AddressList address_list_; 48 AddressList address_list_;
49 StreamSocket* tcp_sock_; 49 StreamSocket* tcp_sock_;
50 TestOldCompletionCallback callback_; 50 TestCompletionCallback callback_;
51 scoped_ptr<MockHostResolver> host_resolver_; 51 scoped_ptr<MockHostResolver> host_resolver_;
52 scoped_ptr<SocketDataProvider> data_; 52 scoped_ptr<SocketDataProvider> data_;
53 53
54 private: 54 private:
55 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest); 55 DISALLOW_COPY_AND_ASSIGN(SOCKS5ClientSocketTest);
56 }; 56 };
57 57
58 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest() 58 SOCKS5ClientSocketTest::SOCKS5ClientSocketTest()
59 : kNwPort(htons(80)), 59 : kNwPort(htons(80)),
60 net_log_(CapturingNetLog::kUnbounded), 60 net_log_(CapturingNetLog::kUnbounded),
(...skipping 15 matching lines...) Expand all
76 } 76 }
77 77
78 SOCKS5ClientSocket* SOCKS5ClientSocketTest::BuildMockSocket( 78 SOCKS5ClientSocket* SOCKS5ClientSocketTest::BuildMockSocket(
79 MockRead reads[], 79 MockRead reads[],
80 size_t reads_count, 80 size_t reads_count,
81 MockWrite writes[], 81 MockWrite writes[],
82 size_t writes_count, 82 size_t writes_count,
83 const std::string& hostname, 83 const std::string& hostname,
84 int port, 84 int port,
85 NetLog* net_log) { 85 NetLog* net_log) {
86 TestOldCompletionCallback callback; 86 TestCompletionCallback callback;
87 data_.reset(new StaticSocketDataProvider(reads, reads_count, 87 data_.reset(new StaticSocketDataProvider(reads, reads_count,
88 writes, writes_count)); 88 writes, writes_count));
89 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get()); 89 tcp_sock_ = new MockTCPClientSocket(address_list_, net_log, data_.get());
90 90
91 int rv = tcp_sock_->Connect(&callback); 91 int rv = tcp_sock_->Connect(callback.callback());
92 EXPECT_EQ(ERR_IO_PENDING, rv); 92 EXPECT_EQ(ERR_IO_PENDING, rv);
93 rv = callback.WaitForResult(); 93 rv = callback.WaitForResult();
94 EXPECT_EQ(OK, rv); 94 EXPECT_EQ(OK, rv);
95 EXPECT_TRUE(tcp_sock_->IsConnected()); 95 EXPECT_TRUE(tcp_sock_->IsConnected());
96 96
97 return new SOCKS5ClientSocket(tcp_sock_, 97 return new SOCKS5ClientSocket(tcp_sock_,
98 HostResolver::RequestInfo(HostPortPair(hostname, port))); 98 HostResolver::RequestInfo(HostPortPair(hostname, port)));
99 } 99 }
100 100
101 // Tests a complete SOCKS5 handshake and the disconnection. 101 // Tests a complete SOCKS5 handshake and the disconnection.
(...skipping 22 matching lines...) Expand all
124 MockRead(true, payload_read.data(), payload_read.size()) }; 124 MockRead(true, payload_read.data(), payload_read.size()) };
125 125
126 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 126 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
127 data_writes, arraysize(data_writes), 127 data_writes, arraysize(data_writes),
128 "localhost", 80, &net_log_)); 128 "localhost", 80, &net_log_));
129 129
130 // At this state the TCP connection is completed but not the SOCKS handshake. 130 // At this state the TCP connection is completed but not the SOCKS handshake.
131 EXPECT_TRUE(tcp_sock_->IsConnected()); 131 EXPECT_TRUE(tcp_sock_->IsConnected());
132 EXPECT_FALSE(user_sock_->IsConnected()); 132 EXPECT_FALSE(user_sock_->IsConnected());
133 133
134 int rv = user_sock_->Connect(&callback_); 134 int rv = user_sock_->Connect(callback_.callback());
135 EXPECT_EQ(ERR_IO_PENDING, rv); 135 EXPECT_EQ(ERR_IO_PENDING, rv);
136 EXPECT_FALSE(user_sock_->IsConnected()); 136 EXPECT_FALSE(user_sock_->IsConnected());
137 137
138 net::CapturingNetLog::EntryList net_log_entries; 138 net::CapturingNetLog::EntryList net_log_entries;
139 net_log_.GetEntries(&net_log_entries); 139 net_log_.GetEntries(&net_log_entries);
140 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 140 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0,
141 NetLog::TYPE_SOCKS5_CONNECT)); 141 NetLog::TYPE_SOCKS5_CONNECT));
142 142
143 rv = callback_.WaitForResult(); 143 rv = callback_.WaitForResult();
144 144
145 EXPECT_EQ(OK, rv); 145 EXPECT_EQ(OK, rv);
146 EXPECT_TRUE(user_sock_->IsConnected()); 146 EXPECT_TRUE(user_sock_->IsConnected());
147 147
148 net_log_.GetEntries(&net_log_entries); 148 net_log_.GetEntries(&net_log_entries);
149 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 149 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1,
150 NetLog::TYPE_SOCKS5_CONNECT)); 150 NetLog::TYPE_SOCKS5_CONNECT));
151 151
152 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size())); 152 scoped_refptr<IOBuffer> buffer(new IOBuffer(payload_write.size()));
153 memcpy(buffer->data(), payload_write.data(), payload_write.size()); 153 memcpy(buffer->data(), payload_write.data(), payload_write.size());
154 rv = user_sock_->Write(buffer, payload_write.size(), &callback_); 154 rv = user_sock_->Write(buffer, payload_write.size(), callback_.callback());
155 EXPECT_EQ(ERR_IO_PENDING, rv); 155 EXPECT_EQ(ERR_IO_PENDING, rv);
156 rv = callback_.WaitForResult(); 156 rv = callback_.WaitForResult();
157 EXPECT_EQ(static_cast<int>(payload_write.size()), rv); 157 EXPECT_EQ(static_cast<int>(payload_write.size()), rv);
158 158
159 buffer = new IOBuffer(payload_read.size()); 159 buffer = new IOBuffer(payload_read.size());
160 rv = user_sock_->Read(buffer, payload_read.size(), &callback_); 160 rv = user_sock_->Read(buffer, payload_read.size(), callback_.callback());
161 EXPECT_EQ(ERR_IO_PENDING, rv); 161 EXPECT_EQ(ERR_IO_PENDING, rv);
162 rv = callback_.WaitForResult(); 162 rv = callback_.WaitForResult();
163 EXPECT_EQ(static_cast<int>(payload_read.size()), rv); 163 EXPECT_EQ(static_cast<int>(payload_read.size()), rv);
164 EXPECT_EQ(payload_read, std::string(buffer->data(), payload_read.size())); 164 EXPECT_EQ(payload_read, std::string(buffer->data(), payload_read.size()));
165 165
166 user_sock_->Disconnect(); 166 user_sock_->Disconnect();
167 EXPECT_FALSE(tcp_sock_->IsConnected()); 167 EXPECT_FALSE(tcp_sock_->IsConnected());
168 EXPECT_FALSE(user_sock_->IsConnected()); 168 EXPECT_FALSE(user_sock_->IsConnected());
169 } 169 }
170 170
(...skipping 19 matching lines...) Expand all
190 }; 190 };
191 MockRead data_reads[] = { 191 MockRead data_reads[] = {
192 MockRead(false, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 192 MockRead(false, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
193 MockRead(false, kSOCKS5OkResponse, kSOCKS5OkResponseLength) 193 MockRead(false, kSOCKS5OkResponse, kSOCKS5OkResponseLength)
194 }; 194 };
195 195
196 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 196 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
197 data_writes, arraysize(data_writes), 197 data_writes, arraysize(data_writes),
198 hostname, 80, NULL)); 198 hostname, 80, NULL));
199 199
200 int rv = user_sock_->Connect(&callback_); 200 int rv = user_sock_->Connect(callback_.callback());
201 EXPECT_EQ(OK, rv); 201 EXPECT_EQ(OK, rv);
202 EXPECT_TRUE(user_sock_->IsConnected()); 202 EXPECT_TRUE(user_sock_->IsConnected());
203 203
204 user_sock_->Disconnect(); 204 user_sock_->Disconnect();
205 EXPECT_FALSE(user_sock_->IsConnected()); 205 EXPECT_FALSE(user_sock_->IsConnected());
206 } 206 }
207 } 207 }
208 208
209 // Test that we fail trying to connect to a hosname longer than 255 bytes. 209 // Test that we fail trying to connect to a hosname longer than 255 bytes.
210 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) { 210 TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) {
211 // Create a string of length 256, where each character is 'x'. 211 // Create a string of length 256, where each character is 'x'.
212 std::string large_host_name; 212 std::string large_host_name;
213 std::fill_n(std::back_inserter(large_host_name), 256, 'x'); 213 std::fill_n(std::back_inserter(large_host_name), 256, 'x');
214 214
215 // Create a SOCKS socket, with mock transport socket. 215 // Create a SOCKS socket, with mock transport socket.
216 MockWrite data_writes[] = {MockWrite()}; 216 MockWrite data_writes[] = {MockWrite()};
217 MockRead data_reads[] = {MockRead()}; 217 MockRead data_reads[] = {MockRead()};
218 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 218 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
219 data_writes, arraysize(data_writes), 219 data_writes, arraysize(data_writes),
220 large_host_name, 80, NULL)); 220 large_host_name, 80, NULL));
221 221
222 // Try to connect -- should fail (without having read/written anything to 222 // Try to connect -- should fail (without having read/written anything to
223 // the transport socket first) because the hostname is too long. 223 // the transport socket first) because the hostname is too long.
224 TestOldCompletionCallback callback; 224 TestCompletionCallback callback;
225 int rv = user_sock_->Connect(&callback); 225 int rv = user_sock_->Connect(callback.callback());
226 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); 226 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv);
227 } 227 }
228 228
229 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) { 229 TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) {
230 const std::string hostname = "www.google.com"; 230 const std::string hostname = "www.google.com";
231 231
232 const char kOkRequest[] = { 232 const char kOkRequest[] = {
233 0x05, // Version 233 0x05, // Version
234 0x01, // Command (CONNECT) 234 0x01, // Command (CONNECT)
235 0x00, // Reserved. 235 0x00, // Reserved.
(...skipping 11 matching lines...) Expand all
247 MockWrite data_writes[] = { 247 MockWrite data_writes[] = {
248 MockWrite(true, arraysize(partial1)), 248 MockWrite(true, arraysize(partial1)),
249 MockWrite(true, partial2, arraysize(partial2)), 249 MockWrite(true, partial2, arraysize(partial2)),
250 MockWrite(true, kOkRequest, arraysize(kOkRequest)) }; 250 MockWrite(true, kOkRequest, arraysize(kOkRequest)) };
251 MockRead data_reads[] = { 251 MockRead data_reads[] = {
252 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 252 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
253 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; 253 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) };
254 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 254 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
255 data_writes, arraysize(data_writes), 255 data_writes, arraysize(data_writes),
256 hostname, 80, &net_log_)); 256 hostname, 80, &net_log_));
257 int rv = user_sock_->Connect(&callback_); 257 int rv = user_sock_->Connect(callback_.callback());
258 EXPECT_EQ(ERR_IO_PENDING, rv); 258 EXPECT_EQ(ERR_IO_PENDING, rv);
259 259
260 net::CapturingNetLog::EntryList net_log_entries; 260 net::CapturingNetLog::EntryList net_log_entries;
261 net_log_.GetEntries(&net_log_entries); 261 net_log_.GetEntries(&net_log_entries);
262 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 262 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0,
263 NetLog::TYPE_SOCKS5_CONNECT)); 263 NetLog::TYPE_SOCKS5_CONNECT));
264 264
265 rv = callback_.WaitForResult(); 265 rv = callback_.WaitForResult();
266 EXPECT_EQ(OK, rv); 266 EXPECT_EQ(OK, rv);
267 EXPECT_TRUE(user_sock_->IsConnected()); 267 EXPECT_TRUE(user_sock_->IsConnected());
(...skipping 10 matching lines...) Expand all
278 MockWrite data_writes[] = { 278 MockWrite data_writes[] = {
279 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), 279 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
280 MockWrite(true, kOkRequest, arraysize(kOkRequest)) }; 280 MockWrite(true, kOkRequest, arraysize(kOkRequest)) };
281 MockRead data_reads[] = { 281 MockRead data_reads[] = {
282 MockRead(true, partial1, arraysize(partial1)), 282 MockRead(true, partial1, arraysize(partial1)),
283 MockRead(true, partial2, arraysize(partial2)), 283 MockRead(true, partial2, arraysize(partial2)),
284 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; 284 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) };
285 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 285 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
286 data_writes, arraysize(data_writes), 286 data_writes, arraysize(data_writes),
287 hostname, 80, &net_log_)); 287 hostname, 80, &net_log_));
288 int rv = user_sock_->Connect(&callback_); 288 int rv = user_sock_->Connect(callback_.callback());
289 EXPECT_EQ(ERR_IO_PENDING, rv); 289 EXPECT_EQ(ERR_IO_PENDING, rv);
290 290
291 net::CapturingNetLog::EntryList net_log_entries; 291 net::CapturingNetLog::EntryList net_log_entries;
292 net_log_.GetEntries(&net_log_entries); 292 net_log_.GetEntries(&net_log_entries);
293 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 293 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0,
294 NetLog::TYPE_SOCKS5_CONNECT)); 294 NetLog::TYPE_SOCKS5_CONNECT));
295 rv = callback_.WaitForResult(); 295 rv = callback_.WaitForResult();
296 EXPECT_EQ(OK, rv); 296 EXPECT_EQ(OK, rv);
297 EXPECT_TRUE(user_sock_->IsConnected()); 297 EXPECT_TRUE(user_sock_->IsConnected());
298 net_log_.GetEntries(&net_log_entries); 298 net_log_.GetEntries(&net_log_entries);
299 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 299 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1,
300 NetLog::TYPE_SOCKS5_CONNECT)); 300 NetLog::TYPE_SOCKS5_CONNECT));
301 } 301 }
302 302
303 // Test for partial handshake request write. 303 // Test for partial handshake request write.
304 { 304 {
305 const int kSplitPoint = 3; // Break handshake write into two parts. 305 const int kSplitPoint = 3; // Break handshake write into two parts.
306 MockWrite data_writes[] = { 306 MockWrite data_writes[] = {
307 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength), 307 MockWrite(true, kSOCKS5GreetRequest, kSOCKS5GreetRequestLength),
308 MockWrite(true, kOkRequest, kSplitPoint), 308 MockWrite(true, kOkRequest, kSplitPoint),
309 MockWrite(true, kOkRequest + kSplitPoint, 309 MockWrite(true, kOkRequest + kSplitPoint,
310 arraysize(kOkRequest) - kSplitPoint) 310 arraysize(kOkRequest) - kSplitPoint)
311 }; 311 };
312 MockRead data_reads[] = { 312 MockRead data_reads[] = {
313 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 313 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
314 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) }; 314 MockRead(true, kSOCKS5OkResponse, kSOCKS5OkResponseLength) };
315 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 315 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
316 data_writes, arraysize(data_writes), 316 data_writes, arraysize(data_writes),
317 hostname, 80, &net_log_)); 317 hostname, 80, &net_log_));
318 int rv = user_sock_->Connect(&callback_); 318 int rv = user_sock_->Connect(callback_.callback());
319 EXPECT_EQ(ERR_IO_PENDING, rv); 319 EXPECT_EQ(ERR_IO_PENDING, rv);
320 net::CapturingNetLog::EntryList net_log_entries; 320 net::CapturingNetLog::EntryList net_log_entries;
321 net_log_.GetEntries(&net_log_entries); 321 net_log_.GetEntries(&net_log_entries);
322 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 322 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0,
323 NetLog::TYPE_SOCKS5_CONNECT)); 323 NetLog::TYPE_SOCKS5_CONNECT));
324 rv = callback_.WaitForResult(); 324 rv = callback_.WaitForResult();
325 EXPECT_EQ(OK, rv); 325 EXPECT_EQ(OK, rv);
326 EXPECT_TRUE(user_sock_->IsConnected()); 326 EXPECT_TRUE(user_sock_->IsConnected());
327 net_log_.GetEntries(&net_log_entries); 327 net_log_.GetEntries(&net_log_entries);
328 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 328 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1,
(...skipping 10 matching lines...) Expand all
339 MockRead data_reads[] = { 339 MockRead data_reads[] = {
340 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength), 340 MockRead(true, kSOCKS5GreetResponse, kSOCKS5GreetResponseLength),
341 MockRead(true, kSOCKS5OkResponse, kSplitPoint), 341 MockRead(true, kSOCKS5OkResponse, kSplitPoint),
342 MockRead(true, kSOCKS5OkResponse + kSplitPoint, 342 MockRead(true, kSOCKS5OkResponse + kSplitPoint,
343 kSOCKS5OkResponseLength - kSplitPoint) 343 kSOCKS5OkResponseLength - kSplitPoint)
344 }; 344 };
345 345
346 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads), 346 user_sock_.reset(BuildMockSocket(data_reads, arraysize(data_reads),
347 data_writes, arraysize(data_writes), 347 data_writes, arraysize(data_writes),
348 hostname, 80, &net_log_)); 348 hostname, 80, &net_log_));
349 int rv = user_sock_->Connect(&callback_); 349 int rv = user_sock_->Connect(callback_.callback());
350 EXPECT_EQ(ERR_IO_PENDING, rv); 350 EXPECT_EQ(ERR_IO_PENDING, rv);
351 net::CapturingNetLog::EntryList net_log_entries; 351 net::CapturingNetLog::EntryList net_log_entries;
352 net_log_.GetEntries(&net_log_entries); 352 net_log_.GetEntries(&net_log_entries);
353 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0, 353 EXPECT_TRUE(LogContainsBeginEvent(net_log_entries, 0,
354 NetLog::TYPE_SOCKS5_CONNECT)); 354 NetLog::TYPE_SOCKS5_CONNECT));
355 rv = callback_.WaitForResult(); 355 rv = callback_.WaitForResult();
356 EXPECT_EQ(OK, rv); 356 EXPECT_EQ(OK, rv);
357 EXPECT_TRUE(user_sock_->IsConnected()); 357 EXPECT_TRUE(user_sock_->IsConnected());
358 net_log_.GetEntries(&net_log_entries); 358 net_log_.GetEntries(&net_log_entries);
359 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1, 359 EXPECT_TRUE(LogContainsEndEvent(net_log_entries, -1,
360 NetLog::TYPE_SOCKS5_CONNECT)); 360 NetLog::TYPE_SOCKS5_CONNECT));
361 } 361 }
362 } 362 }
363 363
364 } // namespace 364 } // namespace
365 365
366 } // namespace net 366 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/socks5_client_socket.cc ('k') | net/socket/socks_client_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698