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

Side by Side Diff: net/quic/quic_connection.cc

Issue 1546633002: Drop not awaited packets before decrypt them. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@110393215
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | net/quic/quic_connection_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 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 605 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 debug_visitor_->OnUnauthenticatedHeader(header); 616 debug_visitor_->OnUnauthenticatedHeader(header);
617 } 617 }
618 618
619 // Check that any public reset packet with a different connection ID that was 619 // Check that any public reset packet with a different connection ID that was
620 // routed to this QuicConnection has been redirected before control reaches 620 // routed to this QuicConnection has been redirected before control reaches
621 // here. 621 // here.
622 DCHECK_EQ(connection_id_, header.public_header.connection_id); 622 DCHECK_EQ(connection_id_, header.public_header.connection_id);
623 623
624 // If this packet has already been seen, or the sender has told us that it 624 // If this packet has already been seen, or the sender has told us that it
625 // will not be retransmitted, then stop processing the packet. 625 // will not be retransmitted, then stop processing the packet.
626 if (!received_packet_manager_.IsAwaitingPacket(header.packet_number)) { 626 if (FLAGS_quic_drop_non_awaited_packets &&
627 !received_packet_manager_.IsAwaitingPacket(header.packet_number)) {
627 DVLOG(1) << ENDPOINT << "Packet " << header.packet_number 628 DVLOG(1) << ENDPOINT << "Packet " << header.packet_number
628 << " no longer being waited for. Discarding."; 629 << " no longer being waited for. Discarding.";
629 if (debug_visitor_ != nullptr) { 630 if (debug_visitor_ != nullptr) {
630 debug_visitor_->OnDuplicatePacket(header.packet_number); 631 debug_visitor_->OnDuplicatePacket(header.packet_number);
631 } 632 }
632 ++stats_.packets_dropped; 633 ++stats_.packets_dropped;
633 return false; 634 return false;
634 } 635 }
635 636
636 return true; 637 return true;
(...skipping 1339 matching lines...) Expand 10 before | Expand all | Expand 10 after
1976 StringPiece(revived_payload, len)); 1977 StringPiece(revived_payload, len));
1977 } 1978 }
1978 1979
1979 ++stats_.packets_revived; 1980 ++stats_.packets_revived;
1980 framer_.ProcessRevivedPacket(&revived_header, 1981 framer_.ProcessRevivedPacket(&revived_header,
1981 StringPiece(revived_payload, len)); 1982 StringPiece(revived_payload, len));
1982 } 1983 }
1983 1984
1984 QuicFecGroup* QuicConnection::GetFecGroup() { 1985 QuicFecGroup* QuicConnection::GetFecGroup() {
1985 QuicFecGroupNumber fec_group_num = last_header_.fec_group; 1986 QuicFecGroupNumber fec_group_num = last_header_.fec_group;
1986 if (fec_group_num == 0) { 1987 if (fec_group_num == 0 ||
1988 (FLAGS_quic_drop_non_awaited_packets &&
1989 fec_group_num <
1990 received_packet_manager_.peer_least_packet_awaiting_ack() &&
1991 !ContainsKey(group_map_, fec_group_num))) {
1992 // If the group number is below peer_least_packet_awaiting_ack and this
1993 // group does not exist, which means this group has missing packets below
1994 // |peer_least_packet_awaiting_ack| which we would never receive, so return
1995 // nullptr.
1987 return nullptr; 1996 return nullptr;
1988 } 1997 }
1989 if (!ContainsKey(group_map_, fec_group_num)) { 1998 if (!ContainsKey(group_map_, fec_group_num)) {
1990 if (group_map_.size() >= kMaxFecGroups) { // Too many groups 1999 if (group_map_.size() >= kMaxFecGroups) { // Too many groups
1991 if (fec_group_num < group_map_.begin()->first) { 2000 if (fec_group_num < group_map_.begin()->first) {
1992 // The group being requested is a group we've seen before and deleted. 2001 // The group being requested is a group we've seen before and deleted.
1993 // Don't recreate it. 2002 // Don't recreate it.
1994 return nullptr; 2003 return nullptr;
1995 } 2004 }
1996 // Clear the lowest group number. 2005 // Clear the lowest group number.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
2071 2080
2072 // Opportunistically bundle an ack with this outgoing packet. 2081 // Opportunistically bundle an ack with this outgoing packet.
2073 ScopedPacketBundler ack_bundler(this, BUNDLE_PENDING_ACK); 2082 ScopedPacketBundler ack_bundler(this, BUNDLE_PENDING_ACK);
2074 packet_generator_.AddControlFrame( 2083 packet_generator_.AddControlFrame(
2075 QuicFrame(new QuicGoAwayFrame(error, last_good_stream_id, reason))); 2084 QuicFrame(new QuicGoAwayFrame(error, last_good_stream_id, reason)));
2076 } 2085 }
2077 2086
2078 void QuicConnection::CloseFecGroupsBefore(QuicPacketNumber packet_number) { 2087 void QuicConnection::CloseFecGroupsBefore(QuicPacketNumber packet_number) {
2079 FecGroupMap::iterator it = group_map_.begin(); 2088 FecGroupMap::iterator it = group_map_.begin();
2080 while (it != group_map_.end()) { 2089 while (it != group_map_.end()) {
2081 // If this is the current group or the group doesn't protect this packet 2090 // If the group doesn't protect this packet we can ignore it.
2082 // we can ignore it. 2091 if ((!FLAGS_quic_drop_non_awaited_packets &&
2083 if (last_header_.fec_group == it->first || 2092 last_header_.fec_group == it->first) ||
2084 !it->second->IsWaitingForPacketBefore(packet_number)) { 2093 !it->second->IsWaitingForPacketBefore(packet_number)) {
2085 ++it; 2094 ++it;
2086 continue; 2095 continue;
2087 } 2096 }
2088 QuicFecGroup* fec_group = it->second; 2097 QuicFecGroup* fec_group = it->second;
2089 DCHECK(!fec_group->CanRevive()); 2098 DCHECK(!fec_group->CanRevive());
2090 FecGroupMap::iterator next = it; 2099 FecGroupMap::iterator next = it;
2091 ++next; 2100 ++next;
2092 group_map_.erase(it); 2101 group_map_.erase(it);
2093 delete fec_group; 2102 delete fec_group;
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
2404 SendMtuDiscoveryPacket(mtu_discovery_target_); 2413 SendMtuDiscoveryPacket(mtu_discovery_target_);
2405 2414
2406 DCHECK(!mtu_discovery_alarm_->IsSet()); 2415 DCHECK(!mtu_discovery_alarm_->IsSet());
2407 } 2416 }
2408 2417
2409 bool QuicConnection::ack_frame_updated() const { 2418 bool QuicConnection::ack_frame_updated() const {
2410 return received_packet_manager_.ack_frame_updated(); 2419 return received_packet_manager_.ack_frame_updated();
2411 } 2420 }
2412 2421
2413 } // namespace net 2422 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/quic_connection_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698