OLD | NEW |
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 #include "net/spdy/spdy_framer.h" | 5 #include "net/spdy/spdy_framer.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/third_party/valgrind/memcheck.h" | 9 #include "base/third_party/valgrind/memcheck.h" |
10 #include "net/spdy/spdy_frame_builder.h" | 10 #include "net/spdy/spdy_frame_builder.h" |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 SpdyFramer::SpdyFramer(SpdyMajorVersion version) | 154 SpdyFramer::SpdyFramer(SpdyMajorVersion version) |
155 : current_frame_buffer_(new char[kControlFrameBufferSize]), | 155 : current_frame_buffer_(new char[kControlFrameBufferSize]), |
156 expect_continuation_(0), | 156 expect_continuation_(0), |
157 visitor_(NULL), | 157 visitor_(NULL), |
158 debug_visitor_(NULL), | 158 debug_visitor_(NULL), |
159 display_protocol_("SPDY"), | 159 display_protocol_("SPDY"), |
160 protocol_version_(version), | 160 protocol_version_(version), |
161 enable_compression_(true), | 161 enable_compression_(true), |
162 syn_frame_processed_(false), | 162 syn_frame_processed_(false), |
163 probable_http_response_(false), | 163 probable_http_response_(false), |
164 end_stream_when_done_(false) { | 164 end_stream_when_done_(false), |
| 165 header_table_size_bound_(4096) { |
165 DCHECK_GE(protocol_version_, SPDY_MIN_VERSION); | 166 DCHECK_GE(protocol_version_, SPDY_MIN_VERSION); |
166 DCHECK_LE(protocol_version_, SPDY_MAX_VERSION); | 167 DCHECK_LE(protocol_version_, SPDY_MAX_VERSION); |
167 DCHECK_LE(kMaxControlFrameSize, | 168 DCHECK_LE(kMaxControlFrameSize, |
168 SpdyConstants::GetFrameMaximumSize(protocol_version_) + | 169 SpdyConstants::GetFrameMaximumSize(protocol_version_) + |
169 SpdyConstants::GetControlFrameHeaderSize(protocol_version_)); | 170 SpdyConstants::GetControlFrameHeaderSize(protocol_version_)); |
170 Reset(); | 171 Reset(); |
171 } | 172 } |
172 | 173 |
173 SpdyFramer::~SpdyFramer() { | 174 SpdyFramer::~SpdyFramer() { |
174 if (header_compressor_.get()) { | 175 if (header_compressor_.get()) { |
(...skipping 3019 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3194 len -= bytes_to_deliver; | 3195 len -= bytes_to_deliver; |
3195 if (!read_successfully) { | 3196 if (!read_successfully) { |
3196 // Assume that the problem was the header block was too large for the | 3197 // Assume that the problem was the header block was too large for the |
3197 // visitor. | 3198 // visitor. |
3198 set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE); | 3199 set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE); |
3199 } | 3200 } |
3200 } | 3201 } |
3201 return read_successfully; | 3202 return read_successfully; |
3202 } | 3203 } |
3203 | 3204 |
| 3205 void SpdyFramer::UpdateHeaderTableSizeSetting(uint32 value) { |
| 3206 header_table_size_bound_ = value; |
| 3207 GetHpackEncoder()->ApplyHeaderTableSizeSetting(value); |
| 3208 GetHpackDecoder()->ApplyHeaderTableSizeSetting(value); |
| 3209 } |
| 3210 |
| 3211 // Return size bound of the header compression table. |
| 3212 size_t SpdyFramer::header_table_size_bound() const { |
| 3213 return header_table_size_bound_; |
| 3214 } |
| 3215 |
3204 void SpdyFramer::SerializeNameValueBlockWithoutCompression( | 3216 void SpdyFramer::SerializeNameValueBlockWithoutCompression( |
3205 SpdyFrameBuilder* builder, | 3217 SpdyFrameBuilder* builder, |
3206 const SpdyNameValueBlock& name_value_block) const { | 3218 const SpdyNameValueBlock& name_value_block) const { |
3207 // Serialize number of headers. | 3219 // Serialize number of headers. |
3208 if (protocol_version() <= SPDY2) { | 3220 if (protocol_version() <= SPDY2) { |
3209 builder->WriteUInt16(static_cast<uint16>(name_value_block.size())); | 3221 builder->WriteUInt16(static_cast<uint16>(name_value_block.size())); |
3210 } else { | 3222 } else { |
3211 builder->WriteUInt32(name_value_block.size()); | 3223 builder->WriteUInt32(name_value_block.size()); |
3212 } | 3224 } |
3213 | 3225 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3279 #else | 3291 #else |
3280 WriteHeaderBlockToZ(&frame.name_value_block(), compressor); | 3292 WriteHeaderBlockToZ(&frame.name_value_block(), compressor); |
3281 #endif // defined(USE_SYSTEM_ZLIB) | 3293 #endif // defined(USE_SYSTEM_ZLIB) |
3282 | 3294 |
3283 int compressed_size = compressed_max_size - compressor->avail_out; | 3295 int compressed_size = compressed_max_size - compressor->avail_out; |
3284 builder->Seek(compressed_size); | 3296 builder->Seek(compressed_size); |
3285 builder->RewriteLength(*this); | 3297 builder->RewriteLength(*this); |
3286 } | 3298 } |
3287 | 3299 |
3288 } // namespace net | 3300 } // namespace net |
OLD | NEW |