diff options
Diffstat (limited to 'chromium/net/quic/quic_buffered_packet_store.cc')
-rw-r--r-- | chromium/net/quic/quic_buffered_packet_store.cc | 149 |
1 files changed, 0 insertions, 149 deletions
diff --git a/chromium/net/quic/quic_buffered_packet_store.cc b/chromium/net/quic/quic_buffered_packet_store.cc deleted file mode 100644 index 5d6b8805684..00000000000 --- a/chromium/net/quic/quic_buffered_packet_store.cc +++ /dev/null @@ -1,149 +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().Add(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().Subtract(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().Add(connection_life_span_)); - } -} - -} // namespace net |