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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_framer.h ('k') | net/spdy/spdy_framer_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // TODO(rtenhove) clean up frame buffer size calculations so that we aren't 5 // TODO(rtenhove) clean up frame buffer size calculations so that we aren't
6 // constantly adding and subtracting header sizes; this is ugly and error- 6 // constantly adding and subtracting header sizes; this is ugly and error-
7 // prone. 7 // prone.
8 8
9 #include "net/spdy/spdy_framer.h" 9 #include "net/spdy/spdy_framer.h"
10 10
(...skipping 2013 matching lines...) Expand 10 before | Expand all | Expand 10 after
2024 << num_headers << ")."; 2024 << num_headers << ").";
2025 return 0; 2025 return 0;
2026 } 2026 }
2027 2027
2028 // Store header. 2028 // Store header.
2029 (*block)[name] = value; 2029 (*block)[name] = value;
2030 } 2030 }
2031 return reader.GetBytesConsumed(); 2031 return reader.GetBytesConsumed();
2032 } 2032 }
2033 2033
2034 SpdySerializedFrame* SpdyFramer::SerializeData(const SpdyDataIR& datair) const { 2034 SpdySerializedFrame* SpdyFramer::SerializeData(
2035 const SpdyDataIR& data_ir) const {
2035 uint8 flags = DATA_FLAG_NONE; 2036 uint8 flags = DATA_FLAG_NONE;
2036 if (datair.fin()) { 2037 if (data_ir.fin()) {
2037 flags = DATA_FLAG_FIN; 2038 flags = DATA_FLAG_FIN;
2038 } 2039 }
2039 2040
2040 if (protocol_version() > SPDY3) { 2041 if (protocol_version() > SPDY3) {
2041 int num_padding_fields = 0; 2042 int num_padding_fields = 0;
2042 if (datair.pad_low()) { 2043 if (data_ir.pad_low()) {
2043 flags |= DATA_FLAG_PAD_LOW; 2044 flags |= DATA_FLAG_PAD_LOW;
2044 ++num_padding_fields; 2045 ++num_padding_fields;
2045 } 2046 }
2046 if (datair.pad_high()) { 2047 if (data_ir.pad_high()) {
2047 flags |= DATA_FLAG_PAD_HIGH; 2048 flags |= DATA_FLAG_PAD_HIGH;
2048 ++num_padding_fields; 2049 ++num_padding_fields;
2049 } 2050 }
2050 2051
2051 const size_t size_with_padding = num_padding_fields + 2052 const size_t size_with_padding = num_padding_fields +
2052 datair.data().length() + datair.padding_payload_len() + 2053 data_ir.data().length() + data_ir.padding_payload_len() +
2053 GetDataFrameMinimumSize(); 2054 GetDataFrameMinimumSize();
2054 SpdyFrameBuilder builder(size_with_padding); 2055 SpdyFrameBuilder builder(size_with_padding);
2055 builder.WriteDataFrameHeader(*this, datair.stream_id(), flags); 2056 builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
2056 if (datair.pad_high()) { 2057 if (data_ir.pad_high()) {
2057 builder.WriteUInt8(datair.padding_payload_len() >> 8); 2058 builder.WriteUInt8(data_ir.padding_payload_len() >> 8);
2058 } 2059 }
2059 if (datair.pad_low()) { 2060 if (data_ir.pad_low()) {
2060 builder.WriteUInt8(datair.padding_payload_len() & 0xff); 2061 builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
2061 } 2062 }
2062 builder.WriteBytes(datair.data().data(), datair.data().length()); 2063 builder.WriteBytes(data_ir.data().data(), data_ir.data().length());
2063 if (datair.padding_payload_len() > 0) { 2064 if (data_ir.padding_payload_len() > 0) {
2064 string padding = string(datair.padding_payload_len(), '0'); 2065 string padding = string(data_ir.padding_payload_len(), '0');
2065 builder.WriteBytes(padding.data(), padding.length()); 2066 builder.WriteBytes(padding.data(), padding.length());
2066 } 2067 }
2067 DCHECK_EQ(size_with_padding, builder.length()); 2068 DCHECK_EQ(size_with_padding, builder.length());
2068 return builder.take(); 2069 return builder.take();
2069 } else { 2070 } else {
2070 const size_t size = GetDataFrameMinimumSize() + datair.data().length(); 2071 const size_t size = GetDataFrameMinimumSize() + data_ir.data().length();
2071 SpdyFrameBuilder builder(size); 2072 SpdyFrameBuilder builder(size);
2072 builder.WriteDataFrameHeader(*this, datair.stream_id(), flags); 2073 builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
2073 builder.WriteBytes(datair.data().data(), datair.data().length()); 2074 builder.WriteBytes(data_ir.data().data(), data_ir.data().length());
2074 DCHECK_EQ(size, builder.length()); 2075 DCHECK_EQ(size, builder.length());
2075 return builder.take(); 2076 return builder.take();
2076 } 2077 }
2077 } 2078 }
2078 2079
2079 SpdySerializedFrame* SpdyFramer::SerializeDataFrameHeader( 2080 SpdySerializedFrame* SpdyFramer::SerializeDataFrameHeaderWithPaddingLengthField(
2080 const SpdyDataIR& data) const { 2081 const SpdyDataIR& data_ir) const {
2081 const size_t kSize = GetDataFrameMinimumSize();
2082
2083 uint8 flags = DATA_FLAG_NONE; 2082 uint8 flags = DATA_FLAG_NONE;
2084 if (data.fin()) { 2083 if (data_ir.fin()) {
2085 flags = DATA_FLAG_FIN; 2084 flags = DATA_FLAG_FIN;
2086 } 2085 }
2086
2087 size_t frame_size = GetDataFrameMinimumSize();
2088 size_t num_padding_fields = 0;
2087 if (protocol_version() > SPDY3) { 2089 if (protocol_version() > SPDY3) {
2088 if (data.pad_low()) { 2090 if (data_ir.pad_low()) {
2089 flags |= DATA_FLAG_PAD_LOW; 2091 flags |= DATA_FLAG_PAD_LOW;
2092 ++num_padding_fields;
2090 } 2093 }
2091 if (data.pad_high()) { 2094 if (data_ir.pad_high()) {
2092 flags |= DATA_FLAG_PAD_HIGH; 2095 flags |= DATA_FLAG_PAD_HIGH;
2096 ++num_padding_fields;
2093 } 2097 }
2098 frame_size += num_padding_fields;
2094 } 2099 }
2095 2100
2096 SpdyFrameBuilder builder(kSize); 2101 SpdyFrameBuilder builder(frame_size);
2097 builder.WriteDataFrameHeader(*this, data.stream_id(), flags); 2102 builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags);
2098 builder.OverwriteLength(*this, data.data().length()); 2103 if (protocol_version() > SPDY3) {
2099 DCHECK_EQ(kSize, builder.length()); 2104 if (data_ir.pad_high()) {
2105 builder.WriteUInt8(data_ir.padding_payload_len() >> 8);
2106 }
2107 if (data_ir.pad_low()) {
2108 builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
2109 }
2110 builder.OverwriteLength(*this, num_padding_fields +
2111 data_ir.data().length() + data_ir.padding_payload_len());
2112 } else {
2113 builder.OverwriteLength(*this, data_ir.data().length());
2114 }
2115 DCHECK_EQ(frame_size, builder.length());
2100 return builder.take(); 2116 return builder.take();
2101 } 2117 }
2102 2118
2103 SpdySerializedFrame* SpdyFramer::SerializeSynStream( 2119 SpdySerializedFrame* SpdyFramer::SerializeSynStream(
2104 const SpdySynStreamIR& syn_stream) { 2120 const SpdySynStreamIR& syn_stream) {
2105 uint8 flags = 0; 2121 uint8 flags = 0;
2106 if (syn_stream.fin()) { 2122 if (syn_stream.fin()) {
2107 flags |= CONTROL_FLAG_FIN; 2123 flags |= CONTROL_FLAG_FIN;
2108 } 2124 }
2109 if (syn_stream.unidirectional()) { 2125 if (syn_stream.unidirectional()) {
(...skipping 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
2867 builder->Seek(compressed_size); 2883 builder->Seek(compressed_size);
2868 builder->RewriteLength(*this); 2884 builder->RewriteLength(*this);
2869 2885
2870 pre_compress_bytes.Add(uncompressed_len); 2886 pre_compress_bytes.Add(uncompressed_len);
2871 post_compress_bytes.Add(compressed_size); 2887 post_compress_bytes.Add(compressed_size);
2872 2888
2873 compressed_frames.Increment(); 2889 compressed_frames.Increment();
2874 } 2890 }
2875 2891
2876 } // namespace net 2892 } // namespace net
OLDNEW
« 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