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

Side by Side Diff: net/tools/quic/quic_time_wait_list_manager.cc

Issue 1331053003: Landing Recent QUIC changes until 8/28/2015 18:03 UTC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0909_1
Patch Set: use iterator for begin and end methods of PacketNumberQueue Created 5 years, 3 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 | « net/tools/quic/quic_time_wait_list_manager.h ('k') | remoting/protocol/quic_channel_factory.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/tools/quic/quic_time_wait_list_manager.h" 5 #include "net/tools/quic/quic_time_wait_list_manager.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 QuicPacketWriter* writer, 81 QuicPacketWriter* writer,
82 QuicServerSessionVisitor* visitor, 82 QuicServerSessionVisitor* visitor,
83 QuicConnectionHelperInterface* helper, 83 QuicConnectionHelperInterface* helper,
84 const QuicVersionVector& supported_versions) 84 const QuicVersionVector& supported_versions)
85 : time_wait_period_( 85 : time_wait_period_(
86 QuicTime::Delta::FromSeconds(FLAGS_quic_time_wait_list_seconds)), 86 QuicTime::Delta::FromSeconds(FLAGS_quic_time_wait_list_seconds)),
87 connection_id_clean_up_alarm_( 87 connection_id_clean_up_alarm_(
88 helper->CreateAlarm(new ConnectionIdCleanUpAlarm(this))), 88 helper->CreateAlarm(new ConnectionIdCleanUpAlarm(this))),
89 clock_(helper->GetClock()), 89 clock_(helper->GetClock()),
90 writer_(writer), 90 writer_(writer),
91 visitor_(visitor) { 91 visitor_(visitor),
92 num_connections_(0) {
92 SetConnectionIdCleanUpAlarm(); 93 SetConnectionIdCleanUpAlarm();
93 } 94 }
94 95
95 QuicTimeWaitListManager::~QuicTimeWaitListManager() { 96 QuicTimeWaitListManager::~QuicTimeWaitListManager() {
96 connection_id_clean_up_alarm_->Cancel(); 97 connection_id_clean_up_alarm_->Cancel();
97 STLDeleteElements(&pending_packets_queue_); 98 STLDeleteElements(&pending_packets_queue_);
98 for (ConnectionIdMap::iterator it = connection_id_map_.begin(); 99 for (ConnectionIdMap::iterator it = connection_id_map_.begin();
99 it != connection_id_map_.end(); 100 it != connection_id_map_.end();
100 ++it) { 101 ++it) {
101 delete it->second.close_packet; 102 delete it->second.close_packet;
102 } 103 }
103 } 104 }
104 105
105 void QuicTimeWaitListManager::AddConnectionIdToTimeWait( 106 void QuicTimeWaitListManager::AddConnectionIdToTimeWait(
106 QuicConnectionId connection_id, 107 QuicConnectionId connection_id,
107 QuicVersion version, 108 QuicVersion version,
108 bool connection_rejected_statelessly, 109 bool connection_rejected_statelessly,
109 QuicEncryptedPacket* close_packet) { 110 QuicEncryptedPacket* close_packet) {
110 DCHECK(!connection_rejected_statelessly || !close_packet) 111 DCHECK(!connection_rejected_statelessly || !close_packet)
111 << "Connections that were rejected statelessly should not " 112 << "Connections that were rejected statelessly should not "
112 << "have a close packet. connection_id = " << connection_id; 113 << "have a close packet. connection_id = " << connection_id;
113 int num_packets = 0; 114 int num_packets = 0;
114 ConnectionIdMap::iterator it = connection_id_map_.find(connection_id); 115 ConnectionIdMap::iterator it = connection_id_map_.find(connection_id);
115 const bool new_connection_id = it == connection_id_map_.end(); 116 const bool new_connection_id = it == connection_id_map_.end();
116 if (!new_connection_id) { // Replace record if it is reinserted. 117 if (!new_connection_id) { // Replace record if it is reinserted.
117 num_packets = it->second.num_packets; 118 num_packets = it->second.num_packets;
118 delete it->second.close_packet; 119 delete it->second.close_packet;
119 connection_id_map_.erase(it); 120 connection_id_map_.erase(it);
121 --num_connections_;
120 } 122 }
121 TrimTimeWaitListIfNeeded(); 123 TrimTimeWaitListIfNeeded();
122 DCHECK_LT(num_connections(), 124 DCHECK_LT(num_connections(),
123 static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections)); 125 static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections));
124 ConnectionIdData data(num_packets, version, clock_->ApproximateNow(), 126 ConnectionIdData data(num_packets, version, clock_->ApproximateNow(),
125 close_packet, connection_rejected_statelessly); 127 close_packet, connection_rejected_statelessly);
126 connection_id_map_.insert(std::make_pair(connection_id, data)); 128 connection_id_map_.insert(std::make_pair(connection_id, data));
129 ++num_connections_;
127 if (new_connection_id) { 130 if (new_connection_id) {
128 visitor_->OnConnectionAddedToTimeWaitList(connection_id); 131 visitor_->OnConnectionAddedToTimeWaitList(connection_id);
129 } 132 }
130 } 133 }
131 134
132 bool QuicTimeWaitListManager::IsConnectionIdInTimeWait( 135 bool QuicTimeWaitListManager::IsConnectionIdInTimeWait(
133 QuicConnectionId connection_id) const { 136 QuicConnectionId connection_id) const {
134 return ContainsKey(connection_id_map_, connection_id); 137 return ContainsKey(connection_id_map_, connection_id);
135 } 138 }
136 139
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 ConnectionIdMap::iterator it = connection_id_map_.begin(); 284 ConnectionIdMap::iterator it = connection_id_map_.begin();
282 QuicTime oldest_connection_id_time = it->second.time_added; 285 QuicTime oldest_connection_id_time = it->second.time_added;
283 if (oldest_connection_id_time > expiration_time) { 286 if (oldest_connection_id_time > expiration_time) {
284 // Too recent, don't retire. 287 // Too recent, don't retire.
285 return false; 288 return false;
286 } 289 }
287 // This connection_id has lived its age, retire it now. 290 // This connection_id has lived its age, retire it now.
288 const QuicConnectionId connection_id = it->first; 291 const QuicConnectionId connection_id = it->first;
289 delete it->second.close_packet; 292 delete it->second.close_packet;
290 connection_id_map_.erase(it); 293 connection_id_map_.erase(it);
294 --num_connections_;
291 visitor_->OnConnectionRemovedFromTimeWaitList(connection_id); 295 visitor_->OnConnectionRemovedFromTimeWaitList(connection_id);
292 return true; 296 return true;
293 } 297 }
294 298
295 void QuicTimeWaitListManager::CleanUpOldConnectionIds() { 299 void QuicTimeWaitListManager::CleanUpOldConnectionIds() {
296 QuicTime now = clock_->ApproximateNow(); 300 QuicTime now = clock_->ApproximateNow();
297 QuicTime expiration = now.Subtract(time_wait_period_); 301 QuicTime expiration = now.Subtract(time_wait_period_);
298 302
299 while (MaybeExpireOldestConnection(expiration)) { 303 while (MaybeExpireOldestConnection(expiration)) {
300 } 304 }
301 305
302 SetConnectionIdCleanUpAlarm(); 306 SetConnectionIdCleanUpAlarm();
303 } 307 }
304 308
305 void QuicTimeWaitListManager::TrimTimeWaitListIfNeeded() { 309 void QuicTimeWaitListManager::TrimTimeWaitListIfNeeded() {
306 if (FLAGS_quic_time_wait_list_max_connections < 0) { 310 if (FLAGS_quic_time_wait_list_max_connections < 0) {
307 return; 311 return;
308 } 312 }
309 while (num_connections() >= 313 while (num_connections() >=
310 static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections)) { 314 static_cast<size_t>(FLAGS_quic_time_wait_list_max_connections)) {
311 MaybeExpireOldestConnection(QuicTime::Infinite()); 315 MaybeExpireOldestConnection(QuicTime::Infinite());
312 } 316 }
313 } 317 }
314 318
315 } // namespace tools 319 } // namespace tools
316 } // namespace net 320 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_time_wait_list_manager.h ('k') | remoting/protocol/quic_channel_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698