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 "base/containers/hash_tables.h" | 7 #include "base/containers/hash_tables.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "net/quic/crypto/crypto_framer.h" | 9 #include "net/quic/crypto/crypto_framer.h" |
10 #include "net/quic/crypto/crypto_handshake_message.h" | 10 #include "net/quic/crypto/crypto_handshake_message.h" |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 LOG(DFATAL) << "QUIC_INVALID_FRAME_DATA"; | 403 LOG(DFATAL) << "QUIC_INVALID_FRAME_DATA"; |
404 return kNoPacket; | 404 return kNoPacket; |
405 } | 405 } |
406 } | 406 } |
407 | 407 |
408 // Save the length before writing, because take clears it. | 408 // Save the length before writing, because take clears it. |
409 const size_t len = writer.length(); | 409 const size_t len = writer.length(); |
410 // Less than or equal because truncated acks end up with max_plaintex_size | 410 // Less than or equal because truncated acks end up with max_plaintex_size |
411 // length, even though they're typically slightly shorter. | 411 // length, even though they're typically slightly shorter. |
412 DCHECK_LE(len, packet_size); | 412 DCHECK_LE(len, packet_size); |
413 QuicPacket* packet = QuicPacket::NewDataPacket( | 413 QuicPacket* packet = new QuicPacket( |
414 writer.take(), len, true, header.public_header.connection_id_length, | 414 writer.take(), len, true, header.public_header.connection_id_length, |
415 header.public_header.version_flag, | 415 header.public_header.version_flag, |
416 header.public_header.sequence_number_length); | 416 header.public_header.sequence_number_length); |
417 | 417 |
418 if (fec_builder_) { | 418 if (fec_builder_) { |
419 fec_builder_->OnBuiltFecProtectedPayload(header, | 419 fec_builder_->OnBuiltFecProtectedPayload(header, |
420 packet->FecProtectedData()); | 420 packet->FecProtectedData()); |
421 } | 421 } |
422 | 422 |
423 return SerializedPacket(header.packet_sequence_number, | 423 return SerializedPacket(header.packet_sequence_number, |
(...skipping 14 matching lines...) Expand all Loading... |
438 if (!AppendPacketHeader(header, &writer)) { | 438 if (!AppendPacketHeader(header, &writer)) { |
439 LOG(DFATAL) << "AppendPacketHeader failed"; | 439 LOG(DFATAL) << "AppendPacketHeader failed"; |
440 return kNoPacket; | 440 return kNoPacket; |
441 } | 441 } |
442 | 442 |
443 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) { | 443 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) { |
444 LOG(DFATAL) << "Failed to add FEC"; | 444 LOG(DFATAL) << "Failed to add FEC"; |
445 return kNoPacket; | 445 return kNoPacket; |
446 } | 446 } |
447 | 447 |
448 return SerializedPacket( | 448 SerializedPacket packet( |
449 header.packet_sequence_number, | 449 header.packet_sequence_number, |
450 header.public_header.sequence_number_length, | 450 header.public_header.sequence_number_length, |
451 QuicPacket::NewFecPacket(writer.take(), len, true, | 451 new QuicPacket(writer.take(), len, true, |
452 header.public_header.connection_id_length, | 452 header.public_header.connection_id_length, |
453 header.public_header.version_flag, | 453 header.public_header.version_flag, |
454 header.public_header.sequence_number_length), | 454 header.public_header.sequence_number_length), |
455 GetPacketEntropyHash(header), nullptr); | 455 GetPacketEntropyHash(header), nullptr); |
| 456 packet.is_fec_packet = true; |
| 457 return packet; |
456 } | 458 } |
457 | 459 |
458 // static | 460 // static |
459 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket( | 461 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket( |
460 const QuicPublicResetPacket& packet) { | 462 const QuicPublicResetPacket& packet) { |
461 DCHECK(packet.public_header.reset_flag); | 463 DCHECK(packet.public_header.reset_flag); |
462 | 464 |
463 CryptoHandshakeMessage reset; | 465 CryptoHandshakeMessage reset; |
464 reset.set_tag(kPRST); | 466 reset.set_tag(kPRST); |
465 reset.SetValue(kRNON, packet.nonce_proof); | 467 reset.SetValue(kRNON, packet.nonce_proof); |
(...skipping 1746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2212 | 2214 |
2213 bool QuicFramer::RaiseError(QuicErrorCode error) { | 2215 bool QuicFramer::RaiseError(QuicErrorCode error) { |
2214 DVLOG(1) << "Error detail: " << detailed_error_; | 2216 DVLOG(1) << "Error detail: " << detailed_error_; |
2215 set_error(error); | 2217 set_error(error); |
2216 visitor_->OnError(this); | 2218 visitor_->OnError(this); |
2217 reader_.reset(nullptr); | 2219 reader_.reset(nullptr); |
2218 return false; | 2220 return false; |
2219 } | 2221 } |
2220 | 2222 |
2221 } // namespace net | 2223 } // namespace net |
OLD | NEW |