Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Unified Diff: net/spdy/spdy_frame_builder.cc

Issue 9618002: SPDY - integration of spdy/3 code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_frame_builder.h ('k') | net/spdy/spdy_frame_reader.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_frame_builder.cc
===================================================================
--- net/spdy/spdy_frame_builder.cc (revision 126086)
+++ net/spdy/spdy_frame_builder.cc (working copy)
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -12,14 +12,6 @@
// We mark a read only SpdyFrameBuilder with a special capacity_.
static const size_t kCapacityReadOnly = std::numeric_limits<size_t>::max();
-SpdyFrameBuilder::SpdyFrameBuilder()
- : buffer_(NULL),
- capacity_(0),
- length_(0),
- variable_buffer_offset_(0) {
- Resize(kInitialPayload);
-}
-
SpdyFrameBuilder::SpdyFrameBuilder(size_t size)
: buffer_(NULL),
capacity_(0),
@@ -28,121 +20,11 @@
Resize(size);
}
-SpdyFrameBuilder::SpdyFrameBuilder(const char* data, int data_len)
- : buffer_(const_cast<char*>(data)),
- capacity_(kCapacityReadOnly),
- length_(data_len),
- variable_buffer_offset_(0) {
-}
-
SpdyFrameBuilder::~SpdyFrameBuilder() {
- if (capacity_ != kCapacityReadOnly)
+ if (buffer_)
delete[] buffer_;
}
-bool SpdyFrameBuilder::ReadUInt16(void** iter, uint16* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(buffer_);
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- *result = ntohs(*(reinterpret_cast<uint16*>(*iter)));
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool SpdyFrameBuilder::ReadUInt32(void** iter, uint32* result) const {
- DCHECK(iter);
- if (!*iter)
- *iter = const_cast<char*>(buffer_);
-
- if (!IteratorHasRoomFor(*iter, sizeof(*result)))
- return false;
-
- *result = ntohl(*(reinterpret_cast<uint32*>(*iter)));
-
- UpdateIter(iter, sizeof(*result));
- return true;
-}
-
-bool SpdyFrameBuilder::ReadString(void** iter, std::string* result) const {
- DCHECK(iter);
-
- uint16 len;
- if (!ReadUInt16(iter, &len))
- return false;
-
- if (!IteratorHasRoomFor(*iter, len))
- return false;
-
- char* chars = reinterpret_cast<char*>(*iter);
- result->assign(chars, len);
-
- UpdateIter(iter, len);
- return true;
-}
-
-bool SpdyFrameBuilder::ReadBytes(void** iter, const char** data,
- uint32 length) const {
- DCHECK(iter);
- DCHECK(data);
-
- if (!IteratorHasRoomFor(*iter, length))
- return false;
-
- *data = reinterpret_cast<const char*>(*iter);
-
- UpdateIter(iter, length);
- return true;
-}
-
-bool SpdyFrameBuilder::ReadData(void** iter, const char** data,
- uint16* length) const {
- DCHECK(iter);
- DCHECK(data);
- DCHECK(length);
-
- if (!ReadUInt16(iter, length))
- return false;
-
- return ReadBytes(iter, data, *length);
-}
-
-bool SpdyFrameBuilder::ReadReadLen32PrefixedData(void** iter,
- const char** data,
- uint32* length) const {
- DCHECK(iter);
- DCHECK(data);
- DCHECK(length);
-
- if (!ReadUInt32(iter, length))
- return false;
-
- return ReadBytes(iter, data, *length);
-}
-
-char* SpdyFrameBuilder::BeginWriteData(uint16 length) {
- DCHECK_EQ(variable_buffer_offset_, 0U) <<
- "There can only be one variable buffer in a SpdyFrameBuilder";
-
- if (!WriteUInt16(length))
- return NULL;
-
- char *data_ptr = BeginWrite(length);
- if (!data_ptr)
- return NULL;
-
- variable_buffer_offset_ = data_ptr - buffer_ - sizeof(int);
-
- // EndWrite doesn't necessarily have to be called after the write operation,
- // so we call it here to pad out what the caller will eventually write.
- EndWrite(data_ptr, length);
- return data_ptr;
-}
-
char* SpdyFrameBuilder::BeginWrite(size_t length) {
size_t offset = length_;
size_t needed_size = length_ + length;
@@ -160,8 +42,6 @@
}
bool SpdyFrameBuilder::WriteBytes(const void* data, uint32 data_len) {
- DCHECK(capacity_ != kCapacityReadOnly);
-
if (data_len > kLengthMask) {
return false;
}
@@ -187,10 +67,18 @@
return WriteBytes(value.data(), static_cast<uint16>(value.size()));
}
+bool SpdyFrameBuilder::WriteStringPiece32(const base::StringPiece& value) {
+ if (!WriteUInt32(value.size())) {
+ return false;
+ }
+
+ return WriteBytes(value.data(), value.size());
+}
+
// TODO(hkhalil) Remove Resize() entirely.
bool SpdyFrameBuilder::Resize(size_t new_capacity) {
DCHECK(new_capacity > 0);
- if (new_capacity <= capacity_)
+ if (new_capacity < capacity_)
return true;
char* p = new char[new_capacity];
@@ -198,6 +86,8 @@
memcpy(p, buffer_, capacity_);
delete[] buffer_;
}
+ if (!p && new_capacity > 0)
+ return false;
buffer_ = p;
capacity_ = new_capacity;
return true;
« no previous file with comments | « net/spdy/spdy_frame_builder.h ('k') | net/spdy/spdy_frame_reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698