| 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 |