| 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 1170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1181 // All data for streams which are reset with QUIC_STREAM_NO_ERROR must | 1181 // All data for streams which are reset with QUIC_STREAM_NO_ERROR must |
| 1182 // be received by the peer. | 1182 // be received by the peer. |
| 1183 return; | 1183 return; |
| 1184 } | 1184 } |
| 1185 | 1185 |
| 1186 sent_packet_manager_.CancelRetransmissionsForStream(id); | 1186 sent_packet_manager_.CancelRetransmissionsForStream(id); |
| 1187 // Remove all queued packets which only contain data for the reset stream. | 1187 // Remove all queued packets which only contain data for the reset stream. |
| 1188 QueuedPacketList::iterator packet_iterator = queued_packets_.begin(); | 1188 QueuedPacketList::iterator packet_iterator = queued_packets_.begin(); |
| 1189 while (packet_iterator != queued_packets_.end()) { | 1189 while (packet_iterator != queued_packets_.end()) { |
| 1190 QuicFrames* retransmittable_frames = | 1190 QuicFrames* retransmittable_frames = |
| 1191 packet_iterator->retransmittable_frames; | 1191 &packet_iterator->retransmittable_frames; |
| 1192 if (retransmittable_frames == nullptr) { | 1192 if (retransmittable_frames->empty()) { |
| 1193 ++packet_iterator; | 1193 ++packet_iterator; |
| 1194 continue; | 1194 continue; |
| 1195 } | 1195 } |
| 1196 QuicUtils::RemoveFramesForStream(retransmittable_frames, id); | 1196 QuicUtils::RemoveFramesForStream(retransmittable_frames, id); |
| 1197 if (!retransmittable_frames->empty()) { | 1197 if (!retransmittable_frames->empty()) { |
| 1198 ++packet_iterator; | 1198 ++packet_iterator; |
| 1199 continue; | 1199 continue; |
| 1200 } | 1200 } |
| 1201 QuicUtils::ClearSerializedPacket(&(*packet_iterator)); | 1201 QuicUtils::ClearSerializedPacket(&(*packet_iterator)); |
| 1202 packet_iterator = queued_packets_.erase(packet_iterator); | 1202 packet_iterator = queued_packets_.erase(packet_iterator); |
| (...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1818 packet->entropy_hash); | 1818 packet->entropy_hash); |
| 1819 // If there are already queued packets, queue this one immediately to ensure | 1819 // If there are already queued packets, queue this one immediately to ensure |
| 1820 // it's written in sequence number order. | 1820 // it's written in sequence number order. |
| 1821 if (!queued_packets_.empty() || !WritePacket(packet)) { | 1821 if (!queued_packets_.empty() || !WritePacket(packet)) { |
| 1822 // Take ownership of the underlying encrypted packet. | 1822 // Take ownership of the underlying encrypted packet. |
| 1823 if (!packet->packet->owns_buffer()) { | 1823 if (!packet->packet->owns_buffer()) { |
| 1824 scoped_ptr<QuicEncryptedPacket> encrypted_deleter(packet->packet); | 1824 scoped_ptr<QuicEncryptedPacket> encrypted_deleter(packet->packet); |
| 1825 packet->packet = packet->packet->Clone(); | 1825 packet->packet = packet->packet->Clone(); |
| 1826 } | 1826 } |
| 1827 queued_packets_.push_back(*packet); | 1827 queued_packets_.push_back(*packet); |
| 1828 packet->retransmittable_frames.clear(); |
| 1828 } | 1829 } |
| 1829 | 1830 |
| 1830 // If a forward-secure encrypter is available but is not being used and the | 1831 // If a forward-secure encrypter is available but is not being used and the |
| 1831 // next packet number is the first packet which requires | 1832 // next packet number is the first packet which requires |
| 1832 // forward security, start using the forward-secure encrypter. | 1833 // forward security, start using the forward-secure encrypter. |
| 1833 if (encryption_level_ != ENCRYPTION_FORWARD_SECURE && | 1834 if (encryption_level_ != ENCRYPTION_FORWARD_SECURE && |
| 1834 has_forward_secure_encrypter_ && | 1835 has_forward_secure_encrypter_ && |
| 1835 packet->packet_number >= first_required_forward_secure_packet_ - 1) { | 1836 packet->packet_number >= first_required_forward_secure_packet_ - 1) { |
| 1836 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); | 1837 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); |
| 1837 } | 1838 } |
| (...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2352 connection_->SetRetransmissionAlarm(); | 2353 connection_->SetRetransmissionAlarm(); |
| 2353 connection_->pending_retransmission_alarm_ = false; | 2354 connection_->pending_retransmission_alarm_ = false; |
| 2354 } | 2355 } |
| 2355 } | 2356 } |
| 2356 | 2357 |
| 2357 HasRetransmittableData QuicConnection::IsRetransmittable( | 2358 HasRetransmittableData QuicConnection::IsRetransmittable( |
| 2358 const SerializedPacket& packet) { | 2359 const SerializedPacket& packet) { |
| 2359 // Retransmitted packets retransmittable frames are owned by the unacked | 2360 // Retransmitted packets retransmittable frames are owned by the unacked |
| 2360 // packet map, but are not present in the serialized packet. | 2361 // packet map, but are not present in the serialized packet. |
| 2361 if (packet.transmission_type != NOT_RETRANSMISSION || | 2362 if (packet.transmission_type != NOT_RETRANSMISSION || |
| 2362 packet.retransmittable_frames != nullptr) { | 2363 !packet.retransmittable_frames.empty()) { |
| 2363 return HAS_RETRANSMITTABLE_DATA; | 2364 return HAS_RETRANSMITTABLE_DATA; |
| 2364 } else { | 2365 } else { |
| 2365 return NO_RETRANSMITTABLE_DATA; | 2366 return NO_RETRANSMITTABLE_DATA; |
| 2366 } | 2367 } |
| 2367 } | 2368 } |
| 2368 | 2369 |
| 2369 bool QuicConnection::IsTerminationPacket(const SerializedPacket& packet) { | 2370 bool QuicConnection::IsTerminationPacket(const SerializedPacket& packet) { |
| 2370 if (packet.retransmittable_frames == nullptr) { | 2371 if (packet.retransmittable_frames.empty()) { |
| 2371 return false; | 2372 return false; |
| 2372 } | 2373 } |
| 2373 for (const QuicFrame& frame : *packet.retransmittable_frames) { | 2374 for (const QuicFrame& frame : packet.retransmittable_frames) { |
| 2374 if (frame.type == CONNECTION_CLOSE_FRAME) { | 2375 if (frame.type == CONNECTION_CLOSE_FRAME) { |
| 2375 return true; | 2376 return true; |
| 2376 } | 2377 } |
| 2377 if (save_crypto_packets_as_termination_packets_ && | 2378 if (save_crypto_packets_as_termination_packets_ && |
| 2378 frame.type == STREAM_FRAME && | 2379 frame.type == STREAM_FRAME && |
| 2379 frame.stream_frame->stream_id == kCryptoStreamId) { | 2380 frame.stream_frame->stream_id == kCryptoStreamId) { |
| 2380 return true; | 2381 return true; |
| 2381 } | 2382 } |
| 2382 } | 2383 } |
| 2383 return false; | 2384 return false; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2448 void QuicConnection::OnPathClosed(QuicPathId path_id) { | 2449 void QuicConnection::OnPathClosed(QuicPathId path_id) { |
| 2449 // Stop receiving packets on this path. | 2450 // Stop receiving packets on this path. |
| 2450 framer_.OnPathClosed(path_id); | 2451 framer_.OnPathClosed(path_id); |
| 2451 } | 2452 } |
| 2452 | 2453 |
| 2453 bool QuicConnection::ack_frame_updated() const { | 2454 bool QuicConnection::ack_frame_updated() const { |
| 2454 return received_packet_manager_.ack_frame_updated(); | 2455 return received_packet_manager_.ack_frame_updated(); |
| 2455 } | 2456 } |
| 2456 | 2457 |
| 2457 } // namespace net | 2458 } // namespace net |
| OLD | NEW |