| Index: net/spdy/spdy_buffer.cc
|
| diff --git a/net/spdy/spdy_buffer.cc b/net/spdy/spdy_buffer.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3257befc8518a3b7a47d83d6e636a2da82dcab03
|
| --- /dev/null
|
| +++ b/net/spdy/spdy_buffer.cc
|
| @@ -0,0 +1,61 @@
|
| +// Copyright (c) 2013 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.
|
| +
|
| +#include "net/spdy/spdy_buffer.h"
|
| +
|
| +#include <cstring>
|
| +
|
| +#include "base/logging.h"
|
| +#include "net/base/io_buffer.h"
|
| +#include "net/spdy/spdy_protocol.h"
|
| +
|
| +namespace net {
|
| +
|
| +namespace {
|
| +
|
| +// Makes a SpdyFrame with |size| bytes of data copied from
|
| +// |data|. |data| must be non-NULL and |size| must be positive.
|
| +scoped_ptr<SpdyFrame> MakeSpdyFrame(const char* data, size_t size) {
|
| + DCHECK(data);
|
| + DCHECK_GT(size, 0u);
|
| + scoped_array<char> frame_data(new char[size]);
|
| + std::memcpy(frame_data.get(), data, size);
|
| + scoped_ptr<SpdyFrame> frame(
|
| + new SpdyFrame(frame_data.release(), size, true /* owns_buffer */));
|
| + return frame.Pass();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +SpdyBuffer::SpdyBuffer(scoped_ptr<SpdyFrame> frame)
|
| + : frame_(frame.Pass()),
|
| + offset_(0) {}
|
| +
|
| +// The given data may not be strictly a SPDY frame; we (ab)use
|
| +// |frame_| just as a container.
|
| +SpdyBuffer::SpdyBuffer(const char* data, size_t size) :
|
| + frame_(MakeSpdyFrame(data, size)),
|
| + offset_(0) {}
|
| +
|
| +SpdyBuffer::~SpdyBuffer() {}
|
| +
|
| +const char* SpdyBuffer::GetRemainingData() const {
|
| + return frame_->data() + offset_;
|
| +}
|
| +
|
| +size_t SpdyBuffer::GetRemainingSize() const {
|
| + return frame_->size() - offset_;
|
| +}
|
| +
|
| +void SpdyBuffer::Consume(size_t consume_size) {
|
| + DCHECK_GE(consume_size, 1u);
|
| + DCHECK_LE(consume_size, GetRemainingSize());
|
| + offset_ += consume_size;
|
| +};
|
| +
|
| +IOBuffer* SpdyBuffer::GetIOBufferForRemainingData() {
|
| + return new WrappedIOBuffer(GetRemainingData());
|
| +}
|
| +
|
| +} // namespace net
|
|
|