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 |