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

Unified Diff: net/quic/quic_multipath_received_packet_manager.cc

Issue 1548703002: Add class QuicMultipathReceivedPacketManager (not in use currently). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@110446931
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: net/quic/quic_multipath_received_packet_manager.cc
diff --git a/net/quic/quic_multipath_received_packet_manager.cc b/net/quic/quic_multipath_received_packet_manager.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a13acc687438baa400408d3cb2e6e8afc4c35467
--- /dev/null
+++ b/net/quic/quic_multipath_received_packet_manager.cc
@@ -0,0 +1,147 @@
+// Copyright (c) 2015 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_multipath_received_packet_manager.h"
+
+#include "base/stl_util.h"
+
+namespace net {
+
+QuicMultipathReceivedPacketManager::QuicMultipathReceivedPacketManager(
+ QuicConnectionStats* stats) {
+ path_managers_[kDefaultPathId] = new QuicReceivedPacketManager(stats);
+}
+
+QuicMultipathReceivedPacketManager::~QuicMultipathReceivedPacketManager() {
+ STLDeleteValues(&path_managers_);
+}
+
+void QuicMultipathReceivedPacketManager::OnPathCreated(
+ QuicPathId path_id,
+ QuicConnectionStats* stats) {
+ if (path_managers_[path_id] != nullptr) {
+ LOG(DFATAL) << "Received packet manager of path already exists: "
+ << static_cast<uint32>(path_id);
+ return;
+ }
+
+ path_managers_[path_id] = new QuicReceivedPacketManager(stats);
+}
+
+void QuicMultipathReceivedPacketManager::OnPathClosed(QuicPathId path_id) {
+ QuicReceivedPacketManager* manager = path_managers_[path_id];
+ if (manager == nullptr) {
+ LOG(DFATAL) << "Received packet manager of path does not exist: "
+ << static_cast<uint32>(path_id);
+ return;
+ }
+
+ delete manager;
+ path_managers_.erase(path_id);
+}
+
+void QuicMultipathReceivedPacketManager::RecordPacketReceived(
+ QuicPathId path_id,
+ QuicByteCount bytes,
+ const QuicPacketHeader& header,
+ QuicTime receipt_time) {
+ QuicReceivedPacketManager* manager = path_managers_[path_id];
+ if (manager == nullptr) {
+ LOG(DFATAL) << "Received a packet on a non-existent path.";
+ return;
+ }
+
+ manager->RecordPacketReceived(bytes, header, receipt_time);
+}
+
+void QuicMultipathReceivedPacketManager::RecordPacketRevived(
+ QuicPathId path_id,
+ QuicPacketNumber packet_number) {
+ QuicReceivedPacketManager* manager = path_managers_[path_id];
+ if (manager == nullptr) {
+ LOG(DFATAL) << "Revived a packet on a non-existent path.";
+ return;
+ }
+
+ manager->RecordPacketRevived(packet_number);
+}
+
+bool QuicMultipathReceivedPacketManager::IsMissing(
+ QuicPathId path_id,
+ QuicPacketNumber packet_number) {
+ QuicReceivedPacketManager* manager = path_managers_[path_id];
+ if (manager == nullptr) {
+ LOG(DFATAL) << "Check whether a packet is missing on a non-existent path.";
+ return true;
+ }
+
+ return manager->IsMissing(packet_number);
+}
+
+bool QuicMultipathReceivedPacketManager::IsAwaitingPacket(
+ QuicPathId path_id,
+ QuicPacketNumber packet_number) {
+ QuicReceivedPacketManager* manager = path_managers_[path_id];
+ if (manager == nullptr) {
+ LOG(DFATAL) << "Check whether a packet is awaited on a non-existent path.";
+ return false;
+ }
+
+ return manager->IsAwaitingPacket(packet_number);
+}
+
+void QuicMultipathReceivedPacketManager::UpdateReceivedPacketInfo(
+ std::vector<QuicAckFrame>* ack_frames,
+ QuicTime approximate_now,
+ bool force_all_paths) {
+ QuicAckFrame ack_frame;
+ for (std::pair<QuicPathId, QuicReceivedPacketManager*>
+ per_path_received_packet_manager : path_managers_) {
+ if (!force_all_paths &&
+ !per_path_received_packet_manager.second->ack_frame_updated()) {
+ continue;
+ }
+ per_path_received_packet_manager.second->UpdateReceivedPacketInfo(
+ &ack_frame, approximate_now);
+ ack_frames->push_back(ack_frame);
+ }
+}
+
+void QuicMultipathReceivedPacketManager::UpdatePacketInformationSentByPeer(
+ const std::vector<QuicStopWaitingFrame>& stop_waitings) {
+ for (QuicStopWaitingFrame stop_waiting : stop_waitings) {
+ QuicReceivedPacketManager* manager = path_managers_[stop_waiting.path_id];
+ if (manager != nullptr) {
+ manager->UpdatePacketInformationSentByPeer(stop_waiting);
+ }
+ }
+}
+
+bool QuicMultipathReceivedPacketManager::HasNewMissingPackets(
+ QuicPathId path_id) const {
+ MultipathReceivedPacketManagerMap::const_iterator it =
+ path_managers_.find(path_id);
+ if (it == path_managers_.end()) {
+ LOG(DFATAL)
+ << "Check whether has new missing packets on a non-existent path.";
+ return false;
+ }
+
+ return it->second->HasNewMissingPackets();
+}
+
+QuicPacketNumber
+QuicMultipathReceivedPacketManager::GetPeerLeastPacketAwaitingAck(
+ QuicPathId path_id) {
+ QuicReceivedPacketManager* manager = path_managers_[path_id];
+ if (manager == nullptr) {
+ LOG(DFATAL)
+ << "Try to get peer_least_packet_awaiting_ack of a non-existent path.";
+ return false;
+ }
+
+ return manager->peer_least_packet_awaiting_ack();
+}
+
+} // namespace net
« no previous file with comments | « net/quic/quic_multipath_received_packet_manager.h ('k') | net/quic/quic_multipath_received_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698