Home | History | Annotate | Download | only in spdy
      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.
     33   DrainableIOBuffer* buffer() const { return buffer_; }
     34   size_t size() const { return buffer_->size(); }
     35   void release();
     36   int priority() const { return priority_; }
     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