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