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

Side by Side Diff: net/spdy/spdy_framer.cc

Issue 1402373005: Remove description from HTTP/2 RST_STREAM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « net/spdy/buffered_spdy_framer.cc ('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 #include "net/spdy/spdy_framer.h" 5 #include "net/spdy/spdy_framer.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <iterator> 10 #include <iterator>
(...skipping 935 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 } 946 }
947 break; 947 break;
948 case SYN_REPLY: 948 case SYN_REPLY:
949 if (current_frame_length_ < GetSynReplyMinimumSize()) { 949 if (current_frame_length_ < GetSynReplyMinimumSize()) {
950 set_error(SPDY_INVALID_CONTROL_FRAME); 950 set_error(SPDY_INVALID_CONTROL_FRAME);
951 } else if (current_frame_flags_ & ~CONTROL_FLAG_FIN) { 951 } else if (current_frame_flags_ & ~CONTROL_FLAG_FIN) {
952 set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); 952 set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS);
953 } 953 }
954 break; 954 break;
955 case RST_STREAM: 955 case RST_STREAM:
956 // For SPDY versions < 4, the header has a fixed length. 956 // TODO(bnc): Enforce the length of the header, and change error to
957 // For SPDY version 4 and up, the RST_STREAM frame may include optional 957 // FRAME_SIZE_ERROR.
958 // opaque data, so we only have a lower limit on the frame size.
959 if ((current_frame_length_ != GetRstStreamMinimumSize() && 958 if ((current_frame_length_ != GetRstStreamMinimumSize() &&
960 protocol_version() <= SPDY3) || 959 protocol_version() <= SPDY3) ||
961 (current_frame_length_ < GetRstStreamMinimumSize() && 960 (current_frame_length_ < GetRstStreamMinimumSize() &&
962 protocol_version() > SPDY3)) { 961 protocol_version() > SPDY3)) {
963 set_error(SPDY_INVALID_CONTROL_FRAME); 962 set_error(SPDY_INVALID_CONTROL_FRAME);
964 } else if (current_frame_flags_ != 0) { 963 } else if (current_frame_flags_ != 0) {
965 set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); 964 set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS);
966 } 965 }
967 break; 966 break;
968 case SETTINGS: 967 case SETTINGS:
(...skipping 1466 matching lines...) Expand 10 before | Expand all | Expand 10 after
2435 } 2434 }
2436 2435
2437 SpdySerializedFrame* SpdyFramer::SerializeRstStream( 2436 SpdySerializedFrame* SpdyFramer::SerializeRstStream(
2438 const SpdyRstStreamIR& rst_stream) const { 2437 const SpdyRstStreamIR& rst_stream) const {
2439 // TODO(jgraettinger): For now, Chromium will support parsing RST_STREAM 2438 // TODO(jgraettinger): For now, Chromium will support parsing RST_STREAM
2440 // payloads, but will not emit them. SPDY4 is used for draft HTTP/2, 2439 // payloads, but will not emit them. SPDY4 is used for draft HTTP/2,
2441 // which doesn't currently include RST_STREAM payloads. GFE flags have been 2440 // which doesn't currently include RST_STREAM payloads. GFE flags have been
2442 // commented but left in place to simplify future patching. 2441 // commented but left in place to simplify future patching.
2443 // Compute the output buffer size, taking opaque data into account. 2442 // Compute the output buffer size, taking opaque data into account.
2444 size_t expected_length = GetRstStreamMinimumSize(); 2443 size_t expected_length = GetRstStreamMinimumSize();
2445 if (protocol_version() > SPDY3) {
2446 expected_length += rst_stream.description().size();
2447 }
2448 SpdyFrameBuilder builder(expected_length, protocol_version()); 2444 SpdyFrameBuilder builder(expected_length, protocol_version());
2449 2445
2450 // Serialize the RST_STREAM frame. 2446 // Serialize the RST_STREAM frame.
2451 if (protocol_version() <= SPDY3) { 2447 if (protocol_version() <= SPDY3) {
2452 builder.WriteControlFrameHeader(*this, RST_STREAM, 0); 2448 builder.WriteControlFrameHeader(*this, RST_STREAM, 0);
2453 builder.WriteUInt32(rst_stream.stream_id()); 2449 builder.WriteUInt32(rst_stream.stream_id());
2454 } else { 2450 } else {
2455 builder.BeginNewFrame(*this, RST_STREAM, 0, rst_stream.stream_id()); 2451 builder.BeginNewFrame(*this, RST_STREAM, 0, rst_stream.stream_id());
2456 } 2452 }
2457 2453
2458 builder.WriteUInt32(SpdyConstants::SerializeRstStreamStatus( 2454 builder.WriteUInt32(SpdyConstants::SerializeRstStreamStatus(
2459 protocol_version(), rst_stream.status())); 2455 protocol_version(), rst_stream.status()));
2460 2456
2461 // In HTTP2 and up, RST_STREAM frames may also specify opaque data.
2462 if (protocol_version() > SPDY3 && rst_stream.description().size() > 0) {
2463 builder.WriteBytes(rst_stream.description().data(),
2464 rst_stream.description().size());
2465 }
2466
2467 DCHECK_EQ(expected_length, builder.length()); 2457 DCHECK_EQ(expected_length, builder.length());
2468 return builder.take(); 2458 return builder.take();
2469 } 2459 }
2470 2460
2471 SpdySerializedFrame* SpdyFramer::SerializeSettings( 2461 SpdySerializedFrame* SpdyFramer::SerializeSettings(
2472 const SpdySettingsIR& settings) const { 2462 const SpdySettingsIR& settings) const {
2473 uint8 flags = 0; 2463 uint8 flags = 0;
2474 2464
2475 if (protocol_version() <= SPDY3) { 2465 if (protocol_version() <= SPDY3) {
2476 if (settings.clear_settings()) { 2466 if (settings.clear_settings()) {
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after
3250 #else 3240 #else
3251 WriteHeaderBlockToZ(&frame.header_block(), compressor); 3241 WriteHeaderBlockToZ(&frame.header_block(), compressor);
3252 #endif // defined(USE_SYSTEM_ZLIB) 3242 #endif // defined(USE_SYSTEM_ZLIB)
3253 3243
3254 int compressed_size = compressed_max_size - compressor->avail_out; 3244 int compressed_size = compressed_max_size - compressor->avail_out;
3255 builder->Seek(compressed_size); 3245 builder->Seek(compressed_size);
3256 builder->RewriteLength(*this); 3246 builder->RewriteLength(*this);
3257 } 3247 }
3258 3248
3259 } // namespace net 3249 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/buffered_spdy_framer.cc ('k') | net/spdy/spdy_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698