| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/socket_test_util.h" | 5 #include "net/socket/socket_test_util.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 void DumpData(const char* data, int data_len) { | 58 void DumpData(const char* data, int data_len) { |
| 59 if (logging::LOG_INFO < logging::GetMinLogLevel()) | 59 if (logging::LOG_INFO < logging::GetMinLogLevel()) |
| 60 return; | 60 return; |
| 61 DVLOG(1) << "Length: " << data_len; | 61 DVLOG(1) << "Length: " << data_len; |
| 62 const char* pfx = "Data: "; | 62 const char* pfx = "Data: "; |
| 63 if (!data || (data_len <= 0)) { | 63 if (!data || (data_len <= 0)) { |
| 64 DVLOG(1) << pfx << "<None>"; | 64 DVLOG(1) << pfx << "<None>"; |
| 65 } else { | 65 } else { |
| 66 int i; | 66 int i; |
| 67 for (i = 0; i <= (data_len - 4); i += 4) { | 67 for (i = 0; i <= (data_len - 4); i += 4) { |
| 68 DVLOG(1) << pfx | 68 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
| 69 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | |
| 70 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) | 69 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) |
| 71 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) | 70 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) |
| 72 << AsciifyHigh(data[i + 3]) << AsciifyLow(data[i + 3]) | 71 << AsciifyHigh(data[i + 3]) << AsciifyLow(data[i + 3]) << " '" |
| 73 << " '" | 72 << Asciify(data[i + 0]) << Asciify(data[i + 1]) |
| 74 << Asciify(data[i + 0]) | 73 << Asciify(data[i + 2]) << Asciify(data[i + 3]) << "'"; |
| 75 << Asciify(data[i + 1]) | |
| 76 << Asciify(data[i + 2]) | |
| 77 << Asciify(data[i + 3]) | |
| 78 << "'"; | |
| 79 pfx = " "; | 74 pfx = " "; |
| 80 } | 75 } |
| 81 // Take care of any 'trailing' bytes, if data_len was not a multiple of 4. | 76 // Take care of any 'trailing' bytes, if data_len was not a multiple of 4. |
| 82 switch (data_len - i) { | 77 switch (data_len - i) { |
| 83 case 3: | 78 case 3: |
| 84 DVLOG(1) << pfx | 79 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
| 85 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | |
| 86 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) | 80 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) |
| 87 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) | 81 << AsciifyHigh(data[i + 2]) << AsciifyLow(data[i + 2]) |
| 88 << " '" | 82 << " '" << Asciify(data[i + 0]) << Asciify(data[i + 1]) |
| 89 << Asciify(data[i + 0]) | 83 << Asciify(data[i + 2]) << " '"; |
| 90 << Asciify(data[i + 1]) | |
| 91 << Asciify(data[i + 2]) | |
| 92 << " '"; | |
| 93 break; | 84 break; |
| 94 case 2: | 85 case 2: |
| 95 DVLOG(1) << pfx | 86 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
| 96 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | |
| 97 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) | 87 << AsciifyHigh(data[i + 1]) << AsciifyLow(data[i + 1]) |
| 98 << " '" | 88 << " '" << Asciify(data[i + 0]) << Asciify(data[i + 1]) |
| 99 << Asciify(data[i + 0]) | |
| 100 << Asciify(data[i + 1]) | |
| 101 << " '"; | 89 << " '"; |
| 102 break; | 90 break; |
| 103 case 1: | 91 case 1: |
| 104 DVLOG(1) << pfx | 92 DVLOG(1) << pfx << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) |
| 105 << AsciifyHigh(data[i + 0]) << AsciifyLow(data[i + 0]) | 93 << " '" << Asciify(data[i + 0]) << " '"; |
| 106 << " '" | |
| 107 << Asciify(data[i + 0]) | |
| 108 << " '"; | |
| 109 break; | 94 break; |
| 110 } | 95 } |
| 111 } | 96 } |
| 112 } | 97 } |
| 113 | 98 |
| 114 template <MockReadWriteType type> | 99 template <MockReadWriteType type> |
| 115 void DumpMockReadWrite(const MockReadWrite<type>& r) { | 100 void DumpMockReadWrite(const MockReadWrite<type>& r) { |
| 116 if (logging::LOG_INFO < logging::GetMinLogLevel()) | 101 if (logging::LOG_INFO < logging::GetMinLogLevel()) |
| 117 return; | 102 return; |
| 118 DVLOG(1) << "Async: " << (r.mode == ASYNC) | 103 DVLOG(1) << "Async: " << (r.mode == ASYNC) << "\nResult: " << r.result; |
| 119 << "\nResult: " << r.result; | |
| 120 DumpData(r.data, r.data_len); | 104 DumpData(r.data, r.data_len); |
| 121 const char* stop = (r.sequence_number & MockRead::STOPLOOP) ? " (STOP)" : ""; | 105 const char* stop = (r.sequence_number & MockRead::STOPLOOP) ? " (STOP)" : ""; |
| 122 DVLOG(1) << "Stage: " << (r.sequence_number & ~MockRead::STOPLOOP) << stop | 106 DVLOG(1) << "Stage: " << (r.sequence_number & ~MockRead::STOPLOOP) << stop |
| 123 << "\nTime: " << r.time_stamp.ToInternalValue(); | 107 << "\nTime: " << r.time_stamp.ToInternalValue(); |
| 124 } | 108 } |
| 125 | 109 |
| 126 } // namespace | 110 } // namespace |
| 127 | 111 |
| 128 MockConnect::MockConnect() : mode(ASYNC), result(OK) { | 112 MockConnect::MockConnect() : mode(ASYNC), result(OK) { |
| 129 IPAddressNumber ip; | 113 IPAddressNumber ip; |
| 130 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); | 114 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); |
| 131 peer_addr = IPEndPoint(ip, 0); | 115 peer_addr = IPEndPoint(ip, 0); |
| 132 } | 116 } |
| 133 | 117 |
| 134 MockConnect::MockConnect(IoMode io_mode, int r) : mode(io_mode), result(r) { | 118 MockConnect::MockConnect(IoMode io_mode, int r) : mode(io_mode), result(r) { |
| 135 IPAddressNumber ip; | 119 IPAddressNumber ip; |
| 136 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); | 120 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); |
| 137 peer_addr = IPEndPoint(ip, 0); | 121 peer_addr = IPEndPoint(ip, 0); |
| 138 } | 122 } |
| 139 | 123 |
| 140 MockConnect::MockConnect(IoMode io_mode, int r, IPEndPoint addr) : | 124 MockConnect::MockConnect(IoMode io_mode, int r, IPEndPoint addr) |
| 141 mode(io_mode), | 125 : mode(io_mode), result(r), peer_addr(addr) { |
| 142 result(r), | |
| 143 peer_addr(addr) { | |
| 144 } | 126 } |
| 145 | 127 |
| 146 MockConnect::~MockConnect() {} | 128 MockConnect::~MockConnect() { |
| 129 } |
| 147 | 130 |
| 148 StaticSocketDataProvider::StaticSocketDataProvider() | 131 StaticSocketDataProvider::StaticSocketDataProvider() |
| 149 : reads_(NULL), | 132 : reads_(NULL), |
| 150 read_index_(0), | 133 read_index_(0), |
| 151 read_count_(0), | 134 read_count_(0), |
| 152 writes_(NULL), | 135 writes_(NULL), |
| 153 write_index_(0), | 136 write_index_(0), |
| 154 write_count_(0) { | 137 write_count_(0) { |
| 155 } | 138 } |
| 156 | 139 |
| 157 StaticSocketDataProvider::StaticSocketDataProvider(MockRead* reads, | 140 StaticSocketDataProvider::StaticSocketDataProvider(MockRead* reads, |
| 158 size_t reads_count, | 141 size_t reads_count, |
| 159 MockWrite* writes, | 142 MockWrite* writes, |
| 160 size_t writes_count) | 143 size_t writes_count) |
| 161 : reads_(reads), | 144 : reads_(reads), |
| 162 read_index_(0), | 145 read_index_(0), |
| 163 read_count_(reads_count), | 146 read_count_(reads_count), |
| 164 writes_(writes), | 147 writes_(writes), |
| 165 write_index_(0), | 148 write_index_(0), |
| 166 write_count_(writes_count) { | 149 write_count_(writes_count) { |
| 167 } | 150 } |
| 168 | 151 |
| 169 StaticSocketDataProvider::~StaticSocketDataProvider() {} | 152 StaticSocketDataProvider::~StaticSocketDataProvider() { |
| 153 } |
| 170 | 154 |
| 171 const MockRead& StaticSocketDataProvider::PeekRead() const { | 155 const MockRead& StaticSocketDataProvider::PeekRead() const { |
| 172 CHECK(!at_read_eof()); | 156 CHECK(!at_read_eof()); |
| 173 return reads_[read_index_]; | 157 return reads_[read_index_]; |
| 174 } | 158 } |
| 175 | 159 |
| 176 const MockWrite& StaticSocketDataProvider::PeekWrite() const { | 160 const MockWrite& StaticSocketDataProvider::PeekWrite() const { |
| 177 CHECK(!at_write_eof()); | 161 CHECK(!at_write_eof()); |
| 178 return writes_[write_index_]; | 162 return writes_[write_index_]; |
| 179 } | 163 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 } | 213 } |
| 230 return MockWriteResult(w->mode, result); | 214 return MockWriteResult(w->mode, result); |
| 231 } | 215 } |
| 232 | 216 |
| 233 void StaticSocketDataProvider::Reset() { | 217 void StaticSocketDataProvider::Reset() { |
| 234 read_index_ = 0; | 218 read_index_ = 0; |
| 235 write_index_ = 0; | 219 write_index_ = 0; |
| 236 } | 220 } |
| 237 | 221 |
| 238 DynamicSocketDataProvider::DynamicSocketDataProvider() | 222 DynamicSocketDataProvider::DynamicSocketDataProvider() |
| 239 : short_read_limit_(0), | 223 : short_read_limit_(0), allow_unconsumed_reads_(false) { |
| 240 allow_unconsumed_reads_(false) { | |
| 241 } | 224 } |
| 242 | 225 |
| 243 DynamicSocketDataProvider::~DynamicSocketDataProvider() {} | 226 DynamicSocketDataProvider::~DynamicSocketDataProvider() { |
| 227 } |
| 244 | 228 |
| 245 MockRead DynamicSocketDataProvider::GetNextRead() { | 229 MockRead DynamicSocketDataProvider::GetNextRead() { |
| 246 if (reads_.empty()) | 230 if (reads_.empty()) |
| 247 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); | 231 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); |
| 248 MockRead result = reads_.front(); | 232 MockRead result = reads_.front(); |
| 249 if (short_read_limit_ == 0 || result.data_len <= short_read_limit_) { | 233 if (short_read_limit_ == 0 || result.data_len <= short_read_limit_) { |
| 250 reads_.pop_front(); | 234 reads_.pop_front(); |
| 251 } else { | 235 } else { |
| 252 result.data_len = short_read_limit_; | 236 result.data_len = short_read_limit_; |
| 253 reads_.front().data += result.data_len; | 237 reads_.front().data += result.data_len; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 281 SSLSocketDataProvider::~SSLSocketDataProvider() { | 265 SSLSocketDataProvider::~SSLSocketDataProvider() { |
| 282 } | 266 } |
| 283 | 267 |
| 284 void SSLSocketDataProvider::SetNextProto(NextProto proto) { | 268 void SSLSocketDataProvider::SetNextProto(NextProto proto) { |
| 285 was_npn_negotiated = true; | 269 was_npn_negotiated = true; |
| 286 next_proto_status = SSLClientSocket::kNextProtoNegotiated; | 270 next_proto_status = SSLClientSocket::kNextProtoNegotiated; |
| 287 protocol_negotiated = proto; | 271 protocol_negotiated = proto; |
| 288 next_proto = SSLClientSocket::NextProtoToString(proto); | 272 next_proto = SSLClientSocket::NextProtoToString(proto); |
| 289 } | 273 } |
| 290 | 274 |
| 291 DelayedSocketData::DelayedSocketData( | 275 DelayedSocketData::DelayedSocketData(int write_delay, |
| 292 int write_delay, MockRead* reads, size_t reads_count, | 276 MockRead* reads, |
| 293 MockWrite* writes, size_t writes_count) | 277 size_t reads_count, |
| 278 MockWrite* writes, |
| 279 size_t writes_count) |
| 294 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 280 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 295 write_delay_(write_delay), | 281 write_delay_(write_delay), |
| 296 read_in_progress_(false), | 282 read_in_progress_(false), |
| 297 weak_factory_(this) { | 283 weak_factory_(this) { |
| 298 DCHECK_GE(write_delay_, 0); | 284 DCHECK_GE(write_delay_, 0); |
| 299 } | 285 } |
| 300 | 286 |
| 301 DelayedSocketData::DelayedSocketData( | 287 DelayedSocketData::DelayedSocketData(const MockConnect& connect, |
| 302 const MockConnect& connect, int write_delay, MockRead* reads, | 288 int write_delay, |
| 303 size_t reads_count, MockWrite* writes, size_t writes_count) | 289 MockRead* reads, |
| 290 size_t reads_count, |
| 291 MockWrite* writes, |
| 292 size_t writes_count) |
| 304 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 293 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 305 write_delay_(write_delay), | 294 write_delay_(write_delay), |
| 306 read_in_progress_(false), | 295 read_in_progress_(false), |
| 307 weak_factory_(this) { | 296 weak_factory_(this) { |
| 308 DCHECK_GE(write_delay_, 0); | 297 DCHECK_GE(write_delay_, 0); |
| 309 set_connect_data(connect); | 298 set_connect_data(connect); |
| 310 } | 299 } |
| 311 | 300 |
| 312 DelayedSocketData::~DelayedSocketData() { | 301 DelayedSocketData::~DelayedSocketData() { |
| 313 } | 302 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 343 read_in_progress_ = false; | 332 read_in_progress_ = false; |
| 344 weak_factory_.InvalidateWeakPtrs(); | 333 weak_factory_.InvalidateWeakPtrs(); |
| 345 StaticSocketDataProvider::Reset(); | 334 StaticSocketDataProvider::Reset(); |
| 346 } | 335 } |
| 347 | 336 |
| 348 void DelayedSocketData::CompleteRead() { | 337 void DelayedSocketData::CompleteRead() { |
| 349 if (socket() && read_in_progress_) | 338 if (socket() && read_in_progress_) |
| 350 socket()->OnReadComplete(GetNextRead()); | 339 socket()->OnReadComplete(GetNextRead()); |
| 351 } | 340 } |
| 352 | 341 |
| 353 OrderedSocketData::OrderedSocketData( | 342 OrderedSocketData::OrderedSocketData(MockRead* reads, |
| 354 MockRead* reads, size_t reads_count, MockWrite* writes, size_t writes_count) | 343 size_t reads_count, |
| 344 MockWrite* writes, |
| 345 size_t writes_count) |
| 355 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 346 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 356 sequence_number_(0), loop_stop_stage_(0), | 347 sequence_number_(0), |
| 357 blocked_(false), weak_factory_(this) { | 348 loop_stop_stage_(0), |
| 349 blocked_(false), |
| 350 weak_factory_(this) { |
| 358 } | 351 } |
| 359 | 352 |
| 360 OrderedSocketData::OrderedSocketData( | 353 OrderedSocketData::OrderedSocketData(const MockConnect& connect, |
| 361 const MockConnect& connect, | 354 MockRead* reads, |
| 362 MockRead* reads, size_t reads_count, | 355 size_t reads_count, |
| 363 MockWrite* writes, size_t writes_count) | 356 MockWrite* writes, |
| 357 size_t writes_count) |
| 364 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 358 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 365 sequence_number_(0), loop_stop_stage_(0), | 359 sequence_number_(0), |
| 366 blocked_(false), weak_factory_(this) { | 360 loop_stop_stage_(0), |
| 361 blocked_(false), |
| 362 weak_factory_(this) { |
| 367 set_connect_data(connect); | 363 set_connect_data(connect); |
| 368 } | 364 } |
| 369 | 365 |
| 370 void OrderedSocketData::EndLoop() { | 366 void OrderedSocketData::EndLoop() { |
| 371 // If we've already stopped the loop, don't do it again until we've advanced | 367 // If we've already stopped the loop, don't do it again until we've advanced |
| 372 // to the next sequence_number. | 368 // to the next sequence_number. |
| 373 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": EndLoop()"; | 369 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": EndLoop()"; |
| 374 if (loop_stop_stage_ > 0) { | 370 if (loop_stop_stage_ > 0) { |
| 375 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); | 371 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); |
| 376 if ((next_read.sequence_number & ~MockRead::STOPLOOP) > | 372 if ((next_read.sequence_number & ~MockRead::STOPLOOP) > loop_stop_stage_) { |
| 377 loop_stop_stage_) { | |
| 378 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 373 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
| 379 << ": Clearing stop index"; | 374 << ": Clearing stop index"; |
| 380 loop_stop_stage_ = 0; | 375 loop_stop_stage_ = 0; |
| 381 } else { | 376 } else { |
| 382 return; | 377 return; |
| 383 } | 378 } |
| 384 } | 379 } |
| 385 // Record the sequence_number at which we stopped the loop. | 380 // Record the sequence_number at which we stopped the loop. |
| 386 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 381 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
| 387 << ": Posting Quit at read " << read_index(); | 382 << ": Posting Quit at read " << read_index(); |
| 388 loop_stop_stage_ = sequence_number_; | 383 loop_stop_stage_ = sequence_number_; |
| 389 } | 384 } |
| 390 | 385 |
| 391 MockRead OrderedSocketData::GetNextRead() { | 386 MockRead OrderedSocketData::GetNextRead() { |
| 392 weak_factory_.InvalidateWeakPtrs(); | 387 weak_factory_.InvalidateWeakPtrs(); |
| 393 blocked_ = false; | 388 blocked_ = false; |
| 394 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); | 389 const MockRead& next_read = StaticSocketDataProvider::PeekRead(); |
| 395 if (next_read.sequence_number & MockRead::STOPLOOP) | 390 if (next_read.sequence_number & MockRead::STOPLOOP) |
| 396 EndLoop(); | 391 EndLoop(); |
| 397 if ((next_read.sequence_number & ~MockRead::STOPLOOP) <= | 392 if ((next_read.sequence_number & ~MockRead::STOPLOOP) <= sequence_number_++) { |
| 398 sequence_number_++) { | 393 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 << ": Read " |
| 399 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 | 394 << read_index(); |
| 400 << ": Read " << read_index(); | |
| 401 DumpMockReadWrite(next_read); | 395 DumpMockReadWrite(next_read); |
| 402 blocked_ = (next_read.result == ERR_IO_PENDING); | 396 blocked_ = (next_read.result == ERR_IO_PENDING); |
| 403 return StaticSocketDataProvider::GetNextRead(); | 397 return StaticSocketDataProvider::GetNextRead(); |
| 404 } | 398 } |
| 405 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 | 399 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ - 1 |
| 406 << ": I/O Pending"; | 400 << ": I/O Pending"; |
| 407 MockRead result = MockRead(ASYNC, ERR_IO_PENDING); | 401 MockRead result = MockRead(ASYNC, ERR_IO_PENDING); |
| 408 DumpMockReadWrite(result); | 402 DumpMockReadWrite(result); |
| 409 blocked_ = true; | 403 blocked_ = true; |
| 410 return result; | 404 return result; |
| 411 } | 405 } |
| 412 | 406 |
| 413 MockWriteResult OrderedSocketData::OnWrite(const std::string& data) { | 407 MockWriteResult OrderedSocketData::OnWrite(const std::string& data) { |
| 414 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 408 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Write " |
| 415 << ": Write " << write_index(); | 409 << write_index(); |
| 416 DumpMockReadWrite(PeekWrite()); | 410 DumpMockReadWrite(PeekWrite()); |
| 417 ++sequence_number_; | 411 ++sequence_number_; |
| 418 if (blocked_) { | 412 if (blocked_) { |
| 419 // TODO(willchan): This 100ms delay seems to work around some weirdness. We | 413 // TODO(willchan): This 100ms delay seems to work around some weirdness. We |
| 420 // should probably fix the weirdness. One example is in SpdyStream, | 414 // should probably fix the weirdness. One example is in SpdyStream, |
| 421 // DoSendRequest() will return ERR_IO_PENDING, and there's a race. If the | 415 // DoSendRequest() will return ERR_IO_PENDING, and there's a race. If the |
| 422 // SYN_REPLY causes OnResponseReceived() to get called before | 416 // SYN_REPLY causes OnResponseReceived() to get called before |
| 423 // SpdyStream::ReadResponseHeaders() is called, we hit a NOTREACHED(). | 417 // SpdyStream::ReadResponseHeaders() is called, we hit a NOTREACHED(). |
| 424 base::MessageLoop::current()->PostDelayedTask( | 418 base::MessageLoop::current()->PostDelayedTask( |
| 425 FROM_HERE, | 419 FROM_HERE, |
| 426 base::Bind(&OrderedSocketData::CompleteRead, | 420 base::Bind(&OrderedSocketData::CompleteRead, |
| 427 weak_factory_.GetWeakPtr()), | 421 weak_factory_.GetWeakPtr()), |
| 428 base::TimeDelta::FromMilliseconds(100)); | 422 base::TimeDelta::FromMilliseconds(100)); |
| 429 } | 423 } |
| 430 return StaticSocketDataProvider::OnWrite(data); | 424 return StaticSocketDataProvider::OnWrite(data); |
| 431 } | 425 } |
| 432 | 426 |
| 433 void OrderedSocketData::Reset() { | 427 void OrderedSocketData::Reset() { |
| 434 NET_TRACE(INFO, " *** ") << "Stage " | 428 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Reset()"; |
| 435 << sequence_number_ << ": Reset()"; | |
| 436 sequence_number_ = 0; | 429 sequence_number_ = 0; |
| 437 loop_stop_stage_ = 0; | 430 loop_stop_stage_ = 0; |
| 438 set_socket(NULL); | 431 set_socket(NULL); |
| 439 weak_factory_.InvalidateWeakPtrs(); | 432 weak_factory_.InvalidateWeakPtrs(); |
| 440 StaticSocketDataProvider::Reset(); | 433 StaticSocketDataProvider::Reset(); |
| 441 } | 434 } |
| 442 | 435 |
| 443 void OrderedSocketData::CompleteRead() { | 436 void OrderedSocketData::CompleteRead() { |
| 444 if (socket() && blocked_) { | 437 if (socket() && blocked_) { |
| 445 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_; | 438 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_; |
| 446 socket()->OnReadComplete(GetNextRead()); | 439 socket()->OnReadComplete(GetNextRead()); |
| 447 } | 440 } |
| 448 } | 441 } |
| 449 | 442 |
| 450 OrderedSocketData::~OrderedSocketData() {} | 443 OrderedSocketData::~OrderedSocketData() { |
| 444 } |
| 451 | 445 |
| 452 DeterministicSocketData::DeterministicSocketData(MockRead* reads, | 446 DeterministicSocketData::DeterministicSocketData(MockRead* reads, |
| 453 size_t reads_count, MockWrite* writes, size_t writes_count) | 447 size_t reads_count, |
| 448 MockWrite* writes, |
| 449 size_t writes_count) |
| 454 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), | 450 : StaticSocketDataProvider(reads, reads_count, writes, writes_count), |
| 455 sequence_number_(0), | 451 sequence_number_(0), |
| 456 current_read_(), | 452 current_read_(), |
| 457 current_write_(), | 453 current_write_(), |
| 458 stopping_sequence_number_(0), | 454 stopping_sequence_number_(0), |
| 459 stopped_(false), | 455 stopped_(false), |
| 460 print_debug_(false), | 456 print_debug_(false), |
| 461 is_running_(false) { | 457 is_running_(false) { |
| 462 VerifyCorrectSequenceNumbers(reads, reads_count, writes, writes_count); | 458 VerifyCorrectSequenceNumbers(reads, reads_count, writes, writes_count); |
| 463 } | 459 } |
| 464 | 460 |
| 465 DeterministicSocketData::~DeterministicSocketData() {} | 461 DeterministicSocketData::~DeterministicSocketData() { |
| 462 } |
| 466 | 463 |
| 467 void DeterministicSocketData::Run() { | 464 void DeterministicSocketData::Run() { |
| 468 DCHECK(!is_running_); | 465 DCHECK(!is_running_); |
| 469 is_running_ = true; | 466 is_running_ = true; |
| 470 | 467 |
| 471 SetStopped(false); | 468 SetStopped(false); |
| 472 int counter = 0; | 469 int counter = 0; |
| 473 // Continue to consume data until all data has run out, or the stopped_ flag | 470 // Continue to consume data until all data has run out, or the stopped_ flag |
| 474 // has been set. Consuming data requires two separate operations -- running | 471 // has been set. Consuming data requires two separate operations -- running |
| 475 // the tasks in the message loop, and explicitly invoking the read/write | 472 // the tasks in the message loop, and explicitly invoking the read/write |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); | 516 return MockRead(SYNCHRONOUS, ERR_UNEXPECTED); |
| 520 } | 517 } |
| 521 | 518 |
| 522 // Async read which will be called back in a future step. | 519 // Async read which will be called back in a future step. |
| 523 if (sequence_number_ < current_read_.sequence_number) { | 520 if (sequence_number_ < current_read_.sequence_number) { |
| 524 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 521 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
| 525 << ": I/O Pending"; | 522 << ": I/O Pending"; |
| 526 MockRead result = MockRead(SYNCHRONOUS, ERR_IO_PENDING); | 523 MockRead result = MockRead(SYNCHRONOUS, ERR_IO_PENDING); |
| 527 if (current_read_.mode == SYNCHRONOUS) { | 524 if (current_read_.mode == SYNCHRONOUS) { |
| 528 LOG(ERROR) << "Unable to perform synchronous read: " | 525 LOG(ERROR) << "Unable to perform synchronous read: " |
| 529 << current_read_.sequence_number | 526 << current_read_.sequence_number |
| 530 << " at stage: " << sequence_number_; | 527 << " at stage: " << sequence_number_; |
| 531 result = MockRead(SYNCHRONOUS, ERR_UNEXPECTED); | 528 result = MockRead(SYNCHRONOUS, ERR_UNEXPECTED); |
| 532 } | 529 } |
| 533 if (print_debug_) | 530 if (print_debug_) |
| 534 DumpMockReadWrite(result); | 531 DumpMockReadWrite(result); |
| 535 return result; | 532 return result; |
| 536 } | 533 } |
| 537 | 534 |
| 538 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 535 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Read " |
| 539 << ": Read " << read_index(); | 536 << read_index(); |
| 540 if (print_debug_) | 537 if (print_debug_) |
| 541 DumpMockReadWrite(current_read_); | 538 DumpMockReadWrite(current_read_); |
| 542 | 539 |
| 543 // Increment the sequence number if IO is complete | 540 // Increment the sequence number if IO is complete |
| 544 if (current_read_.mode == SYNCHRONOUS) | 541 if (current_read_.mode == SYNCHRONOUS) |
| 545 NextStep(); | 542 NextStep(); |
| 546 | 543 |
| 547 DCHECK_NE(ERR_IO_PENDING, current_read_.result); | 544 DCHECK_NE(ERR_IO_PENDING, current_read_.result); |
| 548 StaticSocketDataProvider::GetNextRead(); | 545 StaticSocketDataProvider::GetNextRead(); |
| 549 | 546 |
| 550 return current_read_; | 547 return current_read_; |
| 551 } | 548 } |
| 552 | 549 |
| 553 MockWriteResult DeterministicSocketData::OnWrite(const std::string& data) { | 550 MockWriteResult DeterministicSocketData::OnWrite(const std::string& data) { |
| 554 const MockWrite& next_write = StaticSocketDataProvider::PeekWrite(); | 551 const MockWrite& next_write = StaticSocketDataProvider::PeekWrite(); |
| 555 current_write_ = next_write; | 552 current_write_ = next_write; |
| 556 | 553 |
| 557 // Synchronous write while stopped is an error | 554 // Synchronous write while stopped is an error |
| 558 if (stopped() && next_write.mode == SYNCHRONOUS) { | 555 if (stopped() && next_write.mode == SYNCHRONOUS) { |
| 559 LOG(ERROR) << "Unable to perform synchronous IO while stopped"; | 556 LOG(ERROR) << "Unable to perform synchronous IO while stopped"; |
| 560 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); | 557 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); |
| 561 } | 558 } |
| 562 | 559 |
| 563 // Async write which will be called back in a future step. | 560 // Async write which will be called back in a future step. |
| 564 if (sequence_number_ < next_write.sequence_number) { | 561 if (sequence_number_ < next_write.sequence_number) { |
| 565 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 562 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ |
| 566 << ": I/O Pending"; | 563 << ": I/O Pending"; |
| 567 if (next_write.mode == SYNCHRONOUS) { | 564 if (next_write.mode == SYNCHRONOUS) { |
| 568 LOG(ERROR) << "Unable to perform synchronous write: " | 565 LOG(ERROR) << "Unable to perform synchronous write: " |
| 569 << next_write.sequence_number << " at stage: " << sequence_number_; | 566 << next_write.sequence_number |
| 567 << " at stage: " << sequence_number_; |
| 570 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); | 568 return MockWriteResult(SYNCHRONOUS, ERR_UNEXPECTED); |
| 571 } | 569 } |
| 572 } else { | 570 } else { |
| 573 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ | 571 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Write " |
| 574 << ": Write " << write_index(); | 572 << write_index(); |
| 575 } | 573 } |
| 576 | 574 |
| 577 if (print_debug_) | 575 if (print_debug_) |
| 578 DumpMockReadWrite(next_write); | 576 DumpMockReadWrite(next_write); |
| 579 | 577 |
| 580 // Move to the next step if I/O is synchronous, since the operation will | 578 // Move to the next step if I/O is synchronous, since the operation will |
| 581 // complete when this method returns. | 579 // complete when this method returns. |
| 582 if (next_write.mode == SYNCHRONOUS) | 580 if (next_write.mode == SYNCHRONOUS) |
| 583 NextStep(); | 581 NextStep(); |
| 584 | 582 |
| 585 // This is either a sync write for this step, or an async write. | 583 // This is either a sync write for this step, or an async write. |
| 586 return StaticSocketDataProvider::OnWrite(data); | 584 return StaticSocketDataProvider::OnWrite(data); |
| 587 } | 585 } |
| 588 | 586 |
| 589 void DeterministicSocketData::Reset() { | 587 void DeterministicSocketData::Reset() { |
| 590 NET_TRACE(INFO, " *** ") << "Stage " | 588 NET_TRACE(INFO, " *** ") << "Stage " << sequence_number_ << ": Reset()"; |
| 591 << sequence_number_ << ": Reset()"; | |
| 592 sequence_number_ = 0; | 589 sequence_number_ = 0; |
| 593 StaticSocketDataProvider::Reset(); | 590 StaticSocketDataProvider::Reset(); |
| 594 NOTREACHED(); | 591 NOTREACHED(); |
| 595 } | 592 } |
| 596 | 593 |
| 597 void DeterministicSocketData::InvokeCallbacks() { | 594 void DeterministicSocketData::InvokeCallbacks() { |
| 598 if (delegate_.get() && delegate_->WritePending() && | 595 if (delegate_.get() && delegate_->WritePending() && |
| 599 (current_write().sequence_number == sequence_number())) { | 596 (current_write().sequence_number == sequence_number())) { |
| 600 NextStep(); | 597 NextStep(); |
| 601 delegate_->CompleteWrite(); | 598 delegate_->CompleteWrite(); |
| 602 return; | 599 return; |
| 603 } | 600 } |
| 604 if (delegate_.get() && delegate_->ReadPending() && | 601 if (delegate_.get() && delegate_->ReadPending() && |
| 605 (current_read().sequence_number == sequence_number())) { | 602 (current_read().sequence_number == sequence_number())) { |
| 606 NextStep(); | 603 NextStep(); |
| 607 delegate_->CompleteRead(); | 604 delegate_->CompleteRead(); |
| 608 return; | 605 return; |
| 609 } | 606 } |
| 610 } | 607 } |
| 611 | 608 |
| 612 void DeterministicSocketData::NextStep() { | 609 void DeterministicSocketData::NextStep() { |
| 613 // Invariant: Can never move *past* the stopping step. | 610 // Invariant: Can never move *past* the stopping step. |
| 614 DCHECK_LT(sequence_number_, stopping_sequence_number_); | 611 DCHECK_LT(sequence_number_, stopping_sequence_number_); |
| 615 sequence_number_++; | 612 sequence_number_++; |
| 616 if (sequence_number_ == stopping_sequence_number_) | 613 if (sequence_number_ == stopping_sequence_number_) |
| 617 SetStopped(true); | 614 SetStopped(true); |
| 618 } | 615 } |
| 619 | 616 |
| 620 void DeterministicSocketData::VerifyCorrectSequenceNumbers( | 617 void DeterministicSocketData::VerifyCorrectSequenceNumbers( |
| 621 MockRead* reads, size_t reads_count, | 618 MockRead* reads, |
| 622 MockWrite* writes, size_t writes_count) { | 619 size_t reads_count, |
| 620 MockWrite* writes, |
| 621 size_t writes_count) { |
| 623 size_t read = 0; | 622 size_t read = 0; |
| 624 size_t write = 0; | 623 size_t write = 0; |
| 625 int expected = 0; | 624 int expected = 0; |
| 626 while (read < reads_count || write < writes_count) { | 625 while (read < reads_count || write < writes_count) { |
| 627 // Check to see that we have a read or write at the expected | 626 // Check to see that we have a read or write at the expected |
| 628 // state. | 627 // state. |
| 629 if (read < reads_count && reads[read].sequence_number == expected) { | 628 if (read < reads_count && reads[read].sequence_number == expected) { |
| 630 ++read; | 629 ++read; |
| 631 ++expected; | 630 ++expected; |
| 632 continue; | 631 continue; |
| 633 } | 632 } |
| 634 if (write < writes_count && writes[write].sequence_number == expected) { | 633 if (write < writes_count && writes[write].sequence_number == expected) { |
| 635 ++write; | 634 ++write; |
| 636 ++expected; | 635 ++expected; |
| 637 continue; | 636 continue; |
| 638 } | 637 } |
| 639 NOTREACHED() << "Missing sequence number: " << expected; | 638 NOTREACHED() << "Missing sequence number: " << expected; |
| 640 return; | 639 return; |
| 641 } | 640 } |
| 642 DCHECK_EQ(read, reads_count); | 641 DCHECK_EQ(read, reads_count); |
| 643 DCHECK_EQ(write, writes_count); | 642 DCHECK_EQ(write, writes_count); |
| 644 } | 643 } |
| 645 | 644 |
| 646 MockClientSocketFactory::MockClientSocketFactory() {} | 645 MockClientSocketFactory::MockClientSocketFactory() { |
| 646 } |
| 647 | 647 |
| 648 MockClientSocketFactory::~MockClientSocketFactory() {} | 648 MockClientSocketFactory::~MockClientSocketFactory() { |
| 649 } |
| 649 | 650 |
| 650 void MockClientSocketFactory::AddSocketDataProvider( | 651 void MockClientSocketFactory::AddSocketDataProvider(SocketDataProvider* data) { |
| 651 SocketDataProvider* data) { | |
| 652 mock_data_.Add(data); | 652 mock_data_.Add(data); |
| 653 } | 653 } |
| 654 | 654 |
| 655 void MockClientSocketFactory::AddSSLSocketDataProvider( | 655 void MockClientSocketFactory::AddSSLSocketDataProvider( |
| 656 SSLSocketDataProvider* data) { | 656 SSLSocketDataProvider* data) { |
| 657 mock_ssl_data_.Add(data); | 657 mock_ssl_data_.Add(data); |
| 658 } | 658 } |
| 659 | 659 |
| 660 void MockClientSocketFactory::ResetNextMockIndexes() { | 660 void MockClientSocketFactory::ResetNextMockIndexes() { |
| 661 mock_data_.ResetNextIndex(); | 661 mock_data_.ResetNextIndex(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 688 return socket.PassAs<StreamSocket>(); | 688 return socket.PassAs<StreamSocket>(); |
| 689 } | 689 } |
| 690 | 690 |
| 691 scoped_ptr<SSLClientSocket> MockClientSocketFactory::CreateSSLClientSocket( | 691 scoped_ptr<SSLClientSocket> MockClientSocketFactory::CreateSSLClientSocket( |
| 692 scoped_ptr<ClientSocketHandle> transport_socket, | 692 scoped_ptr<ClientSocketHandle> transport_socket, |
| 693 const HostPortPair& host_and_port, | 693 const HostPortPair& host_and_port, |
| 694 const SSLConfig& ssl_config, | 694 const SSLConfig& ssl_config, |
| 695 const SSLClientSocketContext& context) { | 695 const SSLClientSocketContext& context) { |
| 696 return scoped_ptr<SSLClientSocket>( | 696 return scoped_ptr<SSLClientSocket>( |
| 697 new MockSSLClientSocket(transport_socket.Pass(), | 697 new MockSSLClientSocket(transport_socket.Pass(), |
| 698 host_and_port, ssl_config, | 698 host_and_port, |
| 699 ssl_config, |
| 699 mock_ssl_data_.GetNext())); | 700 mock_ssl_data_.GetNext())); |
| 700 } | 701 } |
| 701 | 702 |
| 702 void MockClientSocketFactory::ClearSSLSessionCache() { | 703 void MockClientSocketFactory::ClearSSLSessionCache() { |
| 703 } | 704 } |
| 704 | 705 |
| 705 const char MockClientSocket::kTlsUnique[] = "MOCK_TLSUNIQ"; | 706 const char MockClientSocket::kTlsUnique[] = "MOCK_TLSUNIQ"; |
| 706 | 707 |
| 707 MockClientSocket::MockClientSocket(const BoundNetLog& net_log) | 708 MockClientSocket::MockClientSocket(const BoundNetLog& net_log) |
| 708 : connected_(false), | 709 : connected_(false), net_log_(net_log), weak_factory_(this) { |
| 709 net_log_(net_log), | |
| 710 weak_factory_(this) { | |
| 711 IPAddressNumber ip; | 710 IPAddressNumber ip; |
| 712 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); | 711 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); |
| 713 peer_addr_ = IPEndPoint(ip, 0); | 712 peer_addr_ = IPEndPoint(ip, 0); |
| 714 } | 713 } |
| 715 | 714 |
| 716 int MockClientSocket::SetReceiveBufferSize(int32 size) { | 715 int MockClientSocket::SetReceiveBufferSize(int32 size) { |
| 717 return OK; | 716 return OK; |
| 718 } | 717 } |
| 719 | 718 |
| 720 int MockClientSocket::SetSendBufferSize(int32 size) { | 719 int MockClientSocket::SetSendBufferSize(int32 size) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 746 CHECK(rv); | 745 CHECK(rv); |
| 747 *address = IPEndPoint(ip, 123); | 746 *address = IPEndPoint(ip, 123); |
| 748 return OK; | 747 return OK; |
| 749 } | 748 } |
| 750 | 749 |
| 751 const BoundNetLog& MockClientSocket::NetLog() const { | 750 const BoundNetLog& MockClientSocket::NetLog() const { |
| 752 return net_log_; | 751 return net_log_; |
| 753 } | 752 } |
| 754 | 753 |
| 755 void MockClientSocket::GetSSLCertRequestInfo( | 754 void MockClientSocket::GetSSLCertRequestInfo( |
| 756 SSLCertRequestInfo* cert_request_info) { | 755 SSLCertRequestInfo* cert_request_info) { |
| 757 } | 756 } |
| 758 | 757 |
| 759 int MockClientSocket::ExportKeyingMaterial(const base::StringPiece& label, | 758 int MockClientSocket::ExportKeyingMaterial(const base::StringPiece& label, |
| 760 bool has_context, | 759 bool has_context, |
| 761 const base::StringPiece& context, | 760 const base::StringPiece& context, |
| 762 unsigned char* out, | 761 unsigned char* out, |
| 763 unsigned int outlen) { | 762 unsigned int outlen) { |
| 764 memset(out, 'A', outlen); | 763 memset(out, 'A', outlen); |
| 765 return OK; | 764 return OK; |
| 766 } | 765 } |
| 767 | 766 |
| 768 int MockClientSocket::GetTLSUniqueChannelBinding(std::string* out) { | 767 int MockClientSocket::GetTLSUniqueChannelBinding(std::string* out) { |
| 769 out->assign(MockClientSocket::kTlsUnique); | 768 out->assign(MockClientSocket::kTlsUnique); |
| 770 return OK; | 769 return OK; |
| 771 } | 770 } |
| 772 | 771 |
| 773 ServerBoundCertService* MockClientSocket::GetServerBoundCertService() const { | 772 ServerBoundCertService* MockClientSocket::GetServerBoundCertService() const { |
| 774 NOTREACHED(); | 773 NOTREACHED(); |
| 775 return NULL; | 774 return NULL; |
| 776 } | 775 } |
| 777 | 776 |
| 778 SSLClientSocket::NextProtoStatus | 777 SSLClientSocket::NextProtoStatus MockClientSocket::GetNextProto( |
| 779 MockClientSocket::GetNextProto(std::string* proto, std::string* server_protos) { | 778 std::string* proto, |
| 779 std::string* server_protos) { |
| 780 proto->clear(); | 780 proto->clear(); |
| 781 server_protos->clear(); | 781 server_protos->clear(); |
| 782 return SSLClientSocket::kNextProtoUnsupported; | 782 return SSLClientSocket::kNextProtoUnsupported; |
| 783 } | 783 } |
| 784 | 784 |
| 785 scoped_refptr<X509Certificate> | 785 scoped_refptr<X509Certificate> |
| 786 MockClientSocket::GetUnverifiedServerCertificateChain() const { | 786 MockClientSocket::GetUnverifiedServerCertificateChain() const { |
| 787 NOTREACHED(); | 787 NOTREACHED(); |
| 788 return NULL; | 788 return NULL; |
| 789 } | 789 } |
| 790 | 790 |
| 791 MockClientSocket::~MockClientSocket() {} | 791 MockClientSocket::~MockClientSocket() { |
| 792 } |
| 792 | 793 |
| 793 void MockClientSocket::RunCallbackAsync(const CompletionCallback& callback, | 794 void MockClientSocket::RunCallbackAsync(const CompletionCallback& callback, |
| 794 int result) { | 795 int result) { |
| 795 base::MessageLoop::current()->PostTask( | 796 base::MessageLoop::current()->PostTask( |
| 796 FROM_HERE, | 797 FROM_HERE, |
| 797 base::Bind(&MockClientSocket::RunCallback, | 798 base::Bind(&MockClientSocket::RunCallback, |
| 798 weak_factory_.GetWeakPtr(), | 799 weak_factory_.GetWeakPtr(), |
| 799 callback, | 800 callback, |
| 800 result)); | 801 result)); |
| 801 } | 802 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 817 need_read_data_(true), | 818 need_read_data_(true), |
| 818 peer_closed_connection_(false), | 819 peer_closed_connection_(false), |
| 819 pending_buf_(NULL), | 820 pending_buf_(NULL), |
| 820 pending_buf_len_(0), | 821 pending_buf_len_(0), |
| 821 was_used_to_convey_data_(false) { | 822 was_used_to_convey_data_(false) { |
| 822 DCHECK(data_); | 823 DCHECK(data_); |
| 823 peer_addr_ = data->connect_data().peer_addr; | 824 peer_addr_ = data->connect_data().peer_addr; |
| 824 data_->Reset(); | 825 data_->Reset(); |
| 825 } | 826 } |
| 826 | 827 |
| 827 MockTCPClientSocket::~MockTCPClientSocket() {} | 828 MockTCPClientSocket::~MockTCPClientSocket() { |
| 829 } |
| 828 | 830 |
| 829 int MockTCPClientSocket::Read(IOBuffer* buf, int buf_len, | 831 int MockTCPClientSocket::Read(IOBuffer* buf, |
| 832 int buf_len, |
| 830 const CompletionCallback& callback) { | 833 const CompletionCallback& callback) { |
| 831 if (!connected_) | 834 if (!connected_) |
| 832 return ERR_UNEXPECTED; | 835 return ERR_UNEXPECTED; |
| 833 | 836 |
| 834 // If the buffer is already in use, a read is already in progress! | 837 // If the buffer is already in use, a read is already in progress! |
| 835 DCHECK(pending_buf_ == NULL); | 838 DCHECK(pending_buf_ == NULL); |
| 836 | 839 |
| 837 // Store our async IO data. | 840 // Store our async IO data. |
| 838 pending_buf_ = buf; | 841 pending_buf_ = buf; |
| 839 pending_buf_len_ = buf_len; | 842 pending_buf_len_ = buf_len; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 858 // We need to be using async IO in this case. | 861 // We need to be using async IO in this case. |
| 859 DCHECK(!callback.is_null()); | 862 DCHECK(!callback.is_null()); |
| 860 return ERR_IO_PENDING; | 863 return ERR_IO_PENDING; |
| 861 } | 864 } |
| 862 need_read_data_ = false; | 865 need_read_data_ = false; |
| 863 } | 866 } |
| 864 | 867 |
| 865 return CompleteRead(); | 868 return CompleteRead(); |
| 866 } | 869 } |
| 867 | 870 |
| 868 int MockTCPClientSocket::Write(IOBuffer* buf, int buf_len, | 871 int MockTCPClientSocket::Write(IOBuffer* buf, |
| 872 int buf_len, |
| 869 const CompletionCallback& callback) { | 873 const CompletionCallback& callback) { |
| 870 DCHECK(buf); | 874 DCHECK(buf); |
| 871 DCHECK_GT(buf_len, 0); | 875 DCHECK_GT(buf_len, 0); |
| 872 | 876 |
| 873 if (!connected_) | 877 if (!connected_) |
| 874 return ERR_UNEXPECTED; | 878 return ERR_UNEXPECTED; |
| 875 | 879 |
| 876 std::string data(buf->data(), buf_len); | 880 std::string data(buf->data(), buf_len); |
| 877 MockWriteResult write_result = data_->OnWrite(data); | 881 MockWriteResult write_result = data_->OnWrite(data); |
| 878 | 882 |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1010 read_data_(), | 1014 read_data_(), |
| 1011 read_buf_(NULL), | 1015 read_buf_(NULL), |
| 1012 read_buf_len_(0), | 1016 read_buf_len_(0), |
| 1013 read_pending_(false), | 1017 read_pending_(false), |
| 1014 data_(data), | 1018 data_(data), |
| 1015 was_used_to_convey_data_(false), | 1019 was_used_to_convey_data_(false), |
| 1016 peer_closed_connection_(false), | 1020 peer_closed_connection_(false), |
| 1017 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)) { | 1021 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)) { |
| 1018 } | 1022 } |
| 1019 | 1023 |
| 1020 DeterministicSocketHelper::~DeterministicSocketHelper() {} | 1024 DeterministicSocketHelper::~DeterministicSocketHelper() { |
| 1025 } |
| 1021 | 1026 |
| 1022 void DeterministicSocketHelper::CompleteWrite() { | 1027 void DeterministicSocketHelper::CompleteWrite() { |
| 1023 was_used_to_convey_data_ = true; | 1028 was_used_to_convey_data_ = true; |
| 1024 write_pending_ = false; | 1029 write_pending_ = false; |
| 1025 write_callback_.Run(write_result_); | 1030 write_callback_.Run(write_result_); |
| 1026 } | 1031 } |
| 1027 | 1032 |
| 1028 int DeterministicSocketHelper::CompleteRead() { | 1033 int DeterministicSocketHelper::CompleteRead() { |
| 1029 DCHECK_GT(read_buf_len_, 0); | 1034 DCHECK_GT(read_buf_len_, 0); |
| 1030 DCHECK_LE(read_data_.data_len, read_buf_len_); | 1035 DCHECK_LE(read_data_.data_len, read_buf_len_); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1046 } | 1051 } |
| 1047 | 1052 |
| 1048 if (read_pending_) { | 1053 if (read_pending_) { |
| 1049 read_pending_ = false; | 1054 read_pending_ = false; |
| 1050 read_callback_.Run(result); | 1055 read_callback_.Run(result); |
| 1051 } | 1056 } |
| 1052 | 1057 |
| 1053 return result; | 1058 return result; |
| 1054 } | 1059 } |
| 1055 | 1060 |
| 1056 int DeterministicSocketHelper::Write( | 1061 int DeterministicSocketHelper::Write(IOBuffer* buf, |
| 1057 IOBuffer* buf, int buf_len, const CompletionCallback& callback) { | 1062 int buf_len, |
| 1063 const CompletionCallback& callback) { |
| 1058 DCHECK(buf); | 1064 DCHECK(buf); |
| 1059 DCHECK_GT(buf_len, 0); | 1065 DCHECK_GT(buf_len, 0); |
| 1060 | 1066 |
| 1061 std::string data(buf->data(), buf_len); | 1067 std::string data(buf->data(), buf_len); |
| 1062 MockWriteResult write_result = data_->OnWrite(data); | 1068 MockWriteResult write_result = data_->OnWrite(data); |
| 1063 | 1069 |
| 1064 if (write_result.mode == ASYNC) { | 1070 if (write_result.mode == ASYNC) { |
| 1065 write_callback_ = callback; | 1071 write_callback_ = callback; |
| 1066 write_result_ = write_result.result; | 1072 write_result_ = write_result.result; |
| 1067 DCHECK(!write_callback_.is_null()); | 1073 DCHECK(!write_callback_.is_null()); |
| 1068 write_pending_ = true; | 1074 write_pending_ = true; |
| 1069 return ERR_IO_PENDING; | 1075 return ERR_IO_PENDING; |
| 1070 } | 1076 } |
| 1071 | 1077 |
| 1072 was_used_to_convey_data_ = true; | 1078 was_used_to_convey_data_ = true; |
| 1073 write_pending_ = false; | 1079 write_pending_ = false; |
| 1074 return write_result.result; | 1080 return write_result.result; |
| 1075 } | 1081 } |
| 1076 | 1082 |
| 1077 int DeterministicSocketHelper::Read( | 1083 int DeterministicSocketHelper::Read(IOBuffer* buf, |
| 1078 IOBuffer* buf, int buf_len, const CompletionCallback& callback) { | 1084 int buf_len, |
| 1079 | 1085 const CompletionCallback& callback) { |
| 1080 read_data_ = data_->GetNextRead(); | 1086 read_data_ = data_->GetNextRead(); |
| 1081 // The buffer should always be big enough to contain all the MockRead data. To | 1087 // The buffer should always be big enough to contain all the MockRead data. To |
| 1082 // use small buffers, split the data into multiple MockReads. | 1088 // use small buffers, split the data into multiple MockReads. |
| 1083 DCHECK_LE(read_data_.data_len, buf_len); | 1089 DCHECK_LE(read_data_.data_len, buf_len); |
| 1084 | 1090 |
| 1085 if (read_data_.result == ERR_CONNECTION_CLOSED) { | 1091 if (read_data_.result == ERR_CONNECTION_CLOSED) { |
| 1086 // This MockRead is just a marker to instruct us to set | 1092 // This MockRead is just a marker to instruct us to set |
| 1087 // peer_closed_connection_. | 1093 // peer_closed_connection_. |
| 1088 peer_closed_connection_ = true; | 1094 peer_closed_connection_ = true; |
| 1089 } | 1095 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1104 return ERR_IO_PENDING; | 1110 return ERR_IO_PENDING; |
| 1105 } | 1111 } |
| 1106 | 1112 |
| 1107 was_used_to_convey_data_ = true; | 1113 was_used_to_convey_data_ = true; |
| 1108 return CompleteRead(); | 1114 return CompleteRead(); |
| 1109 } | 1115 } |
| 1110 | 1116 |
| 1111 DeterministicMockUDPClientSocket::DeterministicMockUDPClientSocket( | 1117 DeterministicMockUDPClientSocket::DeterministicMockUDPClientSocket( |
| 1112 net::NetLog* net_log, | 1118 net::NetLog* net_log, |
| 1113 DeterministicSocketData* data) | 1119 DeterministicSocketData* data) |
| 1114 : connected_(false), | 1120 : connected_(false), helper_(net_log, data), source_port_(123) { |
| 1115 helper_(net_log, data), | |
| 1116 source_port_(123) { | |
| 1117 } | 1121 } |
| 1118 | 1122 |
| 1119 DeterministicMockUDPClientSocket::~DeterministicMockUDPClientSocket() {} | 1123 DeterministicMockUDPClientSocket::~DeterministicMockUDPClientSocket() { |
| 1124 } |
| 1120 | 1125 |
| 1121 bool DeterministicMockUDPClientSocket::WritePending() const { | 1126 bool DeterministicMockUDPClientSocket::WritePending() const { |
| 1122 return helper_.write_pending(); | 1127 return helper_.write_pending(); |
| 1123 } | 1128 } |
| 1124 | 1129 |
| 1125 bool DeterministicMockUDPClientSocket::ReadPending() const { | 1130 bool DeterministicMockUDPClientSocket::ReadPending() const { |
| 1126 return helper_.read_pending(); | 1131 return helper_.read_pending(); |
| 1127 } | 1132 } |
| 1128 | 1133 |
| 1129 void DeterministicMockUDPClientSocket::CompleteWrite() { | 1134 void DeterministicMockUDPClientSocket::CompleteWrite() { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1145 int DeterministicMockUDPClientSocket::Write( | 1150 int DeterministicMockUDPClientSocket::Write( |
| 1146 IOBuffer* buf, | 1151 IOBuffer* buf, |
| 1147 int buf_len, | 1152 int buf_len, |
| 1148 const CompletionCallback& callback) { | 1153 const CompletionCallback& callback) { |
| 1149 if (!connected_) | 1154 if (!connected_) |
| 1150 return ERR_UNEXPECTED; | 1155 return ERR_UNEXPECTED; |
| 1151 | 1156 |
| 1152 return helper_.Write(buf, buf_len, callback); | 1157 return helper_.Write(buf, buf_len, callback); |
| 1153 } | 1158 } |
| 1154 | 1159 |
| 1155 int DeterministicMockUDPClientSocket::Read( | 1160 int DeterministicMockUDPClientSocket::Read(IOBuffer* buf, |
| 1156 IOBuffer* buf, | 1161 int buf_len, |
| 1157 int buf_len, | 1162 const CompletionCallback& callback) { |
| 1158 const CompletionCallback& callback) { | |
| 1159 if (!connected_) | 1163 if (!connected_) |
| 1160 return ERR_UNEXPECTED; | 1164 return ERR_UNEXPECTED; |
| 1161 | 1165 |
| 1162 return helper_.Read(buf, buf_len, callback); | 1166 return helper_.Read(buf, buf_len, callback); |
| 1163 } | 1167 } |
| 1164 | 1168 |
| 1165 int DeterministicMockUDPClientSocket::SetReceiveBufferSize(int32 size) { | 1169 int DeterministicMockUDPClientSocket::SetReceiveBufferSize(int32 size) { |
| 1166 return OK; | 1170 return OK; |
| 1167 } | 1171 } |
| 1168 | 1172 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1186 bool rv = ParseIPLiteralToNumber("192.0.2.33", &ip); | 1190 bool rv = ParseIPLiteralToNumber("192.0.2.33", &ip); |
| 1187 CHECK(rv); | 1191 CHECK(rv); |
| 1188 *address = IPEndPoint(ip, source_port_); | 1192 *address = IPEndPoint(ip, source_port_); |
| 1189 return OK; | 1193 return OK; |
| 1190 } | 1194 } |
| 1191 | 1195 |
| 1192 const BoundNetLog& DeterministicMockUDPClientSocket::NetLog() const { | 1196 const BoundNetLog& DeterministicMockUDPClientSocket::NetLog() const { |
| 1193 return helper_.net_log(); | 1197 return helper_.net_log(); |
| 1194 } | 1198 } |
| 1195 | 1199 |
| 1196 void DeterministicMockUDPClientSocket::OnReadComplete(const MockRead& data) {} | 1200 void DeterministicMockUDPClientSocket::OnReadComplete(const MockRead& data) { |
| 1201 } |
| 1197 | 1202 |
| 1198 void DeterministicMockUDPClientSocket::OnConnectComplete( | 1203 void DeterministicMockUDPClientSocket::OnConnectComplete( |
| 1199 const MockConnect& data) { | 1204 const MockConnect& data) { |
| 1200 NOTIMPLEMENTED(); | 1205 NOTIMPLEMENTED(); |
| 1201 } | 1206 } |
| 1202 | 1207 |
| 1203 DeterministicMockTCPClientSocket::DeterministicMockTCPClientSocket( | 1208 DeterministicMockTCPClientSocket::DeterministicMockTCPClientSocket( |
| 1204 net::NetLog* net_log, | 1209 net::NetLog* net_log, |
| 1205 DeterministicSocketData* data) | 1210 DeterministicSocketData* data) |
| 1206 : MockClientSocket(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), | 1211 : MockClientSocket(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), |
| 1207 helper_(net_log, data) { | 1212 helper_(net_log, data) { |
| 1208 peer_addr_ = data->connect_data().peer_addr; | 1213 peer_addr_ = data->connect_data().peer_addr; |
| 1209 } | 1214 } |
| 1210 | 1215 |
| 1211 DeterministicMockTCPClientSocket::~DeterministicMockTCPClientSocket() {} | 1216 DeterministicMockTCPClientSocket::~DeterministicMockTCPClientSocket() { |
| 1217 } |
| 1212 | 1218 |
| 1213 bool DeterministicMockTCPClientSocket::WritePending() const { | 1219 bool DeterministicMockTCPClientSocket::WritePending() const { |
| 1214 return helper_.write_pending(); | 1220 return helper_.write_pending(); |
| 1215 } | 1221 } |
| 1216 | 1222 |
| 1217 bool DeterministicMockTCPClientSocket::ReadPending() const { | 1223 bool DeterministicMockTCPClientSocket::ReadPending() const { |
| 1218 return helper_.read_pending(); | 1224 return helper_.read_pending(); |
| 1219 } | 1225 } |
| 1220 | 1226 |
| 1221 void DeterministicMockTCPClientSocket::CompleteWrite() { | 1227 void DeterministicMockTCPClientSocket::CompleteWrite() { |
| 1222 helper_.CompleteWrite(); | 1228 helper_.CompleteWrite(); |
| 1223 } | 1229 } |
| 1224 | 1230 |
| 1225 int DeterministicMockTCPClientSocket::CompleteRead() { | 1231 int DeterministicMockTCPClientSocket::CompleteRead() { |
| 1226 return helper_.CompleteRead(); | 1232 return helper_.CompleteRead(); |
| 1227 } | 1233 } |
| 1228 | 1234 |
| 1229 int DeterministicMockTCPClientSocket::Write( | 1235 int DeterministicMockTCPClientSocket::Write( |
| 1230 IOBuffer* buf, | 1236 IOBuffer* buf, |
| 1231 int buf_len, | 1237 int buf_len, |
| 1232 const CompletionCallback& callback) { | 1238 const CompletionCallback& callback) { |
| 1233 if (!connected_) | 1239 if (!connected_) |
| 1234 return ERR_UNEXPECTED; | 1240 return ERR_UNEXPECTED; |
| 1235 | 1241 |
| 1236 return helper_.Write(buf, buf_len, callback); | 1242 return helper_.Write(buf, buf_len, callback); |
| 1237 } | 1243 } |
| 1238 | 1244 |
| 1239 int DeterministicMockTCPClientSocket::Read( | 1245 int DeterministicMockTCPClientSocket::Read(IOBuffer* buf, |
| 1240 IOBuffer* buf, | 1246 int buf_len, |
| 1241 int buf_len, | 1247 const CompletionCallback& callback) { |
| 1242 const CompletionCallback& callback) { | |
| 1243 if (!connected_) | 1248 if (!connected_) |
| 1244 return ERR_UNEXPECTED; | 1249 return ERR_UNEXPECTED; |
| 1245 | 1250 |
| 1246 return helper_.Read(buf, buf_len, callback); | 1251 return helper_.Read(buf, buf_len, callback); |
| 1247 } | 1252 } |
| 1248 | 1253 |
| 1249 // TODO(erikchen): Support connect sequencing. | 1254 // TODO(erikchen): Support connect sequencing. |
| 1250 int DeterministicMockTCPClientSocket::Connect( | 1255 int DeterministicMockTCPClientSocket::Connect( |
| 1251 const CompletionCallback& callback) { | 1256 const CompletionCallback& callback) { |
| 1252 if (connected_) | 1257 if (connected_) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1280 } | 1285 } |
| 1281 | 1286 |
| 1282 bool DeterministicMockTCPClientSocket::WasNpnNegotiated() const { | 1287 bool DeterministicMockTCPClientSocket::WasNpnNegotiated() const { |
| 1283 return false; | 1288 return false; |
| 1284 } | 1289 } |
| 1285 | 1290 |
| 1286 bool DeterministicMockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) { | 1291 bool DeterministicMockTCPClientSocket::GetSSLInfo(SSLInfo* ssl_info) { |
| 1287 return false; | 1292 return false; |
| 1288 } | 1293 } |
| 1289 | 1294 |
| 1290 void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) {} | 1295 void DeterministicMockTCPClientSocket::OnReadComplete(const MockRead& data) { |
| 1296 } |
| 1291 | 1297 |
| 1292 void DeterministicMockTCPClientSocket::OnConnectComplete( | 1298 void DeterministicMockTCPClientSocket::OnConnectComplete( |
| 1293 const MockConnect& data) {} | 1299 const MockConnect& data) { |
| 1300 } |
| 1294 | 1301 |
| 1295 // static | 1302 // static |
| 1296 void MockSSLClientSocket::ConnectCallback( | 1303 void MockSSLClientSocket::ConnectCallback( |
| 1297 MockSSLClientSocket* ssl_client_socket, | 1304 MockSSLClientSocket* ssl_client_socket, |
| 1298 const CompletionCallback& callback, | 1305 const CompletionCallback& callback, |
| 1299 int rv) { | 1306 int rv) { |
| 1300 if (rv == OK) | 1307 if (rv == OK) |
| 1301 ssl_client_socket->connected_ = true; | 1308 ssl_client_socket->connected_ = true; |
| 1302 callback.Run(rv); | 1309 callback.Run(rv); |
| 1303 } | 1310 } |
| 1304 | 1311 |
| 1305 MockSSLClientSocket::MockSSLClientSocket( | 1312 MockSSLClientSocket::MockSSLClientSocket( |
| 1306 scoped_ptr<ClientSocketHandle> transport_socket, | 1313 scoped_ptr<ClientSocketHandle> transport_socket, |
| 1307 const HostPortPair& host_port_pair, | 1314 const HostPortPair& host_port_pair, |
| 1308 const SSLConfig& ssl_config, | 1315 const SSLConfig& ssl_config, |
| 1309 SSLSocketDataProvider* data) | 1316 SSLSocketDataProvider* data) |
| 1310 : MockClientSocket( | 1317 : MockClientSocket( |
| 1311 // Have to use the right BoundNetLog for LoadTimingInfo regression | 1318 // Have to use the right BoundNetLog for LoadTimingInfo regression |
| 1312 // tests. | 1319 // tests. |
| 1313 transport_socket->socket()->NetLog()), | 1320 transport_socket->socket()->NetLog()), |
| 1314 transport_(transport_socket.Pass()), | 1321 transport_(transport_socket.Pass()), |
| 1315 data_(data), | 1322 data_(data), |
| 1316 is_npn_state_set_(false), | 1323 is_npn_state_set_(false), |
| 1317 new_npn_value_(false), | 1324 new_npn_value_(false), |
| 1318 is_protocol_negotiated_set_(false), | 1325 is_protocol_negotiated_set_(false), |
| 1319 protocol_negotiated_(kProtoUnknown) { | 1326 protocol_negotiated_(kProtoUnknown) { |
| 1320 DCHECK(data_); | 1327 DCHECK(data_); |
| 1321 peer_addr_ = data->connect.peer_addr; | 1328 peer_addr_ = data->connect.peer_addr; |
| 1322 } | 1329 } |
| 1323 | 1330 |
| 1324 MockSSLClientSocket::~MockSSLClientSocket() { | 1331 MockSSLClientSocket::~MockSSLClientSocket() { |
| 1325 Disconnect(); | 1332 Disconnect(); |
| 1326 } | 1333 } |
| 1327 | 1334 |
| 1328 int MockSSLClientSocket::Read(IOBuffer* buf, int buf_len, | 1335 int MockSSLClientSocket::Read(IOBuffer* buf, |
| 1336 int buf_len, |
| 1329 const CompletionCallback& callback) { | 1337 const CompletionCallback& callback) { |
| 1330 return transport_->socket()->Read(buf, buf_len, callback); | 1338 return transport_->socket()->Read(buf, buf_len, callback); |
| 1331 } | 1339 } |
| 1332 | 1340 |
| 1333 int MockSSLClientSocket::Write(IOBuffer* buf, int buf_len, | 1341 int MockSSLClientSocket::Write(IOBuffer* buf, |
| 1342 int buf_len, |
| 1334 const CompletionCallback& callback) { | 1343 const CompletionCallback& callback) { |
| 1335 return transport_->socket()->Write(buf, buf_len, callback); | 1344 return transport_->socket()->Write(buf, buf_len, callback); |
| 1336 } | 1345 } |
| 1337 | 1346 |
| 1338 int MockSSLClientSocket::Connect(const CompletionCallback& callback) { | 1347 int MockSSLClientSocket::Connect(const CompletionCallback& callback) { |
| 1339 int rv = transport_->socket()->Connect( | 1348 int rv = transport_->socket()->Connect( |
| 1340 base::Bind(&ConnectCallback, base::Unretained(this), callback)); | 1349 base::Bind(&ConnectCallback, base::Unretained(this), callback)); |
| 1341 if (rv == OK) { | 1350 if (rv == OK) { |
| 1342 if (data_->connect.result == OK) | 1351 if (data_->connect.result == OK) |
| 1343 connected_ = true; | 1352 connected_ = true; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1377 ssl_info->cert = data_->cert; | 1386 ssl_info->cert = data_->cert; |
| 1378 ssl_info->client_cert_sent = data_->client_cert_sent; | 1387 ssl_info->client_cert_sent = data_->client_cert_sent; |
| 1379 ssl_info->channel_id_sent = data_->channel_id_sent; | 1388 ssl_info->channel_id_sent = data_->channel_id_sent; |
| 1380 return true; | 1389 return true; |
| 1381 } | 1390 } |
| 1382 | 1391 |
| 1383 void MockSSLClientSocket::GetSSLCertRequestInfo( | 1392 void MockSSLClientSocket::GetSSLCertRequestInfo( |
| 1384 SSLCertRequestInfo* cert_request_info) { | 1393 SSLCertRequestInfo* cert_request_info) { |
| 1385 DCHECK(cert_request_info); | 1394 DCHECK(cert_request_info); |
| 1386 if (data_->cert_request_info) { | 1395 if (data_->cert_request_info) { |
| 1387 cert_request_info->host_and_port = | 1396 cert_request_info->host_and_port = data_->cert_request_info->host_and_port; |
| 1388 data_->cert_request_info->host_and_port; | |
| 1389 cert_request_info->client_certs = data_->cert_request_info->client_certs; | 1397 cert_request_info->client_certs = data_->cert_request_info->client_certs; |
| 1390 } else { | 1398 } else { |
| 1391 cert_request_info->Reset(); | 1399 cert_request_info->Reset(); |
| 1392 } | 1400 } |
| 1393 } | 1401 } |
| 1394 | 1402 |
| 1395 SSLClientSocket::NextProtoStatus MockSSLClientSocket::GetNextProto( | 1403 SSLClientSocket::NextProtoStatus MockSSLClientSocket::GetNextProto( |
| 1396 std::string* proto, std::string* server_protos) { | 1404 std::string* proto, |
| 1405 std::string* server_protos) { |
| 1397 *proto = data_->next_proto; | 1406 *proto = data_->next_proto; |
| 1398 *server_protos = data_->server_protos; | 1407 *server_protos = data_->server_protos; |
| 1399 return data_->next_proto_status; | 1408 return data_->next_proto_status; |
| 1400 } | 1409 } |
| 1401 | 1410 |
| 1402 bool MockSSLClientSocket::set_was_npn_negotiated(bool negotiated) { | 1411 bool MockSSLClientSocket::set_was_npn_negotiated(bool negotiated) { |
| 1403 is_npn_state_set_ = true; | 1412 is_npn_state_set_ = true; |
| 1404 return new_npn_value_ = negotiated; | 1413 return new_npn_value_ = negotiated; |
| 1405 } | 1414 } |
| 1406 | 1415 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1452 source_port_(123), | 1461 source_port_(123), |
| 1453 pending_buf_(NULL), | 1462 pending_buf_(NULL), |
| 1454 pending_buf_len_(0), | 1463 pending_buf_len_(0), |
| 1455 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), | 1464 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_NONE)), |
| 1456 weak_factory_(this) { | 1465 weak_factory_(this) { |
| 1457 DCHECK(data_); | 1466 DCHECK(data_); |
| 1458 data_->Reset(); | 1467 data_->Reset(); |
| 1459 peer_addr_ = data->connect_data().peer_addr; | 1468 peer_addr_ = data->connect_data().peer_addr; |
| 1460 } | 1469 } |
| 1461 | 1470 |
| 1462 MockUDPClientSocket::~MockUDPClientSocket() {} | 1471 MockUDPClientSocket::~MockUDPClientSocket() { |
| 1472 } |
| 1463 | 1473 |
| 1464 int MockUDPClientSocket::Read(IOBuffer* buf, | 1474 int MockUDPClientSocket::Read(IOBuffer* buf, |
| 1465 int buf_len, | 1475 int buf_len, |
| 1466 const CompletionCallback& callback) { | 1476 const CompletionCallback& callback) { |
| 1467 if (!connected_) | 1477 if (!connected_) |
| 1468 return ERR_UNEXPECTED; | 1478 return ERR_UNEXPECTED; |
| 1469 | 1479 |
| 1470 // If the buffer is already in use, a read is already in progress! | 1480 // If the buffer is already in use, a read is already in progress! |
| 1471 DCHECK(pending_buf_ == NULL); | 1481 DCHECK(pending_buf_ == NULL); |
| 1472 | 1482 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1483 // We need to be using async IO in this case. | 1493 // We need to be using async IO in this case. |
| 1484 DCHECK(!callback.is_null()); | 1494 DCHECK(!callback.is_null()); |
| 1485 return ERR_IO_PENDING; | 1495 return ERR_IO_PENDING; |
| 1486 } | 1496 } |
| 1487 need_read_data_ = false; | 1497 need_read_data_ = false; |
| 1488 } | 1498 } |
| 1489 | 1499 |
| 1490 return CompleteRead(); | 1500 return CompleteRead(); |
| 1491 } | 1501 } |
| 1492 | 1502 |
| 1493 int MockUDPClientSocket::Write(IOBuffer* buf, int buf_len, | 1503 int MockUDPClientSocket::Write(IOBuffer* buf, |
| 1504 int buf_len, |
| 1494 const CompletionCallback& callback) { | 1505 const CompletionCallback& callback) { |
| 1495 DCHECK(buf); | 1506 DCHECK(buf); |
| 1496 DCHECK_GT(buf_len, 0); | 1507 DCHECK_GT(buf_len, 0); |
| 1497 | 1508 |
| 1498 if (!connected_) | 1509 if (!connected_) |
| 1499 return ERR_UNEXPECTED; | 1510 return ERR_UNEXPECTED; |
| 1500 | 1511 |
| 1501 std::string data(buf->data(), buf_len); | 1512 std::string data(buf->data(), buf_len); |
| 1502 MockWriteResult write_result = data_->OnWrite(data); | 1513 MockWriteResult write_result = data_->OnWrite(data); |
| 1503 | 1514 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 result)); | 1625 result)); |
| 1615 } | 1626 } |
| 1616 | 1627 |
| 1617 void MockUDPClientSocket::RunCallback(const CompletionCallback& callback, | 1628 void MockUDPClientSocket::RunCallback(const CompletionCallback& callback, |
| 1618 int result) { | 1629 int result) { |
| 1619 if (!callback.is_null()) | 1630 if (!callback.is_null()) |
| 1620 callback.Run(result); | 1631 callback.Run(result); |
| 1621 } | 1632 } |
| 1622 | 1633 |
| 1623 TestSocketRequest::TestSocketRequest( | 1634 TestSocketRequest::TestSocketRequest( |
| 1624 std::vector<TestSocketRequest*>* request_order, size_t* completion_count) | 1635 std::vector<TestSocketRequest*>* request_order, |
| 1636 size_t* completion_count) |
| 1625 : request_order_(request_order), | 1637 : request_order_(request_order), |
| 1626 completion_count_(completion_count), | 1638 completion_count_(completion_count), |
| 1627 callback_(base::Bind(&TestSocketRequest::OnComplete, | 1639 callback_( |
| 1628 base::Unretained(this))) { | 1640 base::Bind(&TestSocketRequest::OnComplete, base::Unretained(this))) { |
| 1629 DCHECK(request_order); | 1641 DCHECK(request_order); |
| 1630 DCHECK(completion_count); | 1642 DCHECK(completion_count); |
| 1631 } | 1643 } |
| 1632 | 1644 |
| 1633 TestSocketRequest::~TestSocketRequest() { | 1645 TestSocketRequest::~TestSocketRequest() { |
| 1634 } | 1646 } |
| 1635 | 1647 |
| 1636 void TestSocketRequest::OnComplete(int result) { | 1648 void TestSocketRequest::OnComplete(int result) { |
| 1637 SetResult(result); | 1649 SetResult(result); |
| 1638 (*completion_count_)++; | 1650 (*completion_count_)++; |
| 1639 request_order_->push_back(this); | 1651 request_order_->push_back(this); |
| 1640 } | 1652 } |
| 1641 | 1653 |
| 1642 // static | 1654 // static |
| 1643 const int ClientSocketPoolTest::kIndexOutOfBounds = -1; | 1655 const int ClientSocketPoolTest::kIndexOutOfBounds = -1; |
| 1644 | 1656 |
| 1645 // static | 1657 // static |
| 1646 const int ClientSocketPoolTest::kRequestNotFound = -2; | 1658 const int ClientSocketPoolTest::kRequestNotFound = -2; |
| 1647 | 1659 |
| 1648 ClientSocketPoolTest::ClientSocketPoolTest() : completion_count_(0) {} | 1660 ClientSocketPoolTest::ClientSocketPoolTest() : completion_count_(0) { |
| 1649 ClientSocketPoolTest::~ClientSocketPoolTest() {} | 1661 } |
| 1662 ClientSocketPoolTest::~ClientSocketPoolTest() { |
| 1663 } |
| 1650 | 1664 |
| 1651 int ClientSocketPoolTest::GetOrderOfRequest(size_t index) const { | 1665 int ClientSocketPoolTest::GetOrderOfRequest(size_t index) const { |
| 1652 index--; | 1666 index--; |
| 1653 if (index >= requests_.size()) | 1667 if (index >= requests_.size()) |
| 1654 return kIndexOutOfBounds; | 1668 return kIndexOutOfBounds; |
| 1655 | 1669 |
| 1656 for (size_t i = 0; i < request_order_.size(); i++) | 1670 for (size_t i = 0; i < request_order_.size(); i++) |
| 1657 if (requests_[index] == request_order_[i]) | 1671 if (requests_[index] == request_order_[i]) |
| 1658 return i + 1; | 1672 return i + 1; |
| 1659 | 1673 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1678 bool released_one; | 1692 bool released_one; |
| 1679 do { | 1693 do { |
| 1680 released_one = ReleaseOneConnection(keep_alive); | 1694 released_one = ReleaseOneConnection(keep_alive); |
| 1681 } while (released_one); | 1695 } while (released_one); |
| 1682 } | 1696 } |
| 1683 | 1697 |
| 1684 MockTransportClientSocketPool::MockConnectJob::MockConnectJob( | 1698 MockTransportClientSocketPool::MockConnectJob::MockConnectJob( |
| 1685 scoped_ptr<StreamSocket> socket, | 1699 scoped_ptr<StreamSocket> socket, |
| 1686 ClientSocketHandle* handle, | 1700 ClientSocketHandle* handle, |
| 1687 const CompletionCallback& callback) | 1701 const CompletionCallback& callback) |
| 1688 : socket_(socket.Pass()), | 1702 : socket_(socket.Pass()), handle_(handle), user_callback_(callback) { |
| 1689 handle_(handle), | |
| 1690 user_callback_(callback) { | |
| 1691 } | 1703 } |
| 1692 | 1704 |
| 1693 MockTransportClientSocketPool::MockConnectJob::~MockConnectJob() {} | 1705 MockTransportClientSocketPool::MockConnectJob::~MockConnectJob() { |
| 1706 } |
| 1694 | 1707 |
| 1695 int MockTransportClientSocketPool::MockConnectJob::Connect() { | 1708 int MockTransportClientSocketPool::MockConnectJob::Connect() { |
| 1696 int rv = socket_->Connect(base::Bind(&MockConnectJob::OnConnect, | 1709 int rv = socket_->Connect( |
| 1697 base::Unretained(this))); | 1710 base::Bind(&MockConnectJob::OnConnect, base::Unretained(this))); |
| 1698 if (rv == OK) { | 1711 if (rv == OK) { |
| 1699 user_callback_.Reset(); | 1712 user_callback_.Reset(); |
| 1700 OnConnect(OK); | 1713 OnConnect(OK); |
| 1701 } | 1714 } |
| 1702 return rv; | 1715 return rv; |
| 1703 } | 1716 } |
| 1704 | 1717 |
| 1705 bool MockTransportClientSocketPool::MockConnectJob::CancelHandle( | 1718 bool MockTransportClientSocketPool::MockConnectJob::CancelHandle( |
| 1706 const ClientSocketHandle* handle) { | 1719 const ClientSocketHandle* handle) { |
| 1707 if (handle != handle_) | 1720 if (handle != handle_) |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1738 user_callback_.Reset(); | 1751 user_callback_.Reset(); |
| 1739 callback.Run(rv); | 1752 callback.Run(rv); |
| 1740 } | 1753 } |
| 1741 } | 1754 } |
| 1742 | 1755 |
| 1743 MockTransportClientSocketPool::MockTransportClientSocketPool( | 1756 MockTransportClientSocketPool::MockTransportClientSocketPool( |
| 1744 int max_sockets, | 1757 int max_sockets, |
| 1745 int max_sockets_per_group, | 1758 int max_sockets_per_group, |
| 1746 ClientSocketPoolHistograms* histograms, | 1759 ClientSocketPoolHistograms* histograms, |
| 1747 ClientSocketFactory* socket_factory) | 1760 ClientSocketFactory* socket_factory) |
| 1748 : TransportClientSocketPool(max_sockets, max_sockets_per_group, histograms, | 1761 : TransportClientSocketPool(max_sockets, |
| 1749 NULL, NULL, NULL), | 1762 max_sockets_per_group, |
| 1763 histograms, |
| 1764 NULL, |
| 1765 NULL, |
| 1766 NULL), |
| 1750 client_socket_factory_(socket_factory), | 1767 client_socket_factory_(socket_factory), |
| 1751 last_request_priority_(DEFAULT_PRIORITY), | 1768 last_request_priority_(DEFAULT_PRIORITY), |
| 1752 release_count_(0), | 1769 release_count_(0), |
| 1753 cancel_count_(0) { | 1770 cancel_count_(0) { |
| 1754 } | 1771 } |
| 1755 | 1772 |
| 1756 MockTransportClientSocketPool::~MockTransportClientSocketPool() {} | 1773 MockTransportClientSocketPool::~MockTransportClientSocketPool() { |
| 1774 } |
| 1757 | 1775 |
| 1758 int MockTransportClientSocketPool::RequestSocket( | 1776 int MockTransportClientSocketPool::RequestSocket( |
| 1759 const std::string& group_name, const void* socket_params, | 1777 const std::string& group_name, |
| 1760 RequestPriority priority, ClientSocketHandle* handle, | 1778 const void* socket_params, |
| 1761 const CompletionCallback& callback, const BoundNetLog& net_log) { | 1779 RequestPriority priority, |
| 1780 ClientSocketHandle* handle, |
| 1781 const CompletionCallback& callback, |
| 1782 const BoundNetLog& net_log) { |
| 1762 last_request_priority_ = priority; | 1783 last_request_priority_ = priority; |
| 1763 scoped_ptr<StreamSocket> socket = | 1784 scoped_ptr<StreamSocket> socket = |
| 1764 client_socket_factory_->CreateTransportClientSocket( | 1785 client_socket_factory_->CreateTransportClientSocket( |
| 1765 AddressList(), net_log.net_log(), net::NetLog::Source()); | 1786 AddressList(), net_log.net_log(), net::NetLog::Source()); |
| 1766 MockConnectJob* job = new MockConnectJob(socket.Pass(), handle, callback); | 1787 MockConnectJob* job = new MockConnectJob(socket.Pass(), handle, callback); |
| 1767 job_list_.push_back(job); | 1788 job_list_.push_back(job); |
| 1768 handle->set_pool_id(1); | 1789 handle->set_pool_id(1); |
| 1769 return job->Connect(); | 1790 return job->Connect(); |
| 1770 } | 1791 } |
| 1771 | 1792 |
| 1772 void MockTransportClientSocketPool::CancelRequest(const std::string& group_name, | 1793 void MockTransportClientSocketPool::CancelRequest(const std::string& group_name, |
| 1773 ClientSocketHandle* handle) { | 1794 ClientSocketHandle* handle) { |
| 1774 std::vector<MockConnectJob*>::iterator i; | 1795 std::vector<MockConnectJob*>::iterator i; |
| 1775 for (i = job_list_.begin(); i != job_list_.end(); ++i) { | 1796 for (i = job_list_.begin(); i != job_list_.end(); ++i) { |
| 1776 if ((*i)->CancelHandle(handle)) { | 1797 if ((*i)->CancelHandle(handle)) { |
| 1777 cancel_count_++; | 1798 cancel_count_++; |
| 1778 break; | 1799 break; |
| 1779 } | 1800 } |
| 1780 } | 1801 } |
| 1781 } | 1802 } |
| 1782 | 1803 |
| 1783 void MockTransportClientSocketPool::ReleaseSocket( | 1804 void MockTransportClientSocketPool::ReleaseSocket( |
| 1784 const std::string& group_name, | 1805 const std::string& group_name, |
| 1785 scoped_ptr<StreamSocket> socket, | 1806 scoped_ptr<StreamSocket> socket, |
| 1786 int id) { | 1807 int id) { |
| 1787 EXPECT_EQ(1, id); | 1808 EXPECT_EQ(1, id); |
| 1788 release_count_++; | 1809 release_count_++; |
| 1789 } | 1810 } |
| 1790 | 1811 |
| 1791 DeterministicMockClientSocketFactory::DeterministicMockClientSocketFactory() {} | 1812 DeterministicMockClientSocketFactory::DeterministicMockClientSocketFactory() { |
| 1813 } |
| 1792 | 1814 |
| 1793 DeterministicMockClientSocketFactory::~DeterministicMockClientSocketFactory() {} | 1815 DeterministicMockClientSocketFactory::~DeterministicMockClientSocketFactory() { |
| 1816 } |
| 1794 | 1817 |
| 1795 void DeterministicMockClientSocketFactory::AddSocketDataProvider( | 1818 void DeterministicMockClientSocketFactory::AddSocketDataProvider( |
| 1796 DeterministicSocketData* data) { | 1819 DeterministicSocketData* data) { |
| 1797 mock_data_.Add(data); | 1820 mock_data_.Add(data); |
| 1798 } | 1821 } |
| 1799 | 1822 |
| 1800 void DeterministicMockClientSocketFactory::AddSSLSocketDataProvider( | 1823 void DeterministicMockClientSocketFactory::AddSSLSocketDataProvider( |
| 1801 SSLSocketDataProvider* data) { | 1824 SSLSocketDataProvider* data) { |
| 1802 mock_ssl_data_.Add(data); | 1825 mock_ssl_data_.Add(data); |
| 1803 } | 1826 } |
| 1804 | 1827 |
| 1805 void DeterministicMockClientSocketFactory::ResetNextMockIndexes() { | 1828 void DeterministicMockClientSocketFactory::ResetNextMockIndexes() { |
| 1806 mock_data_.ResetNextIndex(); | 1829 mock_data_.ResetNextIndex(); |
| 1807 mock_ssl_data_.ResetNextIndex(); | 1830 mock_ssl_data_.ResetNextIndex(); |
| 1808 } | 1831 } |
| 1809 | 1832 |
| 1810 MockSSLClientSocket* DeterministicMockClientSocketFactory:: | 1833 MockSSLClientSocket* |
| 1811 GetMockSSLClientSocket(size_t index) const { | 1834 DeterministicMockClientSocketFactory::GetMockSSLClientSocket( |
| 1835 size_t index) const { |
| 1812 DCHECK_LT(index, ssl_client_sockets_.size()); | 1836 DCHECK_LT(index, ssl_client_sockets_.size()); |
| 1813 return ssl_client_sockets_[index]; | 1837 return ssl_client_sockets_[index]; |
| 1814 } | 1838 } |
| 1815 | 1839 |
| 1816 scoped_ptr<DatagramClientSocket> | 1840 scoped_ptr<DatagramClientSocket> |
| 1817 DeterministicMockClientSocketFactory::CreateDatagramClientSocket( | 1841 DeterministicMockClientSocketFactory::CreateDatagramClientSocket( |
| 1818 DatagramSocket::BindType bind_type, | 1842 DatagramSocket::BindType bind_type, |
| 1819 const RandIntCallback& rand_int_cb, | 1843 const RandIntCallback& rand_int_cb, |
| 1820 net::NetLog* net_log, | 1844 net::NetLog* net_log, |
| 1821 const NetLog::Source& source) { | 1845 const NetLog::Source& source) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1843 } | 1867 } |
| 1844 | 1868 |
| 1845 scoped_ptr<SSLClientSocket> | 1869 scoped_ptr<SSLClientSocket> |
| 1846 DeterministicMockClientSocketFactory::CreateSSLClientSocket( | 1870 DeterministicMockClientSocketFactory::CreateSSLClientSocket( |
| 1847 scoped_ptr<ClientSocketHandle> transport_socket, | 1871 scoped_ptr<ClientSocketHandle> transport_socket, |
| 1848 const HostPortPair& host_and_port, | 1872 const HostPortPair& host_and_port, |
| 1849 const SSLConfig& ssl_config, | 1873 const SSLConfig& ssl_config, |
| 1850 const SSLClientSocketContext& context) { | 1874 const SSLClientSocketContext& context) { |
| 1851 scoped_ptr<MockSSLClientSocket> socket( | 1875 scoped_ptr<MockSSLClientSocket> socket( |
| 1852 new MockSSLClientSocket(transport_socket.Pass(), | 1876 new MockSSLClientSocket(transport_socket.Pass(), |
| 1853 host_and_port, ssl_config, | 1877 host_and_port, |
| 1878 ssl_config, |
| 1854 mock_ssl_data_.GetNext())); | 1879 mock_ssl_data_.GetNext())); |
| 1855 ssl_client_sockets_.push_back(socket.get()); | 1880 ssl_client_sockets_.push_back(socket.get()); |
| 1856 return socket.PassAs<SSLClientSocket>(); | 1881 return socket.PassAs<SSLClientSocket>(); |
| 1857 } | 1882 } |
| 1858 | 1883 |
| 1859 void DeterministicMockClientSocketFactory::ClearSSLSessionCache() { | 1884 void DeterministicMockClientSocketFactory::ClearSSLSessionCache() { |
| 1860 } | 1885 } |
| 1861 | 1886 |
| 1862 MockSOCKSClientSocketPool::MockSOCKSClientSocketPool( | 1887 MockSOCKSClientSocketPool::MockSOCKSClientSocketPool( |
| 1863 int max_sockets, | 1888 int max_sockets, |
| 1864 int max_sockets_per_group, | 1889 int max_sockets_per_group, |
| 1865 ClientSocketPoolHistograms* histograms, | 1890 ClientSocketPoolHistograms* histograms, |
| 1866 TransportClientSocketPool* transport_pool) | 1891 TransportClientSocketPool* transport_pool) |
| 1867 : SOCKSClientSocketPool(max_sockets, max_sockets_per_group, histograms, | 1892 : SOCKSClientSocketPool(max_sockets, |
| 1868 NULL, transport_pool, NULL), | 1893 max_sockets_per_group, |
| 1894 histograms, |
| 1895 NULL, |
| 1896 transport_pool, |
| 1897 NULL), |
| 1869 transport_pool_(transport_pool) { | 1898 transport_pool_(transport_pool) { |
| 1870 } | 1899 } |
| 1871 | 1900 |
| 1872 MockSOCKSClientSocketPool::~MockSOCKSClientSocketPool() {} | 1901 MockSOCKSClientSocketPool::~MockSOCKSClientSocketPool() { |
| 1902 } |
| 1873 | 1903 |
| 1874 int MockSOCKSClientSocketPool::RequestSocket( | 1904 int MockSOCKSClientSocketPool::RequestSocket(const std::string& group_name, |
| 1875 const std::string& group_name, const void* socket_params, | 1905 const void* socket_params, |
| 1876 RequestPriority priority, ClientSocketHandle* handle, | 1906 RequestPriority priority, |
| 1877 const CompletionCallback& callback, const BoundNetLog& net_log) { | 1907 ClientSocketHandle* handle, |
| 1908 const CompletionCallback& callback, |
| 1909 const BoundNetLog& net_log) { |
| 1878 return transport_pool_->RequestSocket( | 1910 return transport_pool_->RequestSocket( |
| 1879 group_name, socket_params, priority, handle, callback, net_log); | 1911 group_name, socket_params, priority, handle, callback, net_log); |
| 1880 } | 1912 } |
| 1881 | 1913 |
| 1882 void MockSOCKSClientSocketPool::CancelRequest( | 1914 void MockSOCKSClientSocketPool::CancelRequest(const std::string& group_name, |
| 1883 const std::string& group_name, | 1915 ClientSocketHandle* handle) { |
| 1884 ClientSocketHandle* handle) { | |
| 1885 return transport_pool_->CancelRequest(group_name, handle); | 1916 return transport_pool_->CancelRequest(group_name, handle); |
| 1886 } | 1917 } |
| 1887 | 1918 |
| 1888 void MockSOCKSClientSocketPool::ReleaseSocket(const std::string& group_name, | 1919 void MockSOCKSClientSocketPool::ReleaseSocket(const std::string& group_name, |
| 1889 scoped_ptr<StreamSocket> socket, | 1920 scoped_ptr<StreamSocket> socket, |
| 1890 int id) { | 1921 int id) { |
| 1891 return transport_pool_->ReleaseSocket(group_name, socket.Pass(), id); | 1922 return transport_pool_->ReleaseSocket(group_name, socket.Pass(), id); |
| 1892 } | 1923 } |
| 1893 | 1924 |
| 1894 const char kSOCKS5GreetRequest[] = { 0x05, 0x01, 0x00 }; | 1925 const char kSOCKS5GreetRequest[] = {0x05, 0x01, 0x00}; |
| 1895 const int kSOCKS5GreetRequestLength = arraysize(kSOCKS5GreetRequest); | 1926 const int kSOCKS5GreetRequestLength = arraysize(kSOCKS5GreetRequest); |
| 1896 | 1927 |
| 1897 const char kSOCKS5GreetResponse[] = { 0x05, 0x00 }; | 1928 const char kSOCKS5GreetResponse[] = {0x05, 0x00}; |
| 1898 const int kSOCKS5GreetResponseLength = arraysize(kSOCKS5GreetResponse); | 1929 const int kSOCKS5GreetResponseLength = arraysize(kSOCKS5GreetResponse); |
| 1899 | 1930 |
| 1900 const char kSOCKS5OkRequest[] = | 1931 const char kSOCKS5OkRequest[] = {0x05, 0x01, 0x00, 0x03, 0x04, 'h', |
| 1901 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; | 1932 'o', 's', 't', 0x00, 0x50}; |
| 1902 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); | 1933 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); |
| 1903 | 1934 |
| 1904 const char kSOCKS5OkResponse[] = | 1935 const char kSOCKS5OkResponse[] = {0x05, 0x00, 0x00, 0x01, 127, |
| 1905 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; | 1936 0, 0, 1, 0x00, 0x50}; |
| 1906 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); | 1937 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); |
| 1907 | 1938 |
| 1908 } // namespace net | 1939 } // namespace net |
| OLD | NEW |