// 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_STREAM_SEND_BUFFER_H_ #define QUICHE_QUIC_CORE_QUIC_STREAM_SEND_BUFFER_H_ #include "absl/types/span.h" #include "quiche/quic/core/frames/quic_stream_frame.h" #include "quiche/quic/core/quic_interval_deque.h" #include "quiche/quic/core/quic_interval_set.h" #include "quiche/quic/core/quic_types.h" #include "quiche/common/platform/api/quiche_mem_slice.h" #include "quiche/common/quiche_circular_deque.h" namespace quic { namespace test { class QuicStreamSendBufferPeer; class QuicStreamPeer; } // namespace test class QuicDataWriter; // BufferedSlice comprises information of a piece of stream data stored in // contiguous memory space. Please note, BufferedSlice is constructed when // stream data is saved in send buffer and is removed when stream data is fully // acked. It is move-only. struct QUICHE_EXPORT BufferedSlice { … }; struct QUICHE_EXPORT StreamPendingRetransmission { … }; // QuicStreamSendBuffer contains a list of QuicStreamDataSlices. New data slices // are added to the tail of the list. Data slices are removed from the head of // the list when they get fully acked. Stream data can be retrieved and acked // across slice boundaries. class QUICHE_EXPORT QuicStreamSendBuffer { … }; } // namespace quic #endif // QUICHE_QUIC_CORE_QUIC_STREAM_SEND_BUFFER_H_