diff options
Diffstat (limited to 'net/spdy/spdy_io_buffer.h')
-rw-r--r-- | net/spdy/spdy_io_buffer.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/net/spdy/spdy_io_buffer.h b/net/spdy/spdy_io_buffer.h new file mode 100644 index 0000000..08e40bb --- /dev/null +++ b/net/spdy/spdy_io_buffer.h @@ -0,0 +1,55 @@ +// Copyright (c) 2009 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 NET_SPDY_SPDY_IO_BUFFER_H_ +#define NET_SPDY_SPDY_IO_BUFFER_H_ + +#include "base/ref_counted.h" +#include "net/base/io_buffer.h" + +namespace net { + +class FlipStream; + +// A class for managing FLIP IO buffers. These buffers need to be prioritized +// so that the FlipSession sends them in the right order. Further, they need +// to track the FlipStream which they are associated with so that incremental +// completion of the IO can notify the appropriate stream of completion. +class FlipIOBuffer { + public: + // Constructor + // |buffer| is the actual data buffer. + // |size| is the size of the data buffer. + // |priority| is the priority of this buffer. Lower numbers are higher + // priority. + // |stream| is a pointer to the stream which is managing this buffer. + FlipIOBuffer(IOBuffer* buffer, int size, int priority, FlipStream* stream); + FlipIOBuffer(); + ~FlipIOBuffer(); + + // Accessors. + DrainableIOBuffer* buffer() const { return buffer_; } + size_t size() const { return buffer_->size(); } + void release(); + int priority() const { return priority_; } + const scoped_refptr<FlipStream>& stream() const { return stream_; } + + // Comparison operator to support sorting. + bool operator<(const FlipIOBuffer& other) const { + if (priority_ != other.priority_) + return priority_ > other.priority_; + return position_ > other.position_; + } + + private: + scoped_refptr<DrainableIOBuffer> buffer_; + int priority_; + uint64 position_; + scoped_refptr<FlipStream> stream_; + static uint64 order_; // Maintains a FIFO order for equal priorities. +}; + +} // namespace net + +#endif // NET_SPDY_SPDY_IO_BUFFER_H_ |