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

Side by Side Diff: net/quic/quic_framer.h

Issue 19858003: * Removed QuicTag kQuicVersion1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compiler errors Created 7 years, 5 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 | Annotate | Revision Log
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 #ifndef NET_QUIC_QUIC_FRAMER_H_ 5 #ifndef NET_QUIC_QUIC_FRAMER_H_
6 #define NET_QUIC_QUIC_FRAMER_H_ 6 #define NET_QUIC_QUIC_FRAMER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 virtual ~QuicFramerVisitorInterface() {} 57 virtual ~QuicFramerVisitorInterface() {}
58 58
59 // Called if an error is detected in the QUIC protocol. 59 // Called if an error is detected in the QUIC protocol.
60 virtual void OnError(QuicFramer* framer) = 0; 60 virtual void OnError(QuicFramer* framer) = 0;
61 61
62 // Called only when |is_server_| is true and the the framer gets a packet with 62 // Called only when |is_server_| is true and the the framer gets a packet with
63 // version flag true and the version on the packet doesn't match 63 // version flag true and the version on the packet doesn't match
64 // |quic_version_|. The visitor should return true after it updates the 64 // |quic_version_|. The visitor should return true after it updates the
65 // version of the |framer_| to |received_version| or false to stop processing 65 // version of the |framer_| to |received_version| or false to stop processing
66 // this packet. 66 // this packet.
67 virtual bool OnProtocolVersionMismatch(QuicTag received_version) = 0; 67 virtual bool OnProtocolVersionMismatch(QuicVersion received_version) = 0;
68 68
69 // Called when a new packet has been received, before it 69 // Called when a new packet has been received, before it
70 // has been validated or processed. 70 // has been validated or processed.
71 virtual void OnPacket() = 0; 71 virtual void OnPacket() = 0;
72 72
73 // Called when a public reset packet has been parsed but has not yet 73 // Called when a public reset packet has been parsed but has not yet
74 // been validated. 74 // been validated.
75 virtual void OnPublicResetPacket( 75 virtual void OnPublicResetPacket(
76 const QuicPublicResetPacket& packet) = 0; 76 const QuicPublicResetPacket& packet) = 0;
77 77
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 }; 146 };
147 147
148 // Class for parsing and constructing QUIC packets. It has a 148 // Class for parsing and constructing QUIC packets. It has a
149 // QuicFramerVisitorInterface that is called when packets are parsed. 149 // QuicFramerVisitorInterface that is called when packets are parsed.
150 // It also has a QuicFecBuilder that is called when packets are constructed 150 // It also has a QuicFecBuilder that is called when packets are constructed
151 // in order to generate FEC data for subsequently building FEC packets. 151 // in order to generate FEC data for subsequently building FEC packets.
152 class NET_EXPORT_PRIVATE QuicFramer { 152 class NET_EXPORT_PRIVATE QuicFramer {
153 public: 153 public:
154 // Constructs a new framer that installs a kNULL QuicEncrypter and 154 // Constructs a new framer that installs a kNULL QuicEncrypter and
155 // QuicDecrypter for level ENCRYPTION_NONE. 155 // QuicDecrypter for level ENCRYPTION_NONE.
156 QuicFramer(QuicTag quic_version, 156 QuicFramer(QuicVersion quic_version,
157 QuicTime creation_time, 157 QuicTime creation_time,
158 bool is_server); 158 bool is_server);
159 159
160 virtual ~QuicFramer(); 160 virtual ~QuicFramer();
161 161
162 // Returns true if |version| is a supported protocol version. 162 // Returns true if |version| is a supported protocol version.
163 bool IsSupportedVersion(QuicTag version); 163 bool IsSupportedVersion(const QuicVersion version) const;
164 164
165 // Calculates the largest observed packet to advertise in the case an Ack 165 // Calculates the largest observed packet to advertise in the case an Ack
166 // Frame was truncated. last_written in this case is the iterator for the 166 // Frame was truncated. last_written in this case is the iterator for the
167 // last missing packet which fit in the outgoing ack. 167 // last missing packet which fit in the outgoing ack.
168 static QuicPacketSequenceNumber CalculateLargestObserved( 168 static QuicPacketSequenceNumber CalculateLargestObserved(
169 const SequenceNumberSet& missing_packets, 169 const SequenceNumberSet& missing_packets,
170 SequenceNumberSet::const_iterator last_written); 170 SequenceNumberSet::const_iterator last_written);
171 171
172 // Set callbacks to be called from the framer. A visitor must be set, or 172 // Set callbacks to be called from the framer. A visitor must be set, or
173 // else the framer will likely crash. It is acceptable for the visitor 173 // else the framer will likely crash. It is acceptable for the visitor
174 // to do nothing. If this is called multiple times, only the last visitor 174 // to do nothing. If this is called multiple times, only the last visitor
175 // will be used. 175 // will be used.
176 void set_visitor(QuicFramerVisitorInterface* visitor) { 176 void set_visitor(QuicFramerVisitorInterface* visitor) {
177 visitor_ = visitor; 177 visitor_ = visitor;
178 } 178 }
179 179
180 // Set a builder to be called from the framer when building FEC protected 180 // Set a builder to be called from the framer when building FEC protected
181 // packets. If this is called multiple times, only the last builder 181 // packets. If this is called multiple times, only the last builder
182 // will be used. The builder need not be set. 182 // will be used. The builder need not be set.
183 void set_fec_builder(QuicFecBuilderInterface* builder) { 183 void set_fec_builder(QuicFecBuilderInterface* builder) {
184 fec_builder_ = builder; 184 fec_builder_ = builder;
185 } 185 }
186 186
187 QuicTag version() const { 187 QuicVersion version() const {
188 return quic_version_; 188 return quic_version_;
189 } 189 }
190 190
191 void set_version(QuicTag version) { 191 void set_version(const QuicVersion version) {
192 DCHECK(IsSupportedVersion(version)); 192 DCHECK(IsSupportedVersion(version));
193 quic_version_ = version; 193 quic_version_ = version;
194 } 194 }
195 195
196 // Does not DCHECK for supported version. Used by tests to set unsupported
197 // version to trigger version negotiation.
198 void set_version_for_tests(const QuicVersion version) {
199 quic_version_ = version;
200 }
201
196 // Set entropy calculator to be called from the framer when it needs the 202 // Set entropy calculator to be called from the framer when it needs the
197 // entropy of a truncated ack frame. An entropy calculator must be set or else 203 // entropy of a truncated ack frame. An entropy calculator must be set or else
198 // the framer will likely crash. If this is called multiple times, only the 204 // the framer will likely crash. If this is called multiple times, only the
199 // last visitor will be used. 205 // last visitor will be used.
200 void set_entropy_calculator( 206 void set_entropy_calculator(
201 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator) { 207 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator) {
202 entropy_calculator_ = entropy_calculator; 208 entropy_calculator_ = entropy_calculator;
203 } 209 }
204 210
205 QuicErrorCode error() const { 211 QuicErrorCode error() const {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 // packet could not be created. 284 // packet could not be created.
279 SerializedPacket ConstructFecPacket(const QuicPacketHeader& header, 285 SerializedPacket ConstructFecPacket(const QuicPacketHeader& header,
280 const QuicFecData& fec); 286 const QuicFecData& fec);
281 287
282 // Returns a new public reset packet, owned by the caller. 288 // Returns a new public reset packet, owned by the caller.
283 static QuicEncryptedPacket* ConstructPublicResetPacket( 289 static QuicEncryptedPacket* ConstructPublicResetPacket(
284 const QuicPublicResetPacket& packet); 290 const QuicPublicResetPacket& packet);
285 291
286 QuicEncryptedPacket* ConstructVersionNegotiationPacket( 292 QuicEncryptedPacket* ConstructVersionNegotiationPacket(
287 const QuicPacketPublicHeader& header, 293 const QuicPacketPublicHeader& header,
288 const QuicTagVector& supported_versions); 294 const QuicVersionVector& supported_versions);
289 295
290 // SetDecrypter sets the primary decrypter, replacing any that already exists, 296 // SetDecrypter sets the primary decrypter, replacing any that already exists,
291 // and takes ownership. If an alternative decrypter is in place then the 297 // and takes ownership. If an alternative decrypter is in place then the
292 // function DCHECKs. This is intended for cases where one knows that future 298 // function DCHECKs. This is intended for cases where one knows that future
293 // packets will be using the new decrypter and the previous decrypter is not 299 // packets will be using the new decrypter and the previous decrypter is not
294 // obsolete. 300 // obsolete.
295 void SetDecrypter(QuicDecrypter* decrypter); 301 void SetDecrypter(QuicDecrypter* decrypter);
296 302
297 // SetAlternativeDecrypter sets a decrypter that may be used to decrypt 303 // SetAlternativeDecrypter sets a decrypter that may be used to decrypt
298 // future packets and takes ownership of it. If |latch_once_used| is true, 304 // future packets and takes ownership of it. If |latch_once_used| is true,
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 QuicFecBuilderInterface* fec_builder_; 418 QuicFecBuilderInterface* fec_builder_;
413 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; 419 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_;
414 QuicErrorCode error_; 420 QuicErrorCode error_;
415 // Updated by ProcessPacketHeader when it succeeds. 421 // Updated by ProcessPacketHeader when it succeeds.
416 QuicPacketSequenceNumber last_sequence_number_; 422 QuicPacketSequenceNumber last_sequence_number_;
417 // Updated by WritePacketHeader. 423 // Updated by WritePacketHeader.
418 QuicGuid last_serialized_guid_; 424 QuicGuid last_serialized_guid_;
419 // Buffer containing decrypted payload data during parsing. 425 // Buffer containing decrypted payload data during parsing.
420 scoped_ptr<QuicData> decrypted_; 426 scoped_ptr<QuicData> decrypted_;
421 // Version of the protocol being used. 427 // Version of the protocol being used.
422 QuicTag quic_version_; 428 QuicVersion quic_version_;
423 // Primary decrypter used to decrypt packets during parsing. 429 // Primary decrypter used to decrypt packets during parsing.
424 scoped_ptr<QuicDecrypter> decrypter_; 430 scoped_ptr<QuicDecrypter> decrypter_;
425 // Alternative decrypter that can also be used to decrypt packets. 431 // Alternative decrypter that can also be used to decrypt packets.
426 scoped_ptr<QuicDecrypter> alternative_decrypter_; 432 scoped_ptr<QuicDecrypter> alternative_decrypter_;
427 // alternative_decrypter_latch_is true if, when |alternative_decrypter_| 433 // alternative_decrypter_latch_is true if, when |alternative_decrypter_|
428 // successfully decrypts a packet, we should install it as the only 434 // successfully decrypts a packet, we should install it as the only
429 // decrypter. 435 // decrypter.
430 bool alternative_decrypter_latch_; 436 bool alternative_decrypter_latch_;
431 // Encrypters used to encrypt packets via EncryptPacket(). 437 // Encrypters used to encrypt packets via EncryptPacket().
432 scoped_ptr<QuicEncrypter> encrypter_[NUM_ENCRYPTION_LEVELS]; 438 scoped_ptr<QuicEncrypter> encrypter_[NUM_ENCRYPTION_LEVELS];
433 // Tracks if the framer is being used by the entity that received the 439 // Tracks if the framer is being used by the entity that received the
434 // connection or the entity that initiated it. 440 // connection or the entity that initiated it.
435 bool is_server_; 441 bool is_server_;
436 // The time this frames was created. Time written to the wire will be 442 // The time this frames was created. Time written to the wire will be
437 // written as a delta from this value. 443 // written as a delta from this value.
438 QuicTime creation_time_; 444 QuicTime creation_time_;
439 445
440 DISALLOW_COPY_AND_ASSIGN(QuicFramer); 446 DISALLOW_COPY_AND_ASSIGN(QuicFramer);
441 }; 447 };
442 448
443 } // namespace net 449 } // namespace net
444 450
445 #endif // NET_QUIC_QUIC_FRAMER_H_ 451 #endif // NET_QUIC_QUIC_FRAMER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698