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

Unified Diff: net/spdy/spdy_framer.cc

Issue 244853004: SPDY: Replace SerializeDataFrameHeader. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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_framer.h ('k') | net/spdy/spdy_framer_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_framer.cc
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc
index 9ed6e0c5d7597cb9511fa4be7f51248a96325af8..85578515861a97680cd3142d72a437b8fa1ac618 100644
--- a/net/spdy/spdy_framer.cc
+++ b/net/spdy/spdy_framer.cc
@@ -2031,72 +2031,88 @@ size_t SpdyFramer::ParseHeaderBlockInBuffer(const char* header_data,
return reader.GetBytesConsumed();
}
-SpdySerializedFrame* SpdyFramer::SerializeData(const SpdyDataIR& datair) const {
+SpdySerializedFrame* SpdyFramer::SerializeData(
+ const SpdyDataIR& data_ir) const {
uint8 flags = DATA_FLAG_NONE;
- if (datair.fin()) {
+ if (data_ir.fin()) {
flags = DATA_FLAG_FIN;
}
if (protocol_version() > SPDY3) {
int num_padding_fields = 0;
- if (datair.pad_low()) {
+ if (data_ir.pad_low()) {
flags |= DATA_FLAG_PAD_LOW;
++num_padding_fields;
}
- if (datair.pad_high()) {
+ if (data_ir.pad_high()) {
flags |= DATA_FLAG_PAD_HIGH;
++num_padding_fields;
}
const size_t size_with_padding = num_padding_fields +
- datair.data().length() + datair.padding_payload_len() +
+ data_ir.data().length() + data_ir.padding_payload_len() +
GetDataFrameMinimumSize();
SpdyFrameBuilder builder(size_with_padding);
- builder.WriteDataFrameHeader(*this, datair.stream_id(), flags);
- if (datair.pad_high()) {
- builder.WriteUInt8(datair.padding_payload_len() >> 8);
+ builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
+ if (data_ir.pad_high()) {
+ builder.WriteUInt8(data_ir.padding_payload_len() >> 8);
}
- if (datair.pad_low()) {
- builder.WriteUInt8(datair.padding_payload_len() & 0xff);
+ if (data_ir.pad_low()) {
+ builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
}
- builder.WriteBytes(datair.data().data(), datair.data().length());
- if (datair.padding_payload_len() > 0) {
- string padding = string(datair.padding_payload_len(), '0');
+ builder.WriteBytes(data_ir.data().data(), data_ir.data().length());
+ if (data_ir.padding_payload_len() > 0) {
+ string padding = string(data_ir.padding_payload_len(), '0');
builder.WriteBytes(padding.data(), padding.length());
}
DCHECK_EQ(size_with_padding, builder.length());
return builder.take();
} else {
- const size_t size = GetDataFrameMinimumSize() + datair.data().length();
+ const size_t size = GetDataFrameMinimumSize() + data_ir.data().length();
SpdyFrameBuilder builder(size);
- builder.WriteDataFrameHeader(*this, datair.stream_id(), flags);
- builder.WriteBytes(datair.data().data(), datair.data().length());
+ builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
+ builder.WriteBytes(data_ir.data().data(), data_ir.data().length());
DCHECK_EQ(size, builder.length());
return builder.take();
}
}
-SpdySerializedFrame* SpdyFramer::SerializeDataFrameHeader(
- const SpdyDataIR& data) const {
- const size_t kSize = GetDataFrameMinimumSize();
-
+SpdySerializedFrame* SpdyFramer::SerializeDataFrameHeaderWithPaddingLengthField(
+ const SpdyDataIR& data_ir) const {
uint8 flags = DATA_FLAG_NONE;
- if (data.fin()) {
+ if (data_ir.fin()) {
flags = DATA_FLAG_FIN;
}
+
+ size_t frame_size = GetDataFrameMinimumSize();
+ size_t num_padding_fields = 0;
if (protocol_version() > SPDY3) {
- if (data.pad_low()) {
+ if (data_ir.pad_low()) {
flags |= DATA_FLAG_PAD_LOW;
+ ++num_padding_fields;
}
- if (data.pad_high()) {
+ if (data_ir.pad_high()) {
flags |= DATA_FLAG_PAD_HIGH;
+ ++num_padding_fields;
}
+ frame_size += num_padding_fields;
}
- SpdyFrameBuilder builder(kSize);
- builder.WriteDataFrameHeader(*this, data.stream_id(), flags);
- builder.OverwriteLength(*this, data.data().length());
- DCHECK_EQ(kSize, builder.length());
+ SpdyFrameBuilder builder(frame_size);
+ builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
+ if (protocol_version() > SPDY3) {
+ if (data_ir.pad_high()) {
+ builder.WriteUInt8(data_ir.padding_payload_len() >> 8);
+ }
+ if (data_ir.pad_low()) {
+ builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
+ }
+ builder.OverwriteLength(*this, num_padding_fields +
+ data_ir.data().length() + data_ir.padding_payload_len());
+ } else {
+ builder.OverwriteLength(*this, data_ir.data().length());
+ }
+ DCHECK_EQ(frame_size, builder.length());
return builder.take();
}
« no previous file with comments | « net/spdy/spdy_framer.h ('k') | net/spdy/spdy_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698