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 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
656 base::MessageLoop::current()->PostTask( | 656 base::MessageLoop::current()->PostTask( |
657 FROM_HERE, base::Bind(&SequencedSocketData::OnWriteComplete, | 657 FROM_HERE, base::Bind(&SequencedSocketData::OnWriteComplete, |
658 weak_factory_.GetWeakPtr())); | 658 weak_factory_.GetWeakPtr())); |
659 CHECK_NE(COMPLETING, read_state_); | 659 CHECK_NE(COMPLETING, read_state_); |
660 write_state_ = COMPLETING; | 660 write_state_ = COMPLETING; |
661 } | 661 } |
662 | 662 |
663 void SequencedSocketData::OnReadComplete() { | 663 void SequencedSocketData::OnReadComplete() { |
664 CHECK_EQ(COMPLETING, read_state_); | 664 CHECK_EQ(COMPLETING, read_state_); |
665 NET_TRACE(1, " *** ") << "Completing read for: " << sequence_number_; | 665 NET_TRACE(1, " *** ") << "Completing read for: " << sequence_number_; |
666 if (!socket()) { | |
667 NET_TRACE(1, " *** ") << "No socket available to complete read"; | |
668 return; | |
669 } | |
670 | 666 |
671 MockRead data = helper_.AdvanceRead(); | 667 MockRead data = helper_.AdvanceRead(); |
672 DCHECK_EQ(sequence_number_, data.sequence_number); | 668 DCHECK_EQ(sequence_number_, data.sequence_number); |
673 sequence_number_++; | 669 sequence_number_++; |
674 read_state_ = IDLE; | 670 read_state_ = IDLE; |
675 | 671 |
676 // The result of this read completing might trigger the completion | 672 // The result of this read completing might trigger the completion |
677 // of a pending write. If so, post a task to complete the write later. | 673 // of a pending write. If so, post a task to complete the write later. |
678 // Since the socket may call back into the SequencedSocketData | 674 // Since the socket may call back into the SequencedSocketData |
679 // from socket()->OnReadComplete(), trigger the write task to be posted | 675 // from socket()->OnReadComplete(), trigger the write task to be posted |
680 // before calling that. | 676 // before calling that. |
681 MaybePostWriteCompleteTask(); | 677 MaybePostWriteCompleteTask(); |
682 | 678 |
679 if (!socket()) { | |
680 NET_TRACE(1, " *** ") << "No socket available to complete read"; | |
681 return; | |
682 } | |
683 | |
683 NET_TRACE(1, " *** ") << "Completing socket read for: " << sequence_number_; | 684 NET_TRACE(1, " *** ") << "Completing socket read for: " << sequence_number_; |
684 DumpMockReadWrite(data); | 685 DumpMockReadWrite(data); |
685 socket()->OnReadComplete(data); | 686 socket()->OnReadComplete(data); |
686 NET_TRACE(1, " *** ") << "Done"; | 687 NET_TRACE(1, " *** ") << "Done"; |
687 } | 688 } |
688 | 689 |
689 void SequencedSocketData::OnWriteComplete() { | 690 void SequencedSocketData::OnWriteComplete() { |
690 CHECK_EQ(COMPLETING, write_state_); | 691 CHECK_EQ(COMPLETING, write_state_); |
691 NET_TRACE(1, " *** ") << " Completing write for: " << sequence_number_; | 692 NET_TRACE(1, " *** ") << " Completing write for: " << sequence_number_; |
692 if (!socket()) { | |
693 NET_TRACE(1, " *** ") << "No socket available to complete write."; | |
694 return; | |
695 } | |
696 | 693 |
697 const MockWrite& data = helper_.AdvanceWrite(); | 694 const MockWrite& data = helper_.AdvanceWrite(); |
698 DCHECK_EQ(sequence_number_, data.sequence_number); | 695 DCHECK_EQ(sequence_number_, data.sequence_number); |
699 sequence_number_++; | 696 sequence_number_++; |
700 write_state_ = IDLE; | 697 write_state_ = IDLE; |
701 int rv = data.result == OK ? data.data_len : data.result; | 698 int rv = data.result == OK ? data.data_len : data.result; |
702 | 699 |
703 // The result of this write completing might trigger the completion | 700 // The result of this write completing might trigger the completion |
704 // of a pending read. If so, post a task to complete the read later. | 701 // of a pending read. If so, post a task to complete the read later. |
705 // Since the socket may call back into the SequencedSocketData | 702 // Since the socket may call back into the SequencedSocketData |
706 // from socket()->OnWriteComplete(), trigger the write task to be posted | 703 // from socket()->OnWriteComplete(), trigger the write task to be posted |
707 // before calling that. | 704 // before calling that. |
708 MaybePostReadCompleteTask(); | 705 MaybePostReadCompleteTask(); |
709 | 706 |
707 if (!socket()) { | |
708 NET_TRACE(1, " *** ") << "No socket available to complete write."; | |
709 return; | |
710 } | |
711 | |
710 NET_TRACE(1, " *** ") << " Completing socket write for: " << sequence_number_; | 712 NET_TRACE(1, " *** ") << " Completing socket write for: " << sequence_number_; |
711 socket()->OnWriteComplete(rv); | 713 socket()->OnWriteComplete(rv); |
712 NET_TRACE(1, " *** ") << "Done"; | 714 NET_TRACE(1, " *** ") << "Done"; |
713 } | 715 } |
714 | 716 |
715 SequencedSocketData::~SequencedSocketData() { | 717 SequencedSocketData::~SequencedSocketData() { |
716 } | 718 } |
717 | 719 |
718 DeterministicSocketData::DeterministicSocketData(MockRead* reads, | 720 DeterministicSocketData::DeterministicSocketData(MockRead* reads, |
719 size_t reads_count, MockWrite* writes, size_t writes_count) | 721 size_t reads_count, MockWrite* writes, size_t writes_count) |
(...skipping 991 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1711 source_port_(123), | 1713 source_port_(123), |
1712 pending_read_buf_(NULL), | 1714 pending_read_buf_(NULL), |
1713 pending_read_buf_len_(0), | 1715 pending_read_buf_len_(0), |
1714 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_NONE)), | 1716 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_NONE)), |
1715 weak_factory_(this) { | 1717 weak_factory_(this) { |
1716 DCHECK(data_); | 1718 DCHECK(data_); |
1717 data_->Reset(); | 1719 data_->Reset(); |
1718 peer_addr_ = data->connect_data().peer_addr; | 1720 peer_addr_ = data->connect_data().peer_addr; |
1719 } | 1721 } |
1720 | 1722 |
1721 MockUDPClientSocket::~MockUDPClientSocket() {} | 1723 MockUDPClientSocket::~MockUDPClientSocket() { |
1724 data_->set_socket(nullptr); | |
mmenke
2015/05/04 20:08:32
This seems reasonable. Should probably do it in ~
Ryan Hamilton
2015/05/04 20:12:33
Done.
Ryan Hamilton
2015/05/04 20:15:09
Actually, I take it back. Doing that causes other
| |
1725 } | |
1722 | 1726 |
1723 int MockUDPClientSocket::Read(IOBuffer* buf, | 1727 int MockUDPClientSocket::Read(IOBuffer* buf, |
1724 int buf_len, | 1728 int buf_len, |
1725 const CompletionCallback& callback) { | 1729 const CompletionCallback& callback) { |
1726 if (!connected_) | 1730 if (!connected_) |
1727 return ERR_UNEXPECTED; | 1731 return ERR_UNEXPECTED; |
1728 | 1732 |
1729 // If the buffer is already in use, a read is already in progress! | 1733 // If the buffer is already in use, a read is already in progress! |
1730 DCHECK(pending_read_buf_.get() == NULL); | 1734 DCHECK(pending_read_buf_.get() == NULL); |
1731 | 1735 |
(...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2195 | 2199 |
2196 const char kSOCKS5OkRequest[] = | 2200 const char kSOCKS5OkRequest[] = |
2197 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; | 2201 { 0x05, 0x01, 0x00, 0x03, 0x04, 'h', 'o', 's', 't', 0x00, 0x50 }; |
2198 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); | 2202 const int kSOCKS5OkRequestLength = arraysize(kSOCKS5OkRequest); |
2199 | 2203 |
2200 const char kSOCKS5OkResponse[] = | 2204 const char kSOCKS5OkResponse[] = |
2201 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; | 2205 { 0x05, 0x00, 0x00, 0x01, 127, 0, 0, 1, 0x00, 0x50 }; |
2202 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); | 2206 const int kSOCKS5OkResponseLength = arraysize(kSOCKS5OkResponse); |
2203 | 2207 |
2204 } // namespace net | 2208 } // namespace net |
OLD | NEW |