| 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_CORE_QUIC_FRAMER_H_ | 5 #ifndef NET_QUIC_CORE_QUIC_FRAMER_H_ |
| 6 #define NET_QUIC_CORE_QUIC_FRAMER_H_ | 6 #define NET_QUIC_CORE_QUIC_FRAMER_H_ |
| 7 | 7 |
| 8 #include <cstddef> | 8 #include <cstddef> |
| 9 #include <cstdint> | 9 #include <cstdint> |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <unordered_map> | |
| 13 #include <unordered_set> | |
| 14 | 12 |
| 15 #include "base/macros.h" | 13 #include "base/macros.h" |
| 16 #include "base/strings/string_piece.h" | 14 #include "base/strings/string_piece.h" |
| 17 #include "net/quic/core/quic_packets.h" | 15 #include "net/quic/core/quic_packets.h" |
| 18 #include "net/quic/platform/api/quic_export.h" | 16 #include "net/quic/platform/api/quic_export.h" |
| 19 | 17 |
| 20 namespace net { | 18 namespace net { |
| 21 | 19 |
| 22 namespace test { | 20 namespace test { |
| 23 class QuicFramerPeer; | 21 class QuicFramerPeer; |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 | 323 |
| 326 void SetSupportedVersions(const QuicVersionVector& versions) { | 324 void SetSupportedVersions(const QuicVersionVector& versions) { |
| 327 supported_versions_ = versions; | 325 supported_versions_ = versions; |
| 328 quic_version_ = versions[0]; | 326 quic_version_ = versions[0]; |
| 329 } | 327 } |
| 330 | 328 |
| 331 void set_validate_flags(bool value) { validate_flags_ = value; } | 329 void set_validate_flags(bool value) { validate_flags_ = value; } |
| 332 | 330 |
| 333 Perspective perspective() const { return perspective_; } | 331 Perspective perspective() const { return perspective_; } |
| 334 | 332 |
| 335 // Called when a PATH_CLOSED frame has been sent/received on |path_id|. | |
| 336 void OnPathClosed(QuicPathId path_id); | |
| 337 | |
| 338 QuicTag last_version_tag() { return last_version_tag_; } | 333 QuicTag last_version_tag() { return last_version_tag_; } |
| 339 | 334 |
| 340 private: | 335 private: |
| 341 friend class test::QuicFramerPeer; | 336 friend class test::QuicFramerPeer; |
| 342 | 337 |
| 343 typedef std::map<QuicPacketNumber, uint8_t> NackRangeMap; | 338 typedef std::map<QuicPacketNumber, uint8_t> NackRangeMap; |
| 344 | 339 |
| 345 struct AckFrameInfo { | 340 struct AckFrameInfo { |
| 346 AckFrameInfo(); | 341 AckFrameInfo(); |
| 347 AckFrameInfo(const AckFrameInfo& other); | 342 AckFrameInfo(const AckFrameInfo& other); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 bool ProcessBlockedFrame(QuicDataReader* reader, QuicBlockedFrame* frame); | 395 bool ProcessBlockedFrame(QuicDataReader* reader, QuicBlockedFrame* frame); |
| 401 bool ProcessPathCloseFrame(QuicDataReader* reader, QuicPathCloseFrame* frame); | 396 bool ProcessPathCloseFrame(QuicDataReader* reader, QuicPathCloseFrame* frame); |
| 402 | 397 |
| 403 bool DecryptPayload(QuicDataReader* encrypted_reader, | 398 bool DecryptPayload(QuicDataReader* encrypted_reader, |
| 404 const QuicPacketHeader& header, | 399 const QuicPacketHeader& header, |
| 405 const QuicEncryptedPacket& packet, | 400 const QuicEncryptedPacket& packet, |
| 406 char* decrypted_buffer, | 401 char* decrypted_buffer, |
| 407 size_t buffer_length, | 402 size_t buffer_length, |
| 408 size_t* decrypted_length); | 403 size_t* decrypted_length); |
| 409 | 404 |
| 410 // Checks if |path_id| is a viable path to receive packets on. Returns true | |
| 411 // and sets |base_packet_number| to the packet number to calculate the | |
| 412 // incoming packet number from if the path is not closed. Returns false | |
| 413 // otherwise. | |
| 414 bool IsValidPath(QuicPathId path_id, QuicPacketNumber* base_packet_number); | |
| 415 | |
| 416 // Sets last_packet_number_. This can only be called after the packet is | 405 // Sets last_packet_number_. This can only be called after the packet is |
| 417 // successfully decrypted. | 406 // successfully decrypted. |
| 418 void SetLastPacketNumber(const QuicPacketHeader& header); | 407 void SetLastPacketNumber(const QuicPacketHeader& header); |
| 419 | 408 |
| 420 // Returns the full packet number from the truncated | 409 // Returns the full packet number from the truncated |
| 421 // wire format version and the last seen packet number. | 410 // wire format version and the last seen packet number. |
| 422 QuicPacketNumber CalculatePacketNumberFromWire( | 411 QuicPacketNumber CalculatePacketNumberFromWire( |
| 423 QuicPacketNumberLength packet_number_length, | 412 QuicPacketNumberLength packet_number_length, |
| 424 QuicPacketNumber base_packet_number, | 413 QuicPacketNumber base_packet_number, |
| 425 QuicPacketNumber packet_number) const; | 414 QuicPacketNumber packet_number) const; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 | 473 |
| 485 bool RaiseError(QuicErrorCode error); | 474 bool RaiseError(QuicErrorCode error); |
| 486 | 475 |
| 487 void set_error(QuicErrorCode error) { error_ = error; } | 476 void set_error(QuicErrorCode error) { error_ = error; } |
| 488 | 477 |
| 489 void set_detailed_error(const char* error) { detailed_error_ = error; } | 478 void set_detailed_error(const char* error) { detailed_error_ = error; } |
| 490 | 479 |
| 491 std::string detailed_error_; | 480 std::string detailed_error_; |
| 492 QuicFramerVisitorInterface* visitor_; | 481 QuicFramerVisitorInterface* visitor_; |
| 493 QuicErrorCode error_; | 482 QuicErrorCode error_; |
| 494 // Set of closed paths. A path is considered as closed if a PATH_CLOSED frame | |
| 495 // has been sent/received. | |
| 496 // TODO(fayang): this set is never cleaned up. A possible improvement is to | |
| 497 // use intervals. | |
| 498 std::unordered_set<QuicPathId> closed_paths_; | |
| 499 // Updated by ProcessPacketHeader when it succeeds. | 483 // Updated by ProcessPacketHeader when it succeeds. |
| 500 QuicPacketNumber last_packet_number_; | 484 QuicPacketNumber last_packet_number_; |
| 501 // Map mapping path id to packet number of largest successfully decrypted | |
| 502 // received packet. | |
| 503 std::unordered_map<QuicPathId, QuicPacketNumber> largest_packet_numbers_; | |
| 504 // Updated by ProcessPacketHeader when it succeeds decrypting a larger packet. | 485 // Updated by ProcessPacketHeader when it succeeds decrypting a larger packet. |
| 505 QuicPacketNumber largest_packet_number_; | 486 QuicPacketNumber largest_packet_number_; |
| 506 // The path on which last successfully decrypted packet was received. | |
| 507 QuicPathId last_path_id_; | |
| 508 // Updated by WritePacketHeader. | 487 // Updated by WritePacketHeader. |
| 509 QuicConnectionId last_serialized_connection_id_; | 488 QuicConnectionId last_serialized_connection_id_; |
| 510 // The last QUIC version tag received. | 489 // The last QUIC version tag received. |
| 511 QuicTag last_version_tag_; | 490 QuicTag last_version_tag_; |
| 512 // Version of the protocol being used. | 491 // Version of the protocol being used. |
| 513 QuicVersion quic_version_; | 492 QuicVersion quic_version_; |
| 514 // This vector contains QUIC versions which we currently support. | 493 // This vector contains QUIC versions which we currently support. |
| 515 // This should be ordered such that the highest supported version is the first | 494 // This should be ordered such that the highest supported version is the first |
| 516 // element, with subsequent elements in descending order (versions can be | 495 // element, with subsequent elements in descending order (versions can be |
| 517 // skipped as necessary). | 496 // skipped as necessary). |
| (...skipping 25 matching lines...) Expand all Loading... |
| 543 QuicTime::Delta last_timestamp_; | 522 QuicTime::Delta last_timestamp_; |
| 544 // The diversification nonce from the last received packet. | 523 // The diversification nonce from the last received packet. |
| 545 DiversificationNonce last_nonce_; | 524 DiversificationNonce last_nonce_; |
| 546 | 525 |
| 547 DISALLOW_COPY_AND_ASSIGN(QuicFramer); | 526 DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
| 548 }; | 527 }; |
| 549 | 528 |
| 550 } // namespace net | 529 } // namespace net |
| 551 | 530 |
| 552 #endif // NET_QUIC_CORE_QUIC_FRAMER_H_ | 531 #endif // NET_QUIC_CORE_QUIC_FRAMER_H_ |
| OLD | NEW |