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

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

Issue 2675593002: Spdy{RstStream,GoAway}Status -> SpdyErrorCode. (Closed)
Patch Set: Merged master, which includes 145087791. Created 3 years, 10 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
« no previous file with comments | « net/spdy/spdy_framer.h ('k') | net/spdy/spdy_framer_decoder_adapter.h » ('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 <cctype> 10 #include <cctype>
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1292 remaining_data_length_); 1292 remaining_data_length_);
1293 remaining_data_length_ -= bytes_read; 1293 remaining_data_length_ -= bytes_read;
1294 if (remaining_data_length_ == 0) { 1294 if (remaining_data_length_ == 0) {
1295 SpdyFrameReader reader(current_frame_buffer_.data(), 1295 SpdyFrameReader reader(current_frame_buffer_.data(),
1296 current_frame_buffer_.len()); 1296 current_frame_buffer_.len());
1297 reader.Seek(GetFrameHeaderSize()); // Skip frame header. 1297 reader.Seek(GetFrameHeaderSize()); // Skip frame header.
1298 1298
1299 // Use frame-specific handlers. 1299 // Use frame-specific handlers.
1300 switch (current_frame_type_) { 1300 switch (current_frame_type_) {
1301 case RST_STREAM: { 1301 case RST_STREAM: {
1302 uint32_t status_raw = RST_STREAM_NO_ERROR; 1302 uint32_t error_code = ERROR_CODE_NO_ERROR;
1303 bool successful_read = reader.ReadUInt32(&status_raw); 1303 bool successful_read = reader.ReadUInt32(&error_code);
1304 DCHECK(successful_read); 1304 DCHECK(successful_read);
1305 DCHECK(reader.IsDoneReading()); 1305 DCHECK(reader.IsDoneReading());
1306 SpdyRstStreamStatus status = ParseRstStreamStatus(status_raw); 1306 visitor_->OnRstStream(current_frame_stream_id_,
1307 visitor_->OnRstStream(current_frame_stream_id_, status); 1307 ParseErrorCode(error_code));
1308 } break; 1308 } break;
1309 case PING: { 1309 case PING: {
1310 SpdyPingId id = 0; 1310 SpdyPingId id = 0;
1311 bool is_ack = current_frame_flags_ & PING_FLAG_ACK; 1311 bool is_ack = current_frame_flags_ & PING_FLAG_ACK;
1312 bool successful_read = true; 1312 bool successful_read = true;
1313 successful_read = reader.ReadUInt64(&id); 1313 successful_read = reader.ReadUInt64(&id);
1314 DCHECK(successful_read); 1314 DCHECK(successful_read);
1315 DCHECK(reader.IsDoneReading()); 1315 DCHECK(reader.IsDoneReading());
1316 visitor_->OnPing(id, is_ack); 1316 visitor_->OnPing(id, is_ack);
1317 } break; 1317 } break;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1377 // Do we have enough to parse the constant size GOAWAY header? 1377 // Do we have enough to parse the constant size GOAWAY header?
1378 if (current_frame_buffer_.len() == header_size) { 1378 if (current_frame_buffer_.len() == header_size) {
1379 // Parse out the last good stream id. 1379 // Parse out the last good stream id.
1380 SpdyFrameReader reader(current_frame_buffer_.data(), 1380 SpdyFrameReader reader(current_frame_buffer_.data(),
1381 current_frame_buffer_.len()); 1381 current_frame_buffer_.len());
1382 reader.Seek(GetFrameHeaderSize()); // Seek past frame header. 1382 reader.Seek(GetFrameHeaderSize()); // Seek past frame header.
1383 bool successful_read = reader.ReadUInt31(&current_frame_stream_id_); 1383 bool successful_read = reader.ReadUInt31(&current_frame_stream_id_);
1384 DCHECK(successful_read); 1384 DCHECK(successful_read);
1385 1385
1386 // Parse status code. 1386 // Parse status code.
1387 uint32_t status_raw = GOAWAY_NO_ERROR; 1387 uint32_t error_code = ERROR_CODE_NO_ERROR;
1388 successful_read = reader.ReadUInt32(&status_raw); 1388 successful_read = reader.ReadUInt32(&error_code);
1389 DCHECK(successful_read); 1389 DCHECK(successful_read);
1390 SpdyGoAwayStatus status = ParseGoAwayStatus(status_raw);
1391 // Finished parsing the GOAWAY header, call frame handler. 1390 // Finished parsing the GOAWAY header, call frame handler.
1392 visitor_->OnGoAway(current_frame_stream_id_, status); 1391 visitor_->OnGoAway(current_frame_stream_id_, ParseErrorCode(error_code));
1393 } 1392 }
1394 } 1393 }
1395 1394
1396 // Handle remaining data as opaque. 1395 // Handle remaining data as opaque.
1397 bool processed_successfully = true; 1396 bool processed_successfully = true;
1398 if (len > 0) { 1397 if (len > 0) {
1399 processed_successfully = visitor_->OnGoAwayFrameData(data, len); 1398 processed_successfully = visitor_->OnGoAwayFrameData(data, len);
1400 } 1399 }
1401 remaining_data_length_ -= original_len; 1400 remaining_data_length_ -= original_len;
1402 if (!processed_successfully) { 1401 if (!processed_successfully) {
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
1734 return builder.take(); 1733 return builder.take();
1735 } 1734 }
1736 1735
1737 SpdySerializedFrame SpdyFramer::SerializeRstStream( 1736 SpdySerializedFrame SpdyFramer::SerializeRstStream(
1738 const SpdyRstStreamIR& rst_stream) const { 1737 const SpdyRstStreamIR& rst_stream) const {
1739 size_t expected_length = GetRstStreamSize(); 1738 size_t expected_length = GetRstStreamSize();
1740 SpdyFrameBuilder builder(expected_length); 1739 SpdyFrameBuilder builder(expected_length);
1741 1740
1742 builder.BeginNewFrame(*this, RST_STREAM, 0, rst_stream.stream_id()); 1741 builder.BeginNewFrame(*this, RST_STREAM, 0, rst_stream.stream_id());
1743 1742
1744 builder.WriteUInt32(rst_stream.status()); 1743 builder.WriteUInt32(rst_stream.error_code());
1745 1744
1746 DCHECK_EQ(expected_length, builder.length()); 1745 DCHECK_EQ(expected_length, builder.length());
1747 return builder.take(); 1746 return builder.take();
1748 } 1747 }
1749 1748
1750 SpdySerializedFrame SpdyFramer::SerializeSettings( 1749 SpdySerializedFrame SpdyFramer::SerializeSettings(
1751 const SpdySettingsIR& settings) const { 1750 const SpdySettingsIR& settings) const {
1752 uint8_t flags = 0; 1751 uint8_t flags = 0;
1753 1752
1754 if (settings.is_ack()) { 1753 if (settings.is_ack()) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1798 size_t expected_length = GetGoAwayMinimumSize(); 1797 size_t expected_length = GetGoAwayMinimumSize();
1799 expected_length += goaway.description().size(); 1798 expected_length += goaway.description().size();
1800 SpdyFrameBuilder builder(expected_length); 1799 SpdyFrameBuilder builder(expected_length);
1801 1800
1802 // Serialize the GOAWAY frame. 1801 // Serialize the GOAWAY frame.
1803 builder.BeginNewFrame(*this, GOAWAY, 0, 0); 1802 builder.BeginNewFrame(*this, GOAWAY, 0, 0);
1804 1803
1805 // GOAWAY frames specify the last good stream id. 1804 // GOAWAY frames specify the last good stream id.
1806 builder.WriteUInt32(goaway.last_good_stream_id()); 1805 builder.WriteUInt32(goaway.last_good_stream_id());
1807 1806
1808 // GOAWAY frames also specify the error status code. 1807 // GOAWAY frames also specify the error code.
1809 builder.WriteUInt32(goaway.status()); 1808 builder.WriteUInt32(goaway.error_code());
1810 1809
1811 // GOAWAY frames may also specify opaque data. 1810 // GOAWAY frames may also specify opaque data.
1812 if (!goaway.description().empty()) { 1811 if (!goaway.description().empty()) {
1813 builder.WriteBytes(goaway.description().data(), 1812 builder.WriteBytes(goaway.description().data(),
1814 goaway.description().size()); 1813 goaway.description().size());
1815 } 1814 }
1816 1815
1817 DCHECK_EQ(expected_length, builder.length()); 1816 DCHECK_EQ(expected_length, builder.length());
1818 return builder.take(); 1817 return builder.take();
1819 } 1818 }
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
2377 builder->WriteUInt32(header_block.size()); 2376 builder->WriteUInt32(header_block.size());
2378 2377
2379 // Serialize each header. 2378 // Serialize each header.
2380 for (const auto& header : header_block) { 2379 for (const auto& header : header_block) {
2381 builder->WriteStringPiece32(base::ToLowerASCII(header.first)); 2380 builder->WriteStringPiece32(base::ToLowerASCII(header.first));
2382 builder->WriteStringPiece32(header.second); 2381 builder->WriteStringPiece32(header.second);
2383 } 2382 }
2384 } 2383 }
2385 2384
2386 } // namespace net 2385 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer.h ('k') | net/spdy/spdy_framer_decoder_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698