Index: net/quic/quic_buffered_packet_store.cc |
diff --git a/net/quic/quic_buffered_packet_store.cc b/net/quic/quic_buffered_packet_store.cc |
deleted file mode 100644 |
index c5771def31d676788c02c618514acbe38034eab5..0000000000000000000000000000000000000000 |
--- a/net/quic/quic_buffered_packet_store.cc |
+++ /dev/null |
@@ -1,148 +0,0 @@ |
-// Copyright (c) 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "net/quic/quic_buffered_packet_store.h" |
- |
-#include <list> |
- |
-#include "base/stl_util.h" |
- |
-using std::list; |
- |
-namespace net { |
- |
-typedef QuicBufferedPacketStore::BufferedPacket BufferedPacket; |
-typedef QuicBufferedPacketStore::EnqueuePacketResult EnqueuePacketResult; |
-typedef QuicBufferedPacketStore::BufferedPacketList BufferedPacketList; |
- |
-// Max number of connections this store can keep track. |
-static const size_t kDefaultMaxConnectionsInStore = 100; |
- |
-namespace { |
- |
-// This alarm removes expired entries in map each time this alarm fires. |
-class ConnectionExpireAlarm : public QuicAlarm::Delegate { |
- public: |
- explicit ConnectionExpireAlarm(QuicBufferedPacketStore* store) |
- : connection_store_(store) {} |
- |
- void OnAlarm() override { connection_store_->OnExpirationTimeout(); } |
- |
- // Disallow copy and asign. |
- ConnectionExpireAlarm(const ConnectionExpireAlarm&) = delete; |
- ConnectionExpireAlarm& operator=(const ConnectionExpireAlarm&) = delete; |
- |
- private: |
- QuicBufferedPacketStore* connection_store_; |
-}; |
- |
-} // namespace |
- |
-BufferedPacket::BufferedPacket(std::unique_ptr<QuicReceivedPacket> packet, |
- IPEndPoint server_address, |
- IPEndPoint client_address) |
- : packet(std::move(packet)), |
- server_address(server_address), |
- client_address(client_address) {} |
- |
-BufferedPacket::BufferedPacket(BufferedPacket&& other) = default; |
- |
-BufferedPacket& BufferedPacket::operator=(BufferedPacket&& other) = default; |
- |
-BufferedPacket::~BufferedPacket() {} |
- |
-BufferedPacketList::BufferedPacketList() : creation_time(QuicTime::Zero()) {} |
- |
-BufferedPacketList::BufferedPacketList(BufferedPacketList&& other) = default; |
- |
-BufferedPacketList& BufferedPacketList::operator=(BufferedPacketList&& other) = |
- default; |
- |
-BufferedPacketList::~BufferedPacketList() {} |
- |
-QuicBufferedPacketStore::QuicBufferedPacketStore( |
- VisitorInterface* visitor, |
- const QuicClock* clock, |
- QuicAlarmFactory* alarm_factory) |
- : connection_life_span_( |
- QuicTime::Delta::FromSeconds(kInitialIdleTimeoutSecs)), |
- visitor_(visitor), |
- clock_(clock), |
- expiration_alarm_( |
- alarm_factory->CreateAlarm(new ConnectionExpireAlarm(this))) {} |
- |
-QuicBufferedPacketStore::~QuicBufferedPacketStore() {} |
- |
-EnqueuePacketResult QuicBufferedPacketStore::EnqueuePacket( |
- QuicConnectionId connection_id, |
- const QuicReceivedPacket& packet, |
- IPEndPoint server_address, |
- IPEndPoint client_address) { |
- if (!ContainsKey(undecryptable_packets_, connection_id) && |
- undecryptable_packets_.size() >= kDefaultMaxConnectionsInStore) { |
- // Drop the packet if store can't keep track of more connections. |
- return TOO_MANY_CONNECTIONS; |
- } else if (!ContainsKey(undecryptable_packets_, connection_id)) { |
- undecryptable_packets_.emplace( |
- std::make_pair(connection_id, BufferedPacketList())); |
- } |
- CHECK(ContainsKey(undecryptable_packets_, connection_id)); |
- BufferedPacketList& queue = |
- undecryptable_packets_.find(connection_id)->second; |
- |
- if (queue.buffered_packets.size() >= kDefaultMaxUndecryptablePackets) { |
- // If there are kMaxBufferedPacketsPerConnection packets buffered up for |
- // this connection, drop the current packet. |
- return TOO_MANY_PACKETS; |
- } |
- |
- if (queue.buffered_packets.empty()) { |
- // If this is the first packet arrived on a new connection, initialize the |
- // creation time. |
- queue.creation_time = clock_->ApproximateNow(); |
- } |
- |
- BufferedPacket new_entry(std::unique_ptr<QuicReceivedPacket>(packet.Clone()), |
- server_address, client_address); |
- |
- queue.buffered_packets.push_back(std::move(new_entry)); |
- |
- if (!expiration_alarm_->IsSet()) { |
- expiration_alarm_->Set(clock_->ApproximateNow() + connection_life_span_); |
- } |
- return SUCCESS; |
-} |
- |
-bool QuicBufferedPacketStore::HasBufferedPackets( |
- QuicConnectionId connection_id) const { |
- return ContainsKey(undecryptable_packets_, connection_id); |
-} |
- |
-list<BufferedPacket> QuicBufferedPacketStore::DeliverPackets( |
- QuicConnectionId connection_id) { |
- list<BufferedPacket> packets_to_deliver; |
- auto it = undecryptable_packets_.find(connection_id); |
- if (it != undecryptable_packets_.end()) { |
- packets_to_deliver = std::move(it->second.buffered_packets); |
- undecryptable_packets_.erase(connection_id); |
- } |
- return packets_to_deliver; |
-} |
- |
-void QuicBufferedPacketStore::OnExpirationTimeout() { |
- QuicTime expiration_time = clock_->ApproximateNow() - connection_life_span_; |
- while (!undecryptable_packets_.empty()) { |
- auto& entry = undecryptable_packets_.front(); |
- if (entry.second.creation_time > expiration_time) { |
- break; |
- } |
- visitor_->OnExpiredPackets(entry.first, std::move(entry.second)); |
- undecryptable_packets_.erase(undecryptable_packets_.begin()); |
- } |
- if (!undecryptable_packets_.empty()) { |
- expiration_alarm_->Set(clock_->ApproximateNow() + connection_life_span_); |
- } |
-} |
- |
-} // namespace net |