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/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/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 const QuicPacketHeader& header) { | 325 const QuicPacketHeader& header) { |
326 return header.entropy_flag << (header.packet_sequence_number % 8); | 326 return header.entropy_flag << (header.packet_sequence_number % 8); |
327 } | 327 } |
328 | 328 |
329 QuicPacket* QuicFramer::BuildDataPacket(const QuicPacketHeader& header, | 329 QuicPacket* QuicFramer::BuildDataPacket(const QuicPacketHeader& header, |
330 const QuicFrames& frames, | 330 const QuicFrames& frames, |
331 char* buffer, | 331 char* buffer, |
332 size_t packet_length) { | 332 size_t packet_length) { |
333 QuicDataWriter writer(packet_length, buffer); | 333 QuicDataWriter writer(packet_length, buffer); |
334 if (!AppendPacketHeader(header, &writer)) { | 334 if (!AppendPacketHeader(header, &writer)) { |
335 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 335 LOG(DFATAL) << "AppendPacketHeader failed"; |
336 CHECK(false) << "AppendPacketHeader failed"; | |
337 return nullptr; | 336 return nullptr; |
338 } | 337 } |
339 | 338 |
340 size_t i = 0; | 339 size_t i = 0; |
341 for (const QuicFrame& frame : frames) { | 340 for (const QuicFrame& frame : frames) { |
342 // Determine if we should write stream frame length in header. | 341 // Determine if we should write stream frame length in header. |
343 const bool no_stream_frame_length = | 342 const bool no_stream_frame_length = |
344 (header.is_in_fec_group == NOT_IN_FEC_GROUP) && | 343 (header.is_in_fec_group == NOT_IN_FEC_GROUP) && |
345 (i == frames.size() - 1); | 344 (i == frames.size() - 1); |
346 if (!AppendTypeByte(frame, no_stream_frame_length, &writer)) { | 345 if (!AppendTypeByte(frame, no_stream_frame_length, &writer)) { |
347 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 346 LOG(DFATAL) << "AppendTypeByte failed"; |
348 CHECK(false) << "AppendTypeByte failed"; | |
349 return nullptr; | 347 return nullptr; |
350 } | 348 } |
351 | 349 |
352 switch (frame.type) { | 350 switch (frame.type) { |
353 case PADDING_FRAME: | 351 case PADDING_FRAME: |
354 writer.WritePadding(); | 352 writer.WritePadding(); |
355 break; | 353 break; |
356 case STREAM_FRAME: | 354 case STREAM_FRAME: |
357 if (!AppendStreamFrame( | 355 if (!AppendStreamFrame( |
358 *frame.stream_frame, no_stream_frame_length, &writer)) { | 356 *frame.stream_frame, no_stream_frame_length, &writer)) { |
359 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 357 LOG(DFATAL) << "AppendStreamFrame failed"; |
360 CHECK(false) << "AppendStreamFrame failed"; | |
361 return nullptr; | 358 return nullptr; |
362 } | 359 } |
363 break; | 360 break; |
364 case ACK_FRAME: | 361 case ACK_FRAME: |
365 if (!AppendAckFrameAndTypeByte( | 362 if (!AppendAckFrameAndTypeByte( |
366 header, *frame.ack_frame, &writer)) { | 363 header, *frame.ack_frame, &writer)) { |
367 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 364 LOG(DFATAL) << "AppendAckFrameAndTypeByte failed"; |
368 CHECK(false) << "AppendAckFrameAndTypeByte failed"; | |
369 return nullptr; | 365 return nullptr; |
370 } | 366 } |
371 break; | 367 break; |
372 case STOP_WAITING_FRAME: | 368 case STOP_WAITING_FRAME: |
373 if (!AppendStopWaitingFrame( | 369 if (!AppendStopWaitingFrame( |
374 header, *frame.stop_waiting_frame, &writer)) { | 370 header, *frame.stop_waiting_frame, &writer)) { |
375 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 371 LOG(DFATAL) << "AppendStopWaitingFrame failed"; |
376 CHECK(false) << "AppendStopWaitingFrame failed"; | |
377 return nullptr; | 372 return nullptr; |
378 } | 373 } |
379 break; | 374 break; |
380 case MTU_DISCOVERY_FRAME: | 375 case MTU_DISCOVERY_FRAME: |
381 // MTU discovery frames are serialized as ping frames. | 376 // MTU discovery frames are serialized as ping frames. |
382 case PING_FRAME: | 377 case PING_FRAME: |
383 // Ping has no payload. | 378 // Ping has no payload. |
384 break; | 379 break; |
385 case RST_STREAM_FRAME: | 380 case RST_STREAM_FRAME: |
386 if (!AppendRstStreamFrame(*frame.rst_stream_frame, &writer)) { | 381 if (!AppendRstStreamFrame(*frame.rst_stream_frame, &writer)) { |
387 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 382 LOG(DFATAL) << "AppendRstStreamFrame failed"; |
388 CHECK(false) << "AppendRstStreamFrame failed"; | |
389 return nullptr; | 383 return nullptr; |
390 } | 384 } |
391 break; | 385 break; |
392 case CONNECTION_CLOSE_FRAME: | 386 case CONNECTION_CLOSE_FRAME: |
393 if (!AppendConnectionCloseFrame( | 387 if (!AppendConnectionCloseFrame( |
394 *frame.connection_close_frame, &writer)) { | 388 *frame.connection_close_frame, &writer)) { |
395 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 389 LOG(DFATAL) << "AppendConnectionCloseFrame failed"; |
396 CHECK(false) << "AppendConnectionCloseFrame failed"; | |
397 return nullptr; | 390 return nullptr; |
398 } | 391 } |
399 break; | 392 break; |
400 case GOAWAY_FRAME: | 393 case GOAWAY_FRAME: |
401 if (!AppendGoAwayFrame(*frame.goaway_frame, &writer)) { | 394 if (!AppendGoAwayFrame(*frame.goaway_frame, &writer)) { |
402 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 395 LOG(DFATAL) << "AppendGoAwayFrame failed"; |
403 CHECK(false) << "AppendGoAwayFrame failed"; | |
404 return nullptr; | 396 return nullptr; |
405 } | 397 } |
406 break; | 398 break; |
407 case WINDOW_UPDATE_FRAME: | 399 case WINDOW_UPDATE_FRAME: |
408 if (!AppendWindowUpdateFrame(*frame.window_update_frame, &writer)) { | 400 if (!AppendWindowUpdateFrame(*frame.window_update_frame, &writer)) { |
409 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 401 LOG(DFATAL) << "AppendWindowUpdateFrame failed"; |
410 CHECK(false) << "AppendWindowUpdateFrame failed"; | |
411 return nullptr; | 402 return nullptr; |
412 } | 403 } |
413 break; | 404 break; |
414 case BLOCKED_FRAME: | 405 case BLOCKED_FRAME: |
415 if (!AppendBlockedFrame(*frame.blocked_frame, &writer)) { | 406 if (!AppendBlockedFrame(*frame.blocked_frame, &writer)) { |
416 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 407 LOG(DFATAL) << "AppendBlockedFrame failed"; |
417 CHECK(false) << "AppendBlockedFrame failed"; | |
418 return nullptr; | 408 return nullptr; |
419 } | 409 } |
420 break; | 410 break; |
421 default: | 411 default: |
422 RaiseError(QUIC_INVALID_FRAME_DATA); | 412 RaiseError(QUIC_INVALID_FRAME_DATA); |
423 // TODO(rtenneti): Revert the CHECKs to LOG(DFATAL). | 413 LOG(DFATAL) << "QUIC_INVALID_FRAME_DATA"; |
424 CHECK(false) << "QUIC_INVALID_FRAME_DATA"; | |
425 return nullptr; | 414 return nullptr; |
426 } | 415 } |
427 ++i; | 416 ++i; |
428 } | 417 } |
429 | 418 |
430 QuicPacket* packet = | 419 QuicPacket* packet = |
431 new QuicPacket(writer.data(), writer.length(), false, | 420 new QuicPacket(writer.data(), writer.length(), false, |
432 header.public_header.connection_id_length, | 421 header.public_header.connection_id_length, |
433 header.public_header.version_flag, | 422 header.public_header.version_flag, |
434 header.public_header.sequence_number_length); | 423 header.public_header.sequence_number_length); |
(...skipping 1804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2239 bool QuicFramer::RaiseError(QuicErrorCode error) { | 2228 bool QuicFramer::RaiseError(QuicErrorCode error) { |
2240 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) | 2229 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) |
2241 << " detail: " << detailed_error_; | 2230 << " detail: " << detailed_error_; |
2242 set_error(error); | 2231 set_error(error); |
2243 visitor_->OnError(this); | 2232 visitor_->OnError(this); |
2244 reader_.reset(nullptr); | 2233 reader_.reset(nullptr); |
2245 return false; | 2234 return false; |
2246 } | 2235 } |
2247 | 2236 |
2248 } // namespace net | 2237 } // namespace net |
OLD | NEW |