| 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 785 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 return QuicTime::Delta::FromMicroseconds(time); | 796 return QuicTime::Delta::FromMicroseconds(time); |
| 797 } | 797 } |
| 798 | 798 |
| 799 bool QuicFramer::IsValidPath(QuicPathId path_id, | 799 bool QuicFramer::IsValidPath(QuicPathId path_id, |
| 800 QuicPacketNumber* base_packet_number) { | 800 QuicPacketNumber* base_packet_number) { |
| 801 if (ContainsKey(closed_paths_, path_id)) { | 801 if (ContainsKey(closed_paths_, path_id)) { |
| 802 // Path is closed. | 802 // Path is closed. |
| 803 return false; | 803 return false; |
| 804 } | 804 } |
| 805 | 805 |
| 806 if (FLAGS_quic_packet_numbers_largest_received) { | 806 if (path_id == last_path_id_) { |
| 807 if (path_id == last_path_id_) { | 807 *base_packet_number = largest_packet_number_; |
| 808 *base_packet_number = largest_packet_number_; | 808 return true; |
| 809 return true; | 809 } |
| 810 } | |
| 811 | 810 |
| 812 if (ContainsKey(largest_packet_numbers_, path_id)) { | 811 if (ContainsKey(largest_packet_numbers_, path_id)) { |
| 813 *base_packet_number = largest_packet_numbers_[path_id]; | 812 *base_packet_number = largest_packet_numbers_[path_id]; |
| 814 } else { | |
| 815 *base_packet_number = 0; | |
| 816 } | |
| 817 } else { | 813 } else { |
| 818 if (path_id == last_path_id_) { | 814 *base_packet_number = 0; |
| 819 *base_packet_number = last_packet_number_; | |
| 820 return true; | |
| 821 } | |
| 822 | |
| 823 if (ContainsKey(last_packet_numbers_, path_id)) { | |
| 824 *base_packet_number = last_packet_numbers_[path_id]; | |
| 825 } else { | |
| 826 *base_packet_number = 0; | |
| 827 } | |
| 828 } | 815 } |
| 829 | 816 |
| 830 return true; | 817 return true; |
| 831 } | 818 } |
| 832 | 819 |
| 833 void QuicFramer::SetLastPacketNumber(const QuicPacketHeader& header) { | 820 void QuicFramer::SetLastPacketNumber(const QuicPacketHeader& header) { |
| 834 if (header.public_header.multipath_flag && header.path_id != last_path_id_) { | 821 if (header.public_header.multipath_flag && header.path_id != last_path_id_) { |
| 835 if (last_path_id_ != kInvalidPathId) { | 822 if (last_path_id_ != kInvalidPathId) { |
| 836 // Save current last packet number before changing path. | 823 // Save current last packet number before changing path. |
| 837 last_packet_numbers_[last_path_id_] = last_packet_number_; | 824 largest_packet_numbers_[last_path_id_] = largest_packet_number_; |
| 838 if (FLAGS_quic_packet_numbers_largest_received) { | |
| 839 largest_packet_numbers_[last_path_id_] = largest_packet_number_; | |
| 840 } | |
| 841 } | 825 } |
| 842 // Change path. | 826 // Change path. |
| 843 last_path_id_ = header.path_id; | 827 last_path_id_ = header.path_id; |
| 844 } | 828 } |
| 845 last_packet_number_ = header.packet_number; | 829 last_packet_number_ = header.packet_number; |
| 846 if (FLAGS_quic_packet_numbers_largest_received) { | 830 largest_packet_number_ = max(header.packet_number, largest_packet_number_); |
| 847 largest_packet_number_ = max(header.packet_number, largest_packet_number_); | |
| 848 } | |
| 849 } | 831 } |
| 850 | 832 |
| 851 void QuicFramer::OnPathClosed(QuicPathId path_id) { | 833 void QuicFramer::OnPathClosed(QuicPathId path_id) { |
| 852 closed_paths_.insert(path_id); | 834 closed_paths_.insert(path_id); |
| 853 last_packet_numbers_.erase(path_id); | 835 largest_packet_numbers_.erase(path_id); |
| 854 } | 836 } |
| 855 | 837 |
| 856 QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire( | 838 QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire( |
| 857 QuicPacketNumberLength packet_number_length, | 839 QuicPacketNumberLength packet_number_length, |
| 858 QuicPacketNumber base_packet_number, | 840 QuicPacketNumber base_packet_number, |
| 859 QuicPacketNumber packet_number) const { | 841 QuicPacketNumber packet_number) const { |
| 860 // The new packet number might have wrapped to the next epoch, or | 842 // The new packet number might have wrapped to the next epoch, or |
| 861 // it might have reverse wrapped to the previous epoch, or it might | 843 // it might have reverse wrapped to the previous epoch, or it might |
| 862 // remain in the same epoch. Select the packet number closest to the | 844 // remain in the same epoch. Select the packet number closest to the |
| 863 // next expected packet number, the previous packet number plus 1. | 845 // next expected packet number, the previous packet number plus 1. |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1061 | 1043 |
| 1062 bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, | 1044 bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, |
| 1063 QuicPacketHeader* header) { | 1045 QuicPacketHeader* header) { |
| 1064 header->path_id = kDefaultPathId; | 1046 header->path_id = kDefaultPathId; |
| 1065 if (header->public_header.multipath_flag && | 1047 if (header->public_header.multipath_flag && |
| 1066 !ProcessPathId(encrypted_reader, &header->path_id)) { | 1048 !ProcessPathId(encrypted_reader, &header->path_id)) { |
| 1067 set_detailed_error("Unable to read path id."); | 1049 set_detailed_error("Unable to read path id."); |
| 1068 return RaiseError(QUIC_INVALID_PACKET_HEADER); | 1050 return RaiseError(QUIC_INVALID_PACKET_HEADER); |
| 1069 } | 1051 } |
| 1070 | 1052 |
| 1071 QuicPacketNumber base_packet_number = | 1053 QuicPacketNumber base_packet_number = largest_packet_number_; |
| 1072 FLAGS_quic_packet_numbers_largest_received ? largest_packet_number_ | |
| 1073 : last_packet_number_; | |
| 1074 if (header->public_header.multipath_flag && | 1054 if (header->public_header.multipath_flag && |
| 1075 !IsValidPath(header->path_id, &base_packet_number)) { | 1055 !IsValidPath(header->path_id, &base_packet_number)) { |
| 1076 // Stop processing because path is closed. | 1056 // Stop processing because path is closed. |
| 1077 return false; | 1057 return false; |
| 1078 } | 1058 } |
| 1079 | 1059 |
| 1080 if (!ProcessPacketSequenceNumber( | 1060 if (!ProcessPacketSequenceNumber( |
| 1081 encrypted_reader, header->public_header.packet_number_length, | 1061 encrypted_reader, header->public_header.packet_number_length, |
| 1082 base_packet_number, &header->packet_number)) { | 1062 base_packet_number, &header->packet_number)) { |
| 1083 set_detailed_error("Unable to read packet number."); | 1063 set_detailed_error("Unable to read packet number."); |
| (...skipping 1491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2575 | 2555 |
| 2576 bool QuicFramer::RaiseError(QuicErrorCode error) { | 2556 bool QuicFramer::RaiseError(QuicErrorCode error) { |
| 2577 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) | 2557 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) |
| 2578 << " detail: " << detailed_error_; | 2558 << " detail: " << detailed_error_; |
| 2579 set_error(error); | 2559 set_error(error); |
| 2580 visitor_->OnError(this); | 2560 visitor_->OnError(this); |
| 2581 return false; | 2561 return false; |
| 2582 } | 2562 } |
| 2583 | 2563 |
| 2584 } // namespace net | 2564 } // namespace net |
| OLD | NEW |