| 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 #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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 QuicPacketSequenceNumber sequence_number) const = 0; | 143 QuicPacketSequenceNumber sequence_number) const = 0; |
| 144 }; | 144 }; |
| 145 | 145 |
| 146 // Class for parsing and constructing QUIC packets. It has a | 146 // Class for parsing and constructing QUIC packets. It has a |
| 147 // QuicFramerVisitorInterface that is called when packets are parsed. | 147 // QuicFramerVisitorInterface that is called when packets are parsed. |
| 148 // It also has a QuicFecBuilder that is called when packets are constructed | 148 // It also has a QuicFecBuilder that is called when packets are constructed |
| 149 // in order to generate FEC data for subsequently building FEC packets. | 149 // in order to generate FEC data for subsequently building FEC packets. |
| 150 class NET_EXPORT_PRIVATE QuicFramer { | 150 class NET_EXPORT_PRIVATE QuicFramer { |
| 151 public: | 151 public: |
| 152 // Constructs a new framer that installs a kNULL QuicEncrypter and | 152 // Constructs a new framer that installs a kNULL QuicEncrypter and |
| 153 // QuicDecrypter for level ENCRYPTION_NONE. | 153 // QuicDecrypter for level ENCRYPTION_NONE. |supported_versions| specifies the |
| 154 QuicFramer(QuicVersion quic_version, | 154 // list of supported QUIC versions. |quic_version_| is set to the maximum |
| 155 // version in |supported_versions|. |
| 156 QuicFramer(const QuicVersionVector& supported_versions, |
| 155 QuicTime creation_time, | 157 QuicTime creation_time, |
| 156 bool is_server); | 158 bool is_server); |
| 157 | 159 |
| 158 virtual ~QuicFramer(); | 160 virtual ~QuicFramer(); |
| 159 | 161 |
| 160 // Returns true if |version| is a supported protocol version. | 162 // Returns true if |version| is a supported protocol version. |
| 161 bool IsSupportedVersion(const QuicVersion version) const; | 163 bool IsSupportedVersion(const QuicVersion version) const; |
| 162 | 164 |
| 163 // 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 |
| 164 // 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 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 175 visitor_ = visitor; | 177 visitor_ = visitor; |
| 176 } | 178 } |
| 177 | 179 |
| 178 // 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 |
| 179 // packets. If this is called multiple times, only the last builder | 181 // packets. If this is called multiple times, only the last builder |
| 180 // will be used. The builder need not be set. | 182 // will be used. The builder need not be set. |
| 181 void set_fec_builder(QuicFecBuilderInterface* builder) { | 183 void set_fec_builder(QuicFecBuilderInterface* builder) { |
| 182 fec_builder_ = builder; | 184 fec_builder_ = builder; |
| 183 } | 185 } |
| 184 | 186 |
| 187 const QuicVersionVector& supported_versions() const { |
| 188 return supported_versions_; |
| 189 } |
| 190 |
| 185 QuicVersion version() const { | 191 QuicVersion version() const { |
| 186 return quic_version_; | 192 return quic_version_; |
| 187 } | 193 } |
| 188 | 194 |
| 189 void set_version(const QuicVersion version); | 195 void set_version(const QuicVersion version); |
| 190 | 196 |
| 191 // Does not DCHECK for supported version. Used by tests to set unsupported | 197 // Does not DCHECK for supported version. Used by tests to set unsupported |
| 192 // version to trigger version negotiation. | 198 // version to trigger version negotiation. |
| 193 void set_version_for_tests(const QuicVersion version) { | 199 void set_version_for_tests(const QuicVersion version) { |
| 194 quic_version_ = version; | 200 quic_version_ = version; |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; | 428 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; |
| 423 QuicErrorCode error_; | 429 QuicErrorCode error_; |
| 424 // Updated by ProcessPacketHeader when it succeeds. | 430 // Updated by ProcessPacketHeader when it succeeds. |
| 425 QuicPacketSequenceNumber last_sequence_number_; | 431 QuicPacketSequenceNumber last_sequence_number_; |
| 426 // Updated by WritePacketHeader. | 432 // Updated by WritePacketHeader. |
| 427 QuicGuid last_serialized_guid_; | 433 QuicGuid last_serialized_guid_; |
| 428 // Buffer containing decrypted payload data during parsing. | 434 // Buffer containing decrypted payload data during parsing. |
| 429 scoped_ptr<QuicData> decrypted_; | 435 scoped_ptr<QuicData> decrypted_; |
| 430 // Version of the protocol being used. | 436 // Version of the protocol being used. |
| 431 QuicVersion quic_version_; | 437 QuicVersion quic_version_; |
| 438 // This vector contains QUIC versions which we currently support. |
| 439 // This should be ordered such that the highest supported version is the first |
| 440 // element, with subsequent elements in descending order (versions can be |
| 441 // skipped as necessary). |
| 442 QuicVersionVector supported_versions_; |
| 432 // Primary decrypter used to decrypt packets during parsing. | 443 // Primary decrypter used to decrypt packets during parsing. |
| 433 scoped_ptr<QuicDecrypter> decrypter_; | 444 scoped_ptr<QuicDecrypter> decrypter_; |
| 434 // Alternative decrypter that can also be used to decrypt packets. | 445 // Alternative decrypter that can also be used to decrypt packets. |
| 435 scoped_ptr<QuicDecrypter> alternative_decrypter_; | 446 scoped_ptr<QuicDecrypter> alternative_decrypter_; |
| 436 // alternative_decrypter_latch_is true if, when |alternative_decrypter_| | 447 // alternative_decrypter_latch_is true if, when |alternative_decrypter_| |
| 437 // successfully decrypts a packet, we should install it as the only | 448 // successfully decrypts a packet, we should install it as the only |
| 438 // decrypter. | 449 // decrypter. |
| 439 bool alternative_decrypter_latch_; | 450 bool alternative_decrypter_latch_; |
| 440 // Encrypters used to encrypt packets via EncryptPacket(). | 451 // Encrypters used to encrypt packets via EncryptPacket(). |
| 441 scoped_ptr<QuicEncrypter> encrypter_[NUM_ENCRYPTION_LEVELS]; | 452 scoped_ptr<QuicEncrypter> encrypter_[NUM_ENCRYPTION_LEVELS]; |
| 442 // Tracks if the framer is being used by the entity that received the | 453 // Tracks if the framer is being used by the entity that received the |
| 443 // connection or the entity that initiated it. | 454 // connection or the entity that initiated it. |
| 444 bool is_server_; | 455 bool is_server_; |
| 445 // The time this frames was created. Time written to the wire will be | 456 // The time this frames was created. Time written to the wire will be |
| 446 // written as a delta from this value. | 457 // written as a delta from this value. |
| 447 QuicTime creation_time_; | 458 QuicTime creation_time_; |
| 448 | 459 |
| 449 DISALLOW_COPY_AND_ASSIGN(QuicFramer); | 460 DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
| 450 }; | 461 }; |
| 451 | 462 |
| 452 } // namespace net | 463 } // namespace net |
| 453 | 464 |
| 454 #endif // NET_QUIC_QUIC_FRAMER_H_ | 465 #endif // NET_QUIC_QUIC_FRAMER_H_ |
| OLD | NEW |