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 <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 QuicPacketHeader* header); | 434 QuicPacketHeader* header); |
435 | 435 |
436 // Processes the authenticated portion of the header into |header| from | 436 // Processes the authenticated portion of the header into |header| from |
437 // the current QuicDataReader. Returns true on success, false on failure. | 437 // the current QuicDataReader. Returns true on success, false on failure. |
438 bool ProcessAuthenticatedHeader(QuicDataReader* reader, | 438 bool ProcessAuthenticatedHeader(QuicDataReader* reader, |
439 QuicPacketHeader* header); | 439 QuicPacketHeader* header); |
440 | 440 |
441 bool ProcessPathId(QuicDataReader* reader, QuicPathId* path_id); | 441 bool ProcessPathId(QuicDataReader* reader, QuicPathId* path_id); |
442 bool ProcessPacketSequenceNumber(QuicDataReader* reader, | 442 bool ProcessPacketSequenceNumber(QuicDataReader* reader, |
443 QuicPacketNumberLength packet_number_length, | 443 QuicPacketNumberLength packet_number_length, |
444 QuicPacketNumber last_packet_number, | 444 QuicPacketNumber base_packet_number, |
445 QuicPacketNumber* packet_number); | 445 QuicPacketNumber* packet_number); |
446 bool ProcessFrameData(QuicDataReader* reader, const QuicPacketHeader& header); | 446 bool ProcessFrameData(QuicDataReader* reader, const QuicPacketHeader& header); |
447 bool ProcessStreamFrame(QuicDataReader* reader, | 447 bool ProcessStreamFrame(QuicDataReader* reader, |
448 uint8_t frame_type, | 448 uint8_t frame_type, |
449 QuicStreamFrame* frame); | 449 QuicStreamFrame* frame); |
450 bool ProcessAckFrame(QuicDataReader* reader, | 450 bool ProcessAckFrame(QuicDataReader* reader, |
451 uint8_t frame_type, | 451 uint8_t frame_type, |
452 QuicAckFrame* frame); | 452 QuicAckFrame* frame); |
453 bool ProcessNewAckFrame(QuicDataReader* reader, | 453 bool ProcessNewAckFrame(QuicDataReader* reader, |
454 uint8_t frame_type, | 454 uint8_t frame_type, |
(...skipping 12 matching lines...) Expand all Loading... |
467 bool ProcessPathCloseFrame(QuicDataReader* reader, QuicPathCloseFrame* frame); | 467 bool ProcessPathCloseFrame(QuicDataReader* reader, QuicPathCloseFrame* frame); |
468 | 468 |
469 bool DecryptPayload(QuicDataReader* encrypted_reader, | 469 bool DecryptPayload(QuicDataReader* encrypted_reader, |
470 const QuicPacketHeader& header, | 470 const QuicPacketHeader& header, |
471 const QuicEncryptedPacket& packet, | 471 const QuicEncryptedPacket& packet, |
472 char* decrypted_buffer, | 472 char* decrypted_buffer, |
473 size_t buffer_length, | 473 size_t buffer_length, |
474 size_t* decrypted_length); | 474 size_t* decrypted_length); |
475 | 475 |
476 // Checks if |path_id| is a viable path to receive packets on. Returns true | 476 // Checks if |path_id| is a viable path to receive packets on. Returns true |
477 // and sets |last_packet_number| if the path is not closed. Returns false | 477 // and sets |base_packet_number| to the packet number to calculate the |
| 478 // incoming packet number from if the path is not closed. Returns false |
478 // otherwise. | 479 // otherwise. |
479 bool IsValidPath(QuicPathId path_id, QuicPacketNumber* last_packet_number); | 480 bool IsValidPath(QuicPathId path_id, QuicPacketNumber* base_packet_number); |
480 | 481 |
481 // Sets last_packet_number_. This can only be called after the packet is | 482 // Sets last_packet_number_. This can only be called after the packet is |
482 // successfully decrypted. | 483 // successfully decrypted. |
483 void SetLastPacketNumber(const QuicPacketHeader& header); | 484 void SetLastPacketNumber(const QuicPacketHeader& header); |
484 | 485 |
485 // Returns the full packet number from the truncated | 486 // Returns the full packet number from the truncated |
486 // wire format version and the last seen packet number. | 487 // wire format version and the last seen packet number. |
487 QuicPacketNumber CalculatePacketNumberFromWire( | 488 QuicPacketNumber CalculatePacketNumberFromWire( |
488 QuicPacketNumberLength packet_number_length, | 489 QuicPacketNumberLength packet_number_length, |
489 QuicPacketNumber last_packet_number, | 490 QuicPacketNumber base_packet_number, |
490 QuicPacketNumber packet_number) const; | 491 QuicPacketNumber packet_number) const; |
491 | 492 |
492 // Returns the QuicTime::Delta corresponding to the time from when the framer | 493 // Returns the QuicTime::Delta corresponding to the time from when the framer |
493 // was created. | 494 // was created. |
494 const QuicTime::Delta CalculateTimestampFromWire(uint32_t time_delta_us); | 495 const QuicTime::Delta CalculateTimestampFromWire(uint32_t time_delta_us); |
495 | 496 |
496 // Computes the wire size in bytes of time stamps in |ack|. | 497 // Computes the wire size in bytes of time stamps in |ack|. |
497 size_t GetAckFrameTimeStampSize(const QuicAckFrame& ack); | 498 size_t GetAckFrameTimeStampSize(const QuicAckFrame& ack); |
498 | 499 |
499 // Computes the wire size in bytes of the |ack| frame, assuming no truncation. | 500 // Computes the wire size in bytes of the |ack| frame, assuming no truncation. |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 QuicFramerVisitorInterface* visitor_; | 563 QuicFramerVisitorInterface* visitor_; |
563 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; | 564 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; |
564 QuicErrorCode error_; | 565 QuicErrorCode error_; |
565 // Set of closed paths. A path is considered as closed if a PATH_CLOSED frame | 566 // Set of closed paths. A path is considered as closed if a PATH_CLOSED frame |
566 // has been sent/received. | 567 // has been sent/received. |
567 // TODO(fayang): this set is never cleaned up. A possible improvement is to | 568 // TODO(fayang): this set is never cleaned up. A possible improvement is to |
568 // use intervals. | 569 // use intervals. |
569 std::unordered_set<QuicPathId> closed_paths_; | 570 std::unordered_set<QuicPathId> closed_paths_; |
570 // Map mapping path id to packet number of last successfully decrypted | 571 // Map mapping path id to packet number of last successfully decrypted |
571 // received packet. | 572 // received packet. |
| 573 // TODO(ianswett): Remove when |
| 574 // gfe2_reloadable_flag_quic_packet_numbers_largest_received is deprecated. |
572 std::unordered_map<QuicPathId, QuicPacketNumber> last_packet_numbers_; | 575 std::unordered_map<QuicPathId, QuicPacketNumber> last_packet_numbers_; |
573 // Updated by ProcessPacketHeader when it succeeds. | 576 // Updated by ProcessPacketHeader when it succeeds. |
574 QuicPacketNumber last_packet_number_; | 577 QuicPacketNumber last_packet_number_; |
| 578 // Map mapping path id to packet number of largest successfully decrypted |
| 579 // received packet. |
| 580 std::unordered_map<QuicPathId, QuicPacketNumber> largest_packet_numbers_; |
| 581 // Updated by ProcessPacketHeader when it succeeds decrypting a larger packet. |
| 582 QuicPacketNumber largest_packet_number_; |
575 // The path on which last successfully decrypted packet was received. | 583 // The path on which last successfully decrypted packet was received. |
576 QuicPathId last_path_id_; | 584 QuicPathId last_path_id_; |
577 // Updated by WritePacketHeader. | 585 // Updated by WritePacketHeader. |
578 QuicConnectionId last_serialized_connection_id_; | 586 QuicConnectionId last_serialized_connection_id_; |
579 // The last QUIC version tag received. | 587 // The last QUIC version tag received. |
580 QuicTag last_version_tag_; | 588 QuicTag last_version_tag_; |
581 // Version of the protocol being used. | 589 // Version of the protocol being used. |
582 QuicVersion quic_version_; | 590 QuicVersion quic_version_; |
583 // This vector contains QUIC versions which we currently support. | 591 // This vector contains QUIC versions which we currently support. |
584 // This should be ordered such that the highest supported version is the first | 592 // This should be ordered such that the highest supported version is the first |
(...skipping 27 matching lines...) Expand all Loading... |
612 QuicTime::Delta last_timestamp_; | 620 QuicTime::Delta last_timestamp_; |
613 // The diversification nonce from the last received packet. | 621 // The diversification nonce from the last received packet. |
614 DiversificationNonce last_nonce_; | 622 DiversificationNonce last_nonce_; |
615 | 623 |
616 DISALLOW_COPY_AND_ASSIGN(QuicFramer); | 624 DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
617 }; | 625 }; |
618 | 626 |
619 } // namespace net | 627 } // namespace net |
620 | 628 |
621 #endif // NET_QUIC_QUIC_FRAMER_H_ | 629 #endif // NET_QUIC_QUIC_FRAMER_H_ |
OLD | NEW |