Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(567)

Side by Side Diff: net/quic/core/quic_framer.cc

Issue 2706893002: Make QuicFramer unaware of path. Also, send/receive PathClose has no effect. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/quic_framer.h ('k') | net/quic/core/quic_framer_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 129
130 } // namespace 130 } // namespace
131 131
132 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions, 132 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions,
133 QuicTime creation_time, 133 QuicTime creation_time,
134 Perspective perspective) 134 Perspective perspective)
135 : visitor_(nullptr), 135 : visitor_(nullptr),
136 error_(QUIC_NO_ERROR), 136 error_(QUIC_NO_ERROR),
137 last_packet_number_(0), 137 last_packet_number_(0),
138 largest_packet_number_(0), 138 largest_packet_number_(0),
139 last_path_id_(kInvalidPathId),
140 last_serialized_connection_id_(0), 139 last_serialized_connection_id_(0),
141 supported_versions_(supported_versions), 140 supported_versions_(supported_versions),
142 decrypter_level_(ENCRYPTION_NONE), 141 decrypter_level_(ENCRYPTION_NONE),
143 alternative_decrypter_level_(ENCRYPTION_NONE), 142 alternative_decrypter_level_(ENCRYPTION_NONE),
144 alternative_decrypter_latch_(false), 143 alternative_decrypter_latch_(false),
145 perspective_(perspective), 144 perspective_(perspective),
146 validate_flags_(true), 145 validate_flags_(true),
147 creation_time_(creation_time), 146 creation_time_(creation_time),
148 last_timestamp_(QuicTime::Delta::Zero()) { 147 last_timestamp_(QuicTime::Delta::Zero()) {
149 DCHECK(!supported_versions.empty()); 148 DCHECK(!supported_versions.empty());
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 uint64_t next_epoch = epoch + epoch_delta; 735 uint64_t next_epoch = epoch + epoch_delta;
737 736
738 uint64_t time = ClosestTo( 737 uint64_t time = ClosestTo(
739 last_timestamp_.ToMicroseconds(), epoch + time_delta_us, 738 last_timestamp_.ToMicroseconds(), epoch + time_delta_us,
740 ClosestTo(last_timestamp_.ToMicroseconds(), prev_epoch + time_delta_us, 739 ClosestTo(last_timestamp_.ToMicroseconds(), prev_epoch + time_delta_us,
741 next_epoch + time_delta_us)); 740 next_epoch + time_delta_us));
742 741
743 return QuicTime::Delta::FromMicroseconds(time); 742 return QuicTime::Delta::FromMicroseconds(time);
744 } 743 }
745 744
746 bool QuicFramer::IsValidPath(QuicPathId path_id,
747 QuicPacketNumber* base_packet_number) {
748 if (QuicContainsKey(closed_paths_, path_id)) {
749 // Path is closed.
750 return false;
751 }
752
753 if (path_id == last_path_id_) {
754 *base_packet_number = largest_packet_number_;
755 return true;
756 }
757
758 if (QuicContainsKey(largest_packet_numbers_, path_id)) {
759 *base_packet_number = largest_packet_numbers_[path_id];
760 } else {
761 *base_packet_number = 0;
762 }
763
764 return true;
765 }
766
767 void QuicFramer::SetLastPacketNumber(const QuicPacketHeader& header) { 745 void QuicFramer::SetLastPacketNumber(const QuicPacketHeader& header) {
768 if (header.public_header.multipath_flag && header.path_id != last_path_id_) {
769 if (last_path_id_ != kInvalidPathId) {
770 // Save current last packet number before changing path.
771 largest_packet_numbers_[last_path_id_] = largest_packet_number_;
772 }
773 // Change path.
774 last_path_id_ = header.path_id;
775 }
776 last_packet_number_ = header.packet_number; 746 last_packet_number_ = header.packet_number;
777 largest_packet_number_ = 747 largest_packet_number_ =
778 std::max(header.packet_number, largest_packet_number_); 748 std::max(header.packet_number, largest_packet_number_);
779 } 749 }
780 750
781 void QuicFramer::OnPathClosed(QuicPathId path_id) {
782 closed_paths_.insert(path_id);
783 largest_packet_numbers_.erase(path_id);
784 }
785
786 QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire( 751 QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire(
787 QuicPacketNumberLength packet_number_length, 752 QuicPacketNumberLength packet_number_length,
788 QuicPacketNumber base_packet_number, 753 QuicPacketNumber base_packet_number,
789 QuicPacketNumber packet_number) const { 754 QuicPacketNumber packet_number) const {
790 // The new packet number might have wrapped to the next epoch, or 755 // The new packet number might have wrapped to the next epoch, or
791 // it might have reverse wrapped to the previous epoch, or it might 756 // it might have reverse wrapped to the previous epoch, or it might
792 // remain in the same epoch. Select the packet number closest to the 757 // remain in the same epoch. Select the packet number closest to the
793 // next expected packet number, the previous packet number plus 1. 758 // next expected packet number, the previous packet number plus 1.
794 759
795 // epoch_delta is the delta between epochs the packet number was serialized 760 // epoch_delta is the delta between epochs the packet number was serialized
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, 922 bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader,
958 QuicPacketHeader* header) { 923 QuicPacketHeader* header) {
959 header->path_id = kDefaultPathId; 924 header->path_id = kDefaultPathId;
960 if (header->public_header.multipath_flag && 925 if (header->public_header.multipath_flag &&
961 !ProcessPathId(encrypted_reader, &header->path_id)) { 926 !ProcessPathId(encrypted_reader, &header->path_id)) {
962 set_detailed_error("Unable to read path id."); 927 set_detailed_error("Unable to read path id.");
963 return RaiseError(QUIC_INVALID_PACKET_HEADER); 928 return RaiseError(QUIC_INVALID_PACKET_HEADER);
964 } 929 }
965 930
966 QuicPacketNumber base_packet_number = largest_packet_number_; 931 QuicPacketNumber base_packet_number = largest_packet_number_;
967 if (header->public_header.multipath_flag &&
968 !IsValidPath(header->path_id, &base_packet_number)) {
969 // Stop processing because path is closed.
970 set_detailed_error("Path is closed.");
971 return false;
972 }
973 932
974 if (!ProcessPacketSequenceNumber( 933 if (!ProcessPacketSequenceNumber(
975 encrypted_reader, header->public_header.packet_number_length, 934 encrypted_reader, header->public_header.packet_number_length,
976 base_packet_number, &header->packet_number)) { 935 base_packet_number, &header->packet_number)) {
977 set_detailed_error("Unable to read packet number."); 936 set_detailed_error("Unable to read packet number.");
978 return RaiseError(QUIC_INVALID_PACKET_HEADER); 937 return RaiseError(QUIC_INVALID_PACKET_HEADER);
979 } 938 }
980 939
981 if (header->packet_number == 0u) { 940 if (header->packet_number == 0u) {
982 set_detailed_error("packet numbers cannot be 0."); 941 set_detailed_error("packet numbers cannot be 0.");
(...skipping 1221 matching lines...) Expand 10 before | Expand all | Expand 10 after
2204 2163
2205 bool QuicFramer::RaiseError(QuicErrorCode error) { 2164 bool QuicFramer::RaiseError(QuicErrorCode error) {
2206 QUIC_DLOG(INFO) << ENDPOINT << "Error: " << QuicErrorCodeToString(error) 2165 QUIC_DLOG(INFO) << ENDPOINT << "Error: " << QuicErrorCodeToString(error)
2207 << " detail: " << detailed_error_; 2166 << " detail: " << detailed_error_;
2208 set_error(error); 2167 set_error(error);
2209 visitor_->OnError(this); 2168 visitor_->OnError(this);
2210 return false; 2169 return false;
2211 } 2170 }
2212 2171
2213 } // namespace net 2172 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_framer.h ('k') | net/quic/core/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698