// Copyright (c) 2017 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. #ifndef QUICHE_QUIC_CORE_QUIC_CONTROL_FRAME_MANAGER_H_ #define QUICHE_QUIC_CORE_QUIC_CONTROL_FRAME_MANAGER_H_ #include <cstdint> #include <string> #include "absl/container/flat_hash_map.h" #include "quiche/quic/core/frames/quic_frame.h" #include "quiche/quic/core/quic_connection_id.h" #include "quiche/quic/core/quic_error_codes.h" #include "quiche/quic/core/quic_types.h" #include "quiche/common/quiche_circular_deque.h" #include "quiche/common/quiche_linked_hash_map.h" namespace quic { class QuicSession; namespace test { class QuicControlFrameManagerPeer; } // namespace test // Control frame manager contains a list of sent control frames with valid // control frame IDs. Control frames without valid control frame IDs include: // (1) non-retransmittable frames (e.g., ACK_FRAME, PADDING_FRAME, // STOP_WAITING_FRAME, etc.), (2) CONNECTION_CLOSE and IETF Quic // APPLICATION_CLOSE frames. // New control frames are added to the tail of the list when they are added to // the generator. Control frames are removed from the head of the list when they // get acked. Control frame manager also keeps track of lost control frames // which need to be retransmitted. class QUICHE_EXPORT QuicControlFrameManager { … }; } // namespace quic #endif // QUICHE_QUIC_CORE_QUIC_CONTROL_FRAME_MANAGER_H_