| 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/quic/quic_connection.h" | 5 #include "net/quic/quic_connection.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <sys/types.h> | 8 #include <sys/types.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 962 } | 962 } |
| 963 // This occurs if there are received packet gaps and the peer does not raise | 963 // This occurs if there are received packet gaps and the peer does not raise |
| 964 // the least unacked fast enough. | 964 // the least unacked fast enough. |
| 965 if (received_packet_manager_.NumTrackedPackets() > kMaxTrackedPackets) { | 965 if (received_packet_manager_.NumTrackedPackets() > kMaxTrackedPackets) { |
| 966 SendConnectionCloseWithDetails( | 966 SendConnectionCloseWithDetails( |
| 967 QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS, | 967 QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS, |
| 968 StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets)); | 968 StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets)); |
| 969 } | 969 } |
| 970 } | 970 } |
| 971 | 971 |
| 972 QuicAckFrame* QuicConnection::CreateAckFrame() { | 972 void QuicConnection::PopulateAckFrame(QuicAckFrame* ack) { |
| 973 QuicAckFrame* outgoing_ack = new QuicAckFrame(); | 973 received_packet_manager_.UpdateReceivedPacketInfo(ack, |
| 974 received_packet_manager_.UpdateReceivedPacketInfo( | 974 clock_->ApproximateNow()); |
| 975 outgoing_ack, clock_->ApproximateNow()); | |
| 976 DVLOG(1) << ENDPOINT << "Creating ack frame: " << *outgoing_ack; | |
| 977 return outgoing_ack; | |
| 978 } | 975 } |
| 979 | 976 |
| 980 QuicStopWaitingFrame* QuicConnection::CreateStopWaitingFrame() { | 977 void QuicConnection::PopulateStopWaitingFrame( |
| 981 QuicStopWaitingFrame stop_waiting; | 978 QuicStopWaitingFrame* stop_waiting) { |
| 982 UpdateStopWaiting(&stop_waiting); | 979 stop_waiting->least_unacked = GetLeastUnacked(); |
| 983 return new QuicStopWaitingFrame(stop_waiting); | 980 stop_waiting->entropy_hash = sent_entropy_manager_.GetCumulativeEntropy( |
| 981 stop_waiting->least_unacked - 1); |
| 984 } | 982 } |
| 985 | 983 |
| 986 bool QuicConnection::ShouldLastPacketInstigateAck() const { | 984 bool QuicConnection::ShouldLastPacketInstigateAck() const { |
| 987 if (!last_stream_frames_.empty() || | 985 if (!last_stream_frames_.empty() || |
| 988 !last_goaway_frames_.empty() || | 986 !last_goaway_frames_.empty() || |
| 989 !last_rst_frames_.empty() || | 987 !last_rst_frames_.empty() || |
| 990 !last_window_update_frames_.empty() || | 988 !last_window_update_frames_.empty() || |
| 991 !last_blocked_frames_.empty() || | 989 !last_blocked_frames_.empty() || |
| 992 !last_ping_frames_.empty()) { | 990 !last_ping_frames_.empty()) { |
| 993 return true; | 991 return true; |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1645 } | 1643 } |
| 1646 | 1644 |
| 1647 sent_entropy_manager_.RecordPacketEntropyHash( | 1645 sent_entropy_manager_.RecordPacketEntropyHash( |
| 1648 packet.serialized_packet.sequence_number, | 1646 packet.serialized_packet.sequence_number, |
| 1649 packet.serialized_packet.entropy_hash); | 1647 packet.serialized_packet.entropy_hash); |
| 1650 if (!WritePacket(&packet)) { | 1648 if (!WritePacket(&packet)) { |
| 1651 queued_packets_.push_back(packet); | 1649 queued_packets_.push_back(packet); |
| 1652 } | 1650 } |
| 1653 } | 1651 } |
| 1654 | 1652 |
| 1655 void QuicConnection::UpdateStopWaiting(QuicStopWaitingFrame* stop_waiting) { | |
| 1656 stop_waiting->least_unacked = GetLeastUnacked(); | |
| 1657 stop_waiting->entropy_hash = sent_entropy_manager_.GetCumulativeEntropy( | |
| 1658 stop_waiting->least_unacked - 1); | |
| 1659 } | |
| 1660 | |
| 1661 void QuicConnection::SendPing() { | 1653 void QuicConnection::SendPing() { |
| 1662 if (retransmission_alarm_->IsSet()) { | 1654 if (retransmission_alarm_->IsSet()) { |
| 1663 return; | 1655 return; |
| 1664 } | 1656 } |
| 1665 packet_generator_.AddControlFrame(QuicFrame(new QuicPingFrame)); | 1657 packet_generator_.AddControlFrame(QuicFrame(new QuicPingFrame)); |
| 1666 } | 1658 } |
| 1667 | 1659 |
| 1668 void QuicConnection::SendAck() { | 1660 void QuicConnection::SendAck() { |
| 1669 ack_alarm_->Cancel(); | 1661 ack_alarm_->Cancel(); |
| 1670 stop_waiting_count_ = 0; | 1662 stop_waiting_count_ = 0; |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2109 } | 2101 } |
| 2110 for (const QuicFrame& frame : retransmittable_frames->frames()) { | 2102 for (const QuicFrame& frame : retransmittable_frames->frames()) { |
| 2111 if (frame.type == CONNECTION_CLOSE_FRAME) { | 2103 if (frame.type == CONNECTION_CLOSE_FRAME) { |
| 2112 return true; | 2104 return true; |
| 2113 } | 2105 } |
| 2114 } | 2106 } |
| 2115 return false; | 2107 return false; |
| 2116 } | 2108 } |
| 2117 | 2109 |
| 2118 } // namespace net | 2110 } // namespace net |
| OLD | NEW |