• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef NET_SPDY_SPDY_IO_BUFFER_H_
6 #define NET_SPDY_SPDY_IO_BUFFER_H_
7 #pragma once
8 
9 #include "base/memory/ref_counted.h"
10 #include "net/base/io_buffer.h"
11 
12 namespace net {
13 
14 class SpdyStream;
15 
16 // A class for managing SPDY IO buffers.  These buffers need to be prioritized
17 // so that the SpdySession sends them in the right order.  Further, they need
18 // to track the SpdyStream which they are associated with so that incremental
19 // completion of the IO can notify the appropriate stream of completion.
20 class SpdyIOBuffer {
21  public:
22   // Constructor
23   // |buffer| is the actual data buffer.
24   // |size| is the size of the data buffer.
25   // |priority| is the priority of this buffer.  Lower numbers are higher
26   //            priority.
27   // |stream| is a pointer to the stream which is managing this buffer.
28   SpdyIOBuffer(IOBuffer* buffer, int size, int priority, SpdyStream* stream);
29   SpdyIOBuffer();
30   ~SpdyIOBuffer();
31 
32   // Accessors.
buffer()33   DrainableIOBuffer* buffer() const { return buffer_; }
size()34   size_t size() const { return buffer_->size(); }
35   void release();
priority()36   int priority() const { return priority_; }
stream()37   const scoped_refptr<SpdyStream>& stream() const { return stream_; }
38 
39   // Comparison operator to support sorting.
40   bool operator<(const SpdyIOBuffer& other) const {
41     if (priority_ != other.priority_)
42       return priority_ > other.priority_;
43     return position_ > other.position_;
44   }
45 
46  private:
47   scoped_refptr<DrainableIOBuffer> buffer_;
48   int priority_;
49   uint64 position_;
50   scoped_refptr<SpdyStream> stream_;
51   static uint64 order_;  // Maintains a FIFO order for equal priorities.
52 };
53 
54 }  // namespace net
55 
56 #endif  // NET_SPDY_SPDY_IO_BUFFER_H_
57