| // Copyright 2014 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 COMPONENTS_PAIRING_MESSAGE_BUFFER_H_ |
| #define COMPONENTS_PAIRING_MESSAGE_BUFFER_H_ |
| |
| #include <deque> |
| |
| #include "base/logging.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| |
| namespace net { |
| class IOBuffer; |
| } |
| |
| namespace pairing_chromeos { |
| |
| // A MessageBuffer is a simple wrapper around an ordered set of buffers received |
| // from a socket. It keeps track of the amount of unread data, and allows data |
| // to be retreived that was split across buffers in a single chunk. |
| class MessageBuffer { |
| public: |
| MessageBuffer(); |
| ~MessageBuffer(); |
| |
| // Returns the number of bytes currently received, but not yet read. |
| int AvailableBytes(); |
| |
| // Read |size| bytes into |buffer|. |size| must be smaller than or equal to |
| // the current number of available bytes. |
| void ReadBytes(char* buffer, int size); |
| |
| // Add the data from an IOBuffer. A reference to the IOBuffer will be |
| // maintained until it is drained. |
| void AddIOBuffer(scoped_refptr<net::IOBuffer> io_buffer, int size); |
| |
| private: |
| // Offset of the next byte to be read from the current IOBuffer. |
| int buffer_offset_; |
| // Total number of bytes in IOBuffers in |pending_data_|, including bytes that |
| // have already been read. |
| int total_buffer_size_; |
| std::deque<std::pair<scoped_refptr<net::IOBuffer>, int> > pending_data_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MessageBuffer); |
| }; |
| |
| } // namespace pairing_chromeos |
| |
| #endif // COMPONENTS_PAIRING_MESSAGE_BUFFER_H_ |