| Index: net/quic/quic_stream_sequencer_buffer_interface.h
|
| diff --git a/net/quic/quic_stream_sequencer_buffer_interface.h b/net/quic/quic_stream_sequencer_buffer_interface.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ae87a4960a70c8d2ab1dd588d2beeb99ffadafbf
|
| --- /dev/null
|
| +++ b/net/quic/quic_stream_sequencer_buffer_interface.h
|
| @@ -0,0 +1,73 @@
|
| +#ifndef NET_QUIC_QUIC_STREAM_SEQUENCER_BUFFER_INTERFACE_H_
|
| +#define NET_QUIC_QUIC_STREAM_SEQUENCER_BUFFER_INTERFACE_H_
|
| +
|
| +#include "net/quic/quic_frame_list.h"
|
| +#include "net/quic/quic_protocol.h"
|
| +
|
| +using base::StringPiece;
|
| +
|
| +namespace net {
|
| +
|
| +// The QuicStreamSequencer uses an implementation of this interface to store
|
| +// received data.
|
| +class NET_EXPORT_PRIVATE QuicStreamSequencerBufferInterface {
|
| + public:
|
| + virtual ~QuicStreamSequencerBufferInterface() {}
|
| +
|
| + // Free the space used to buffer data.
|
| + virtual void Clear() = 0;
|
| +
|
| + // Returns true if there is nothing to read in this buffer.
|
| + virtual bool Empty() const = 0;
|
| +
|
| + // Called to buffer new data received for this stream. If the data was
|
| + // successfully buffered, returns QUIC_NO_ERROR and stores the number of
|
| + // bytes buffered in |bytes_buffered|. Returns an error otherwise.
|
| + // |timestamp| is the time the data arrived.
|
| + virtual QuicErrorCode OnStreamData(QuicStreamOffset offset,
|
| + StringPiece data,
|
| + QuicTime timestamp,
|
| + size_t* bytes_buffered) = 0;
|
| +
|
| + // Reads from this buffer into given iovec array, up to number of iov_len
|
| + // iovec objects and returns the number of bytes read.
|
| + virtual size_t Readv(const struct iovec* iov, size_t iov_len) = 0;
|
| +
|
| + // Returns the readable region of valid data in iovec format. The readable
|
| + // region is the buffer region where there is valid data not yet read by
|
| + // client.
|
| + // Returns the number of iovec entries in |iov| which were populated.
|
| + // If the region is empty, one iovec entry with 0 length
|
| + // is returned, and the function returns 0. If there are more readable
|
| + // regions than iov_size, the function only processes the first
|
| + // iov_size of them.
|
| + virtual int GetReadableRegions(struct iovec* iov, int iov_len) const = 0;
|
| +
|
| + // Fills in one iovec with data which all arrived at the same time from the
|
| + // next readable region.
|
| + // Populates |timestamp| with the time that this data arrived.
|
| + // Returns false if there is no readable region available.
|
| + virtual bool GetReadableRegion(iovec* iov, QuicTime* timestamp) const = 0;
|
| +
|
| + // Called after GetReadableRegions() to free up |bytes_used| space if these
|
| + // bytes are processed.
|
| + // Pre-requisite: bytes_used <= available bytes to read.
|
| + virtual bool MarkConsumed(size_t bytes_used) = 0;
|
| +
|
| + // Deletes and records as consumed any buffered data and clear the buffer.
|
| + // (To be called only after sequencer's StopReading has been called.)
|
| + virtual size_t FlushBufferedFrames() = 0;
|
| +
|
| + // Whether there are bytes can be read out.
|
| + virtual bool HasBytesToRead() const = 0;
|
| +
|
| + // Count how many bytes have been consumed (read out of buffer).
|
| + virtual QuicStreamOffset BytesConsumed() const = 0;
|
| +
|
| + // Count how many bytes are in buffer at this moment.
|
| + virtual size_t BytesBuffered() const = 0;
|
| +};
|
| +
|
| +} // namespace net
|
| +
|
| +#endif // NET_QUIC_QUIC_STREAM_SEQUENCER_BUFFER_INTERFACE_H_
|
|
|