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

Side by Side Diff: net/quic/quic_framer.cc

Issue 1565883003: relnote: Moving many QUIC DFATALS over to QUIC_BUG (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove comments Created 4 years, 11 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/quic/quic_flow_controller.cc ('k') | net/quic/quic_headers_stream.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/quic/quic_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "net/quic/crypto/crypto_framer.h" 12 #include "net/quic/crypto/crypto_framer.h"
13 #include "net/quic/crypto/crypto_handshake_message.h" 13 #include "net/quic/crypto/crypto_handshake_message.h"
14 #include "net/quic/crypto/crypto_protocol.h" 14 #include "net/quic/crypto/crypto_protocol.h"
15 #include "net/quic/crypto/quic_decrypter.h" 15 #include "net/quic/crypto/quic_decrypter.h"
16 #include "net/quic/crypto/quic_encrypter.h" 16 #include "net/quic/crypto/quic_encrypter.h"
17 #include "net/quic/quic_bug_tracker.h"
17 #include "net/quic/quic_data_reader.h" 18 #include "net/quic/quic_data_reader.h"
18 #include "net/quic/quic_data_writer.h" 19 #include "net/quic/quic_data_writer.h"
19 #include "net/quic/quic_flags.h" 20 #include "net/quic/quic_flags.h"
20 #include "net/quic/quic_socket_address_coder.h" 21 #include "net/quic/quic_socket_address_coder.h"
21 #include "net/quic/quic_utils.h" 22 #include "net/quic/quic_utils.h"
22 23
23 using base::StringPiece; 24 using base::StringPiece;
24 using std::map; 25 using std::map;
25 using std::max; 26 using std::max;
26 using std::min; 27 using std::min;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 switch (flags & PACKET_FLAGS_6BYTE_PACKET) { 117 switch (flags & PACKET_FLAGS_6BYTE_PACKET) {
117 case PACKET_FLAGS_6BYTE_PACKET: 118 case PACKET_FLAGS_6BYTE_PACKET:
118 return PACKET_6BYTE_PACKET_NUMBER; 119 return PACKET_6BYTE_PACKET_NUMBER;
119 case PACKET_FLAGS_4BYTE_PACKET: 120 case PACKET_FLAGS_4BYTE_PACKET:
120 return PACKET_4BYTE_PACKET_NUMBER; 121 return PACKET_4BYTE_PACKET_NUMBER;
121 case PACKET_FLAGS_2BYTE_PACKET: 122 case PACKET_FLAGS_2BYTE_PACKET:
122 return PACKET_2BYTE_PACKET_NUMBER; 123 return PACKET_2BYTE_PACKET_NUMBER;
123 case PACKET_FLAGS_1BYTE_PACKET: 124 case PACKET_FLAGS_1BYTE_PACKET:
124 return PACKET_1BYTE_PACKET_NUMBER; 125 return PACKET_1BYTE_PACKET_NUMBER;
125 default: 126 default:
126 LOG(DFATAL) << "Unreachable case statement."; 127 QUIC_BUG << "Unreachable case statement.";
127 return PACKET_6BYTE_PACKET_NUMBER; 128 return PACKET_6BYTE_PACKET_NUMBER;
128 } 129 }
129 } 130 }
130 131
131 } // namespace 132 } // namespace
132 133
133 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions, 134 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions,
134 QuicTime creation_time, 135 QuicTime creation_time,
135 Perspective perspective) 136 Perspective perspective)
136 : visitor_(nullptr), 137 : visitor_(nullptr),
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 216
216 // static 217 // static
217 size_t QuicFramer::GetStreamIdSize(QuicStreamId stream_id) { 218 size_t QuicFramer::GetStreamIdSize(QuicStreamId stream_id) {
218 // Sizes are 1 through 4 bytes. 219 // Sizes are 1 through 4 bytes.
219 for (int i = 1; i <= 4; ++i) { 220 for (int i = 1; i <= 4; ++i) {
220 stream_id >>= 8; 221 stream_id >>= 8;
221 if (stream_id == 0) { 222 if (stream_id == 0) {
222 return i; 223 return i;
223 } 224 }
224 } 225 }
225 LOG(DFATAL) << "Failed to determine StreamIDSize."; 226 QUIC_BUG << "Failed to determine StreamIDSize.";
226 return 4; 227 return 4;
227 } 228 }
228 229
229 // static 230 // static
230 size_t QuicFramer::GetStreamOffsetSize(QuicStreamOffset offset) { 231 size_t QuicFramer::GetStreamOffsetSize(QuicStreamOffset offset) {
231 // 0 is a special case. 232 // 0 is a special case.
232 if (offset == 0) { 233 if (offset == 0) {
233 return 0; 234 return 0;
234 } 235 }
235 // 2 through 8 are the remaining sizes. 236 // 2 through 8 are the remaining sizes.
236 offset >>= 8; 237 offset >>= 8;
237 for (int i = 2; i <= 8; ++i) { 238 for (int i = 2; i <= 8; ++i) {
238 offset >>= 8; 239 offset >>= 8;
239 if (offset == 0) { 240 if (offset == 0) {
240 return i; 241 return i;
241 } 242 }
242 } 243 }
243 LOG(DFATAL) << "Failed to determine StreamOffsetSize."; 244 QUIC_BUG << "Failed to determine StreamOffsetSize.";
244 return 8; 245 return 8;
245 } 246 }
246 247
247 // static 248 // static
248 size_t QuicFramer::GetVersionNegotiationPacketSize(size_t number_versions) { 249 size_t QuicFramer::GetVersionNegotiationPacketSize(size_t number_versions) {
249 return kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + 250 return kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID +
250 number_versions * kQuicVersionSize; 251 number_versions * kQuicVersionSize;
251 } 252 }
252 253
253 bool QuicFramer::IsSupportedVersion(const QuicVersion version) const { 254 bool QuicFramer::IsSupportedVersion(const QuicVersion version) const {
254 for (size_t i = 0; i < supported_versions_.size(); ++i) { 255 for (size_t i = 0; i < supported_versions_.size(); ++i) {
255 if (version == supported_versions_[i]) { 256 if (version == supported_versions_[i]) {
256 return true; 257 return true;
257 } 258 }
258 } 259 }
259 return false; 260 return false;
260 } 261 }
261 262
262 size_t QuicFramer::GetSerializedFrameLength( 263 size_t QuicFramer::GetSerializedFrameLength(
263 const QuicFrame& frame, 264 const QuicFrame& frame,
264 size_t free_bytes, 265 size_t free_bytes,
265 bool first_frame, 266 bool first_frame,
266 bool last_frame, 267 bool last_frame,
267 InFecGroup is_in_fec_group, 268 InFecGroup is_in_fec_group,
268 QuicPacketNumberLength packet_number_length) { 269 QuicPacketNumberLength packet_number_length) {
269 // Prevent a rare crash reported in b/19458523. 270 // Prevent a rare crash reported in b/19458523.
270 if ((frame.type == STREAM_FRAME || frame.type == ACK_FRAME) && 271 if ((frame.type == STREAM_FRAME || frame.type == ACK_FRAME) &&
271 frame.stream_frame == nullptr) { 272 frame.stream_frame == nullptr) {
272 LOG(DFATAL) << "Cannot compute the length of a null frame. " 273 QUIC_BUG << "Cannot compute the length of a null frame. "
273 << "type:" << frame.type << "free_bytes:" << free_bytes 274 << "type:" << frame.type << "free_bytes:" << free_bytes
274 << " first_frame:" << first_frame 275 << " first_frame:" << first_frame << " last_frame:" << last_frame
275 << " last_frame:" << last_frame 276 << " is_in_fec:" << is_in_fec_group
276 << " is_in_fec:" << is_in_fec_group 277 << " seq num length:" << packet_number_length;
277 << " seq num length:" << packet_number_length;
278 set_error(QUIC_INTERNAL_ERROR); 278 set_error(QUIC_INTERNAL_ERROR);
279 visitor_->OnError(this); 279 visitor_->OnError(this);
280 return 0; 280 return 0;
281 } 281 }
282 if (frame.type == PADDING_FRAME) { 282 if (frame.type == PADDING_FRAME) {
283 // PADDING implies end of packet. 283 // PADDING implies end of packet.
284 return free_bytes; 284 return free_bytes;
285 } 285 }
286 size_t frame_len = ComputeFrameLength(frame, last_frame, is_in_fec_group, 286 size_t frame_len = ComputeFrameLength(frame, last_frame, is_in_fec_group,
287 packet_number_length); 287 packet_number_length);
(...skipping 27 matching lines...) Expand all
315 const QuicPacketHeader& header) { 315 const QuicPacketHeader& header) {
316 return header.entropy_flag << (header.packet_number % 8); 316 return header.entropy_flag << (header.packet_number % 8);
317 } 317 }
318 318
319 size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header, 319 size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header,
320 const QuicFrames& frames, 320 const QuicFrames& frames,
321 char* buffer, 321 char* buffer,
322 size_t packet_length) { 322 size_t packet_length) {
323 QuicDataWriter writer(packet_length, buffer); 323 QuicDataWriter writer(packet_length, buffer);
324 if (!AppendPacketHeader(header, &writer)) { 324 if (!AppendPacketHeader(header, &writer)) {
325 LOG(DFATAL) << "AppendPacketHeader failed"; 325 QUIC_BUG << "AppendPacketHeader failed";
326 return 0; 326 return 0;
327 } 327 }
328 328
329 size_t i = 0; 329 size_t i = 0;
330 for (const QuicFrame& frame : frames) { 330 for (const QuicFrame& frame : frames) {
331 // Determine if we should write stream frame length in header. 331 // Determine if we should write stream frame length in header.
332 const bool no_stream_frame_length = 332 const bool no_stream_frame_length =
333 (header.is_in_fec_group == NOT_IN_FEC_GROUP) && 333 (header.is_in_fec_group == NOT_IN_FEC_GROUP) &&
334 (i == frames.size() - 1); 334 (i == frames.size() - 1);
335 if (!AppendTypeByte(frame, no_stream_frame_length, &writer)) { 335 if (!AppendTypeByte(frame, no_stream_frame_length, &writer)) {
336 LOG(DFATAL) << "AppendTypeByte failed"; 336 QUIC_BUG << "AppendTypeByte failed";
337 return 0; 337 return 0;
338 } 338 }
339 339
340 switch (frame.type) { 340 switch (frame.type) {
341 case PADDING_FRAME: 341 case PADDING_FRAME:
342 writer.WritePadding(); 342 writer.WritePadding();
343 break; 343 break;
344 case STREAM_FRAME: 344 case STREAM_FRAME:
345 if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length, 345 if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length,
346 &writer)) { 346 &writer)) {
347 LOG(DFATAL) << "AppendStreamFrame failed"; 347 QUIC_BUG << "AppendStreamFrame failed";
348 return 0; 348 return 0;
349 } 349 }
350 break; 350 break;
351 case ACK_FRAME: 351 case ACK_FRAME:
352 if (!AppendAckFrameAndTypeByte(header, *frame.ack_frame, &writer)) { 352 if (!AppendAckFrameAndTypeByte(header, *frame.ack_frame, &writer)) {
353 LOG(DFATAL) << "AppendAckFrameAndTypeByte failed"; 353 QUIC_BUG << "AppendAckFrameAndTypeByte failed";
354 return 0; 354 return 0;
355 } 355 }
356 break; 356 break;
357 case STOP_WAITING_FRAME: 357 case STOP_WAITING_FRAME:
358 if (!AppendStopWaitingFrame(header, *frame.stop_waiting_frame, 358 if (!AppendStopWaitingFrame(header, *frame.stop_waiting_frame,
359 &writer)) { 359 &writer)) {
360 LOG(DFATAL) << "AppendStopWaitingFrame failed"; 360 QUIC_BUG << "AppendStopWaitingFrame failed";
361 return 0; 361 return 0;
362 } 362 }
363 break; 363 break;
364 case MTU_DISCOVERY_FRAME: 364 case MTU_DISCOVERY_FRAME:
365 // MTU discovery frames are serialized as ping frames. 365 // MTU discovery frames are serialized as ping frames.
366 case PING_FRAME: 366 case PING_FRAME:
367 // Ping has no payload. 367 // Ping has no payload.
368 break; 368 break;
369 case RST_STREAM_FRAME: 369 case RST_STREAM_FRAME:
370 if (!AppendRstStreamFrame(*frame.rst_stream_frame, &writer)) { 370 if (!AppendRstStreamFrame(*frame.rst_stream_frame, &writer)) {
371 LOG(DFATAL) << "AppendRstStreamFrame failed"; 371 QUIC_BUG << "AppendRstStreamFrame failed";
372 return 0; 372 return 0;
373 } 373 }
374 break; 374 break;
375 case CONNECTION_CLOSE_FRAME: 375 case CONNECTION_CLOSE_FRAME:
376 if (!AppendConnectionCloseFrame(*frame.connection_close_frame, 376 if (!AppendConnectionCloseFrame(*frame.connection_close_frame,
377 &writer)) { 377 &writer)) {
378 LOG(DFATAL) << "AppendConnectionCloseFrame failed"; 378 QUIC_BUG << "AppendConnectionCloseFrame failed";
379 return 0; 379 return 0;
380 } 380 }
381 break; 381 break;
382 case GOAWAY_FRAME: 382 case GOAWAY_FRAME:
383 if (!AppendGoAwayFrame(*frame.goaway_frame, &writer)) { 383 if (!AppendGoAwayFrame(*frame.goaway_frame, &writer)) {
384 LOG(DFATAL) << "AppendGoAwayFrame failed"; 384 QUIC_BUG << "AppendGoAwayFrame failed";
385 return 0; 385 return 0;
386 } 386 }
387 break; 387 break;
388 case WINDOW_UPDATE_FRAME: 388 case WINDOW_UPDATE_FRAME:
389 if (!AppendWindowUpdateFrame(*frame.window_update_frame, &writer)) { 389 if (!AppendWindowUpdateFrame(*frame.window_update_frame, &writer)) {
390 LOG(DFATAL) << "AppendWindowUpdateFrame failed"; 390 QUIC_BUG << "AppendWindowUpdateFrame failed";
391 return 0; 391 return 0;
392 } 392 }
393 break; 393 break;
394 case BLOCKED_FRAME: 394 case BLOCKED_FRAME:
395 if (!AppendBlockedFrame(*frame.blocked_frame, &writer)) { 395 if (!AppendBlockedFrame(*frame.blocked_frame, &writer)) {
396 LOG(DFATAL) << "AppendBlockedFrame failed"; 396 QUIC_BUG << "AppendBlockedFrame failed";
397 return 0; 397 return 0;
398 } 398 }
399 break; 399 break;
400 default: 400 default:
401 RaiseError(QUIC_INVALID_FRAME_DATA); 401 RaiseError(QUIC_INVALID_FRAME_DATA);
402 LOG(DFATAL) << "QUIC_INVALID_FRAME_DATA"; 402 QUIC_BUG << "QUIC_INVALID_FRAME_DATA";
403 return 0; 403 return 0;
404 } 404 }
405 ++i; 405 ++i;
406 } 406 }
407 407
408 return writer.length(); 408 return writer.length();
409 } 409 }
410 410
411 QuicPacket* QuicFramer::BuildFecPacket(const QuicPacketHeader& header, 411 QuicPacket* QuicFramer::BuildFecPacket(const QuicPacketHeader& header,
412 StringPiece redundancy) { 412 StringPiece redundancy) {
413 DCHECK_EQ(IN_FEC_GROUP, header.is_in_fec_group); 413 DCHECK_EQ(IN_FEC_GROUP, header.is_in_fec_group);
414 DCHECK_NE(0u, header.fec_group); 414 DCHECK_NE(0u, header.fec_group);
415 size_t len = GetPacketHeaderSize(header); 415 size_t len = GetPacketHeaderSize(header);
416 len += redundancy.length(); 416 len += redundancy.length();
417 417
418 scoped_ptr<char[]> buffer(new char[len]); 418 scoped_ptr<char[]> buffer(new char[len]);
419 QuicDataWriter writer(len, buffer.get()); 419 QuicDataWriter writer(len, buffer.get());
420 if (!AppendPacketHeader(header, &writer)) { 420 if (!AppendPacketHeader(header, &writer)) {
421 LOG(DFATAL) << "AppendPacketHeader failed"; 421 QUIC_BUG << "AppendPacketHeader failed";
422 return nullptr; 422 return nullptr;
423 } 423 }
424 424
425 if (!writer.WriteBytes(redundancy.data(), redundancy.length())) { 425 if (!writer.WriteBytes(redundancy.data(), redundancy.length())) {
426 LOG(DFATAL) << "Failed to add FEC"; 426 QUIC_BUG << "Failed to add FEC";
427 return nullptr; 427 return nullptr;
428 } 428 }
429 429
430 return new QuicPacket(buffer.release(), len, true, 430 return new QuicPacket(buffer.release(), len, true,
431 header.public_header.connection_id_length, 431 header.public_header.connection_id_length,
432 header.public_header.version_flag, 432 header.public_header.version_flag,
433 header.public_header.packet_number_length); 433 header.public_header.packet_number_length);
434 } 434 }
435 435
436 // static 436 // static
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 switch (packet_number_length) { 993 switch (packet_number_length) {
994 case PACKET_1BYTE_PACKET_NUMBER: 994 case PACKET_1BYTE_PACKET_NUMBER:
995 return PACKET_FLAGS_1BYTE_PACKET; 995 return PACKET_FLAGS_1BYTE_PACKET;
996 case PACKET_2BYTE_PACKET_NUMBER: 996 case PACKET_2BYTE_PACKET_NUMBER:
997 return PACKET_FLAGS_2BYTE_PACKET; 997 return PACKET_FLAGS_2BYTE_PACKET;
998 case PACKET_4BYTE_PACKET_NUMBER: 998 case PACKET_4BYTE_PACKET_NUMBER:
999 return PACKET_FLAGS_4BYTE_PACKET; 999 return PACKET_FLAGS_4BYTE_PACKET;
1000 case PACKET_6BYTE_PACKET_NUMBER: 1000 case PACKET_6BYTE_PACKET_NUMBER:
1001 return PACKET_FLAGS_6BYTE_PACKET; 1001 return PACKET_FLAGS_6BYTE_PACKET;
1002 default: 1002 default:
1003 LOG(DFATAL) << "Unreachable case statement."; 1003 QUIC_BUG << "Unreachable case statement.";
1004 return PACKET_FLAGS_6BYTE_PACKET; 1004 return PACKET_FLAGS_6BYTE_PACKET;
1005 } 1005 }
1006 } 1006 }
1007 1007
1008 // static 1008 // static
1009 QuicFramer::AckFrameInfo QuicFramer::GetAckFrameInfo( 1009 QuicFramer::AckFrameInfo QuicFramer::GetAckFrameInfo(
1010 const QuicAckFrame& frame) { 1010 const QuicAckFrame& frame) {
1011 AckFrameInfo ack_info; 1011 AckFrameInfo ack_info;
1012 if (frame.missing_packets.Empty()) { 1012 if (frame.missing_packets.Empty()) {
1013 return ack_info; 1013 return ack_info;
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after
1852 return 0; 1852 return 0;
1853 } 1853 }
1854 1854
1855 bool QuicFramer::AppendTypeByte(const QuicFrame& frame, 1855 bool QuicFramer::AppendTypeByte(const QuicFrame& frame,
1856 bool no_stream_frame_length, 1856 bool no_stream_frame_length,
1857 QuicDataWriter* writer) { 1857 QuicDataWriter* writer) {
1858 uint8_t type_byte = 0; 1858 uint8_t type_byte = 0;
1859 switch (frame.type) { 1859 switch (frame.type) {
1860 case STREAM_FRAME: { 1860 case STREAM_FRAME: {
1861 if (frame.stream_frame == nullptr) { 1861 if (frame.stream_frame == nullptr) {
1862 LOG(DFATAL) << "Failed to append STREAM frame with no stream_frame."; 1862 QUIC_BUG << "Failed to append STREAM frame with no stream_frame.";
1863 } 1863 }
1864 // Fin bit. 1864 // Fin bit.
1865 type_byte |= frame.stream_frame->fin ? kQuicStreamFinMask : 0; 1865 type_byte |= frame.stream_frame->fin ? kQuicStreamFinMask : 0;
1866 1866
1867 // Data Length bit. 1867 // Data Length bit.
1868 type_byte <<= kQuicStreamDataLengthShift; 1868 type_byte <<= kQuicStreamDataLengthShift;
1869 type_byte |= no_stream_frame_length ? 0 : kQuicStreamDataLengthMask; 1869 type_byte |= no_stream_frame_length ? 0 : kQuicStreamDataLengthMask;
1870 1870
1871 // Offset 3 bits. 1871 // Offset 3 bits.
1872 type_byte <<= kQuicStreamOffsetShift; 1872 type_byte <<= kQuicStreamOffsetShift;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1920 default: 1920 default:
1921 DCHECK(false) << "packet_number_length: " << packet_number_length; 1921 DCHECK(false) << "packet_number_length: " << packet_number_length;
1922 return false; 1922 return false;
1923 } 1923 }
1924 } 1924 }
1925 1925
1926 bool QuicFramer::AppendStreamFrame(const QuicStreamFrame& frame, 1926 bool QuicFramer::AppendStreamFrame(const QuicStreamFrame& frame,
1927 bool no_stream_frame_length, 1927 bool no_stream_frame_length,
1928 QuicDataWriter* writer) { 1928 QuicDataWriter* writer) {
1929 if (!writer->WriteBytes(&frame.stream_id, GetStreamIdSize(frame.stream_id))) { 1929 if (!writer->WriteBytes(&frame.stream_id, GetStreamIdSize(frame.stream_id))) {
1930 LOG(DFATAL) << "Writing stream id size failed."; 1930 QUIC_BUG << "Writing stream id size failed.";
1931 return false; 1931 return false;
1932 } 1932 }
1933 if (!writer->WriteBytes(&frame.offset, GetStreamOffsetSize(frame.offset))) { 1933 if (!writer->WriteBytes(&frame.offset, GetStreamOffsetSize(frame.offset))) {
1934 LOG(DFATAL) << "Writing offset size failed."; 1934 QUIC_BUG << "Writing offset size failed.";
1935 return false; 1935 return false;
1936 } 1936 }
1937 if (!no_stream_frame_length) { 1937 if (!no_stream_frame_length) {
1938 if ((frame.frame_length > numeric_limits<uint16_t>::max()) || 1938 if ((frame.frame_length > numeric_limits<uint16_t>::max()) ||
1939 !writer->WriteUInt16(static_cast<uint16_t>(frame.frame_length))) { 1939 !writer->WriteUInt16(static_cast<uint16_t>(frame.frame_length))) {
1940 LOG(DFATAL) << "Writing stream frame length failed"; 1940 QUIC_BUG << "Writing stream frame length failed";
1941 return false; 1941 return false;
1942 } 1942 }
1943 } 1943 }
1944 1944
1945 if (!writer->WriteBytes(frame.frame_buffer, frame.frame_length)) { 1945 if (!writer->WriteBytes(frame.frame_buffer, frame.frame_length)) {
1946 LOG(DFATAL) << "Writing frame data failed."; 1946 QUIC_BUG << "Writing frame data failed.";
1947 return false; 1947 return false;
1948 } 1948 }
1949 return true; 1949 return true;
1950 } 1950 }
1951 1951
1952 void QuicFramer::set_version(const QuicVersion version) { 1952 void QuicFramer::set_version(const QuicVersion version) {
1953 DCHECK(IsSupportedVersion(version)) << QuicVersionToString(version); 1953 DCHECK(IsSupportedVersion(version)) << QuicVersionToString(version);
1954 quic_version_ = version; 1954 quic_version_ = version;
1955 } 1955 }
1956 1956
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2163 2163
2164 bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header, 2164 bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header,
2165 const QuicStopWaitingFrame& frame, 2165 const QuicStopWaitingFrame& frame,
2166 QuicDataWriter* writer) { 2166 QuicDataWriter* writer) {
2167 DCHECK_GE(header.packet_number, frame.least_unacked); 2167 DCHECK_GE(header.packet_number, frame.least_unacked);
2168 const QuicPacketNumber least_unacked_delta = 2168 const QuicPacketNumber least_unacked_delta =
2169 header.packet_number - frame.least_unacked; 2169 header.packet_number - frame.least_unacked;
2170 const QuicPacketNumber length_shift = 2170 const QuicPacketNumber length_shift =
2171 header.public_header.packet_number_length * 8; 2171 header.public_header.packet_number_length * 8;
2172 if (!writer->WriteUInt8(frame.entropy_hash)) { 2172 if (!writer->WriteUInt8(frame.entropy_hash)) {
2173 LOG(DFATAL) << " hash failed"; 2173 QUIC_BUG << " hash failed";
2174 return false; 2174 return false;
2175 } 2175 }
2176 2176
2177 if (least_unacked_delta >> length_shift > 0) { 2177 if (least_unacked_delta >> length_shift > 0) {
2178 LOG(DFATAL) << "packet_number_length " 2178 QUIC_BUG << "packet_number_length "
2179 << header.public_header.packet_number_length 2179 << header.public_header.packet_number_length
2180 << " is too small for least_unacked_delta: " 2180 << " is too small for least_unacked_delta: "
2181 << least_unacked_delta; 2181 << least_unacked_delta;
2182 return false; 2182 return false;
2183 } 2183 }
2184 if (!AppendPacketSequenceNumber(header.public_header.packet_number_length, 2184 if (!AppendPacketSequenceNumber(header.public_header.packet_number_length,
2185 least_unacked_delta, writer)) { 2185 least_unacked_delta, writer)) {
2186 LOG(DFATAL) << " seq failed: " << header.public_header.packet_number_length; 2186 QUIC_BUG << " seq failed: " << header.public_header.packet_number_length;
2187 return false; 2187 return false;
2188 } 2188 }
2189 2189
2190 return true; 2190 return true;
2191 } 2191 }
2192 2192
2193 bool QuicFramer::AppendRstStreamFrame(const QuicRstStreamFrame& frame, 2193 bool QuicFramer::AppendRstStreamFrame(const QuicRstStreamFrame& frame,
2194 QuicDataWriter* writer) { 2194 QuicDataWriter* writer) {
2195 if (!writer->WriteUInt32(frame.stream_id)) { 2195 if (!writer->WriteUInt32(frame.stream_id)) {
2196 return false; 2196 return false;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
2260 2260
2261 bool QuicFramer::RaiseError(QuicErrorCode error) { 2261 bool QuicFramer::RaiseError(QuicErrorCode error) {
2262 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) 2262 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error)
2263 << " detail: " << detailed_error_; 2263 << " detail: " << detailed_error_;
2264 set_error(error); 2264 set_error(error);
2265 visitor_->OnError(this); 2265 visitor_->OnError(this);
2266 return false; 2266 return false;
2267 } 2267 }
2268 2268
2269 } // namespace net 2269 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_flow_controller.cc ('k') | net/quic/quic_headers_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698