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

Unified Diff: net/quic/quic_stream_sequencer_buffer_interface.h

Issue 1414573004: Introduces QuicStreamSequencerBufferInterface with one implementation. Refactor, no behavior change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing the build file (previously missing a comma) Created 5 years, 2 months 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_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_

Powered by Google App Engine
This is Rietveld 408576698