| 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/core/quic_framer.h" | 5 #include "net/quic/core/quic_framer.h" |
| 6 | 6 |
| 7 #include <cstdint> | 7 #include <cstdint> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 } | 535 } |
| 536 | 536 |
| 537 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) { | 537 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) { |
| 538 QuicDataReader reader(packet.data(), packet.length()); | 538 QuicDataReader reader(packet.data(), packet.length()); |
| 539 | 539 |
| 540 visitor_->OnPacket(); | 540 visitor_->OnPacket(); |
| 541 | 541 |
| 542 // First parse the public header. | 542 // First parse the public header. |
| 543 QuicPacketPublicHeader public_header; | 543 QuicPacketPublicHeader public_header; |
| 544 if (!ProcessPublicHeader(&reader, &public_header)) { | 544 if (!ProcessPublicHeader(&reader, &public_header)) { |
| 545 DLOG(WARNING) << "Unable to process public header."; | 545 DVLOG(1) << "Unable to process public header."; |
| 546 DCHECK_NE("", detailed_error_); | 546 DCHECK_NE("", detailed_error_); |
| 547 return RaiseError(QUIC_INVALID_PACKET_HEADER); | 547 return RaiseError(QUIC_INVALID_PACKET_HEADER); |
| 548 } | 548 } |
| 549 | 549 |
| 550 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) { | 550 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) { |
| 551 // The visitor suppresses further processing of the packet. | 551 // The visitor suppresses further processing of the packet. |
| 552 return true; | 552 return true; |
| 553 } | 553 } |
| 554 | 554 |
| 555 if (perspective_ == Perspective::IS_SERVER && public_header.version_flag && | 555 if (perspective_ == Perspective::IS_SERVER && public_header.version_flag && |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 return true; | 602 return true; |
| 603 } | 603 } |
| 604 | 604 |
| 605 bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader, | 605 bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader, |
| 606 const QuicPacketPublicHeader& public_header, | 606 const QuicPacketPublicHeader& public_header, |
| 607 const QuicEncryptedPacket& packet, | 607 const QuicEncryptedPacket& packet, |
| 608 char* decrypted_buffer, | 608 char* decrypted_buffer, |
| 609 size_t buffer_length) { | 609 size_t buffer_length) { |
| 610 QuicPacketHeader header(public_header); | 610 QuicPacketHeader header(public_header); |
| 611 if (!ProcessUnauthenticatedHeader(encrypted_reader, &header)) { | 611 if (!ProcessUnauthenticatedHeader(encrypted_reader, &header)) { |
| 612 DLOG(WARNING) << "Unable to process packet header. Stopping parsing."; | 612 DVLOG(1) << "Unable to process packet header. Stopping parsing."; |
| 613 return false; | 613 return false; |
| 614 } | 614 } |
| 615 | 615 |
| 616 size_t decrypted_length = 0; | 616 size_t decrypted_length = 0; |
| 617 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer, | 617 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer, |
| 618 buffer_length, &decrypted_length)) { | 618 buffer_length, &decrypted_length)) { |
| 619 set_detailed_error("Unable to decrypt payload."); | 619 set_detailed_error("Unable to decrypt payload."); |
| 620 return RaiseError(QUIC_DECRYPTION_FAILURE); | 620 return RaiseError(QUIC_DECRYPTION_FAILURE); |
| 621 } | 621 } |
| 622 | 622 |
| 623 QuicDataReader reader(decrypted_buffer, decrypted_length); | 623 QuicDataReader reader(decrypted_buffer, decrypted_length); |
| 624 if (quic_version_ <= QUIC_VERSION_33) { | 624 if (quic_version_ <= QUIC_VERSION_33) { |
| 625 if (!ProcessAuthenticatedHeader(&reader, &header)) { | 625 if (!ProcessAuthenticatedHeader(&reader, &header)) { |
| 626 DLOG(WARNING) << "Unable to process packet header. Stopping parsing."; | 626 DVLOG(1) << "Unable to process packet header. Stopping parsing."; |
| 627 return false; | 627 return false; |
| 628 } | 628 } |
| 629 } | 629 } |
| 630 | 630 |
| 631 // Set the last packet number after we have decrypted the packet | 631 // Set the last packet number after we have decrypted the packet |
| 632 // so we are confident is not attacker controlled. | 632 // so we are confident is not attacker controlled. |
| 633 SetLastPacketNumber(header); | 633 SetLastPacketNumber(header); |
| 634 | 634 |
| 635 if (!visitor_->OnPacketHeader(header)) { | 635 if (!visitor_->OnPacketHeader(header)) { |
| 636 // The visitor suppresses further processing of the packet. | 636 // The visitor suppresses further processing of the packet. |
| (...skipping 1249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1886 // Switch the alternative decrypter so that we use it first next time. | 1886 // Switch the alternative decrypter so that we use it first next time. |
| 1887 decrypter_.swap(alternative_decrypter_); | 1887 decrypter_.swap(alternative_decrypter_); |
| 1888 EncryptionLevel level = alternative_decrypter_level_; | 1888 EncryptionLevel level = alternative_decrypter_level_; |
| 1889 alternative_decrypter_level_ = decrypter_level_; | 1889 alternative_decrypter_level_ = decrypter_level_; |
| 1890 decrypter_level_ = level; | 1890 decrypter_level_ = level; |
| 1891 } | 1891 } |
| 1892 } | 1892 } |
| 1893 } | 1893 } |
| 1894 | 1894 |
| 1895 if (!success) { | 1895 if (!success) { |
| 1896 DLOG(WARNING) << "DecryptPacket failed for packet_number:" | 1896 DVLOG(1) << "DecryptPacket failed for packet_number:" |
| 1897 << header.packet_number; | 1897 << header.packet_number; |
| 1898 return false; | 1898 return false; |
| 1899 } | 1899 } |
| 1900 | 1900 |
| 1901 return true; | 1901 return true; |
| 1902 } | 1902 } |
| 1903 | 1903 |
| 1904 size_t QuicFramer::GetAckFrameTimeStampSize(const QuicAckFrame& ack) { | 1904 size_t QuicFramer::GetAckFrameTimeStampSize(const QuicAckFrame& ack) { |
| 1905 if (ack.received_packet_times.empty()) { | 1905 if (ack.received_packet_times.empty()) { |
| 1906 return 0; | 1906 return 0; |
| 1907 } | 1907 } |
| (...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2573 | 2573 |
| 2574 bool QuicFramer::RaiseError(QuicErrorCode error) { | 2574 bool QuicFramer::RaiseError(QuicErrorCode error) { |
| 2575 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) | 2575 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) |
| 2576 << " detail: " << detailed_error_; | 2576 << " detail: " << detailed_error_; |
| 2577 set_error(error); | 2577 set_error(error); |
| 2578 visitor_->OnError(this); | 2578 visitor_->OnError(this); |
| 2579 return false; | 2579 return false; |
| 2580 } | 2580 } |
| 2581 | 2581 |
| 2582 } // namespace net | 2582 } // namespace net |
| OLD | NEW |