| 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 28 matching lines...) Expand all Loading... |
| 39 // Number of bytes reserved to denote the length of error details field. | 39 // Number of bytes reserved to denote the length of error details field. |
| 40 const size_t kQuicErrorDetailsLengthSize = 2; | 40 const size_t kQuicErrorDetailsLengthSize = 2; |
| 41 | 41 |
| 42 // Maximum number of bytes reserved for stream id. | 42 // Maximum number of bytes reserved for stream id. |
| 43 const size_t kQuicMaxStreamIdSize = 4; | 43 const size_t kQuicMaxStreamIdSize = 4; |
| 44 // Maximum number of bytes reserved for byte offset in stream frame. | 44 // Maximum number of bytes reserved for byte offset in stream frame. |
| 45 const size_t kQuicMaxStreamOffsetSize = 8; | 45 const size_t kQuicMaxStreamOffsetSize = 8; |
| 46 // Number of bytes reserved to store payload length in stream frame. | 46 // Number of bytes reserved to store payload length in stream frame. |
| 47 const size_t kQuicStreamPayloadLengthSize = 2; | 47 const size_t kQuicStreamPayloadLengthSize = 2; |
| 48 | 48 |
| 49 // Size in bytes of the entropy hash sent in ack frames. | |
| 50 const size_t kQuicEntropyHashSize = 1; | |
| 51 // Size in bytes reserved for the delta time of the largest observed | 49 // Size in bytes reserved for the delta time of the largest observed |
| 52 // packet number in ack frames. | 50 // packet number in ack frames. |
| 53 const size_t kQuicDeltaTimeLargestObservedSize = 2; | 51 const size_t kQuicDeltaTimeLargestObservedSize = 2; |
| 54 // Size in bytes reserved for the number of received packets with timestamps. | 52 // Size in bytes reserved for the number of received packets with timestamps. |
| 55 const size_t kQuicNumTimestampsSize = 1; | 53 const size_t kQuicNumTimestampsSize = 1; |
| 56 // Size in bytes reserved for the number of missing packets in ack frames. | 54 // Size in bytes reserved for the number of missing packets in ack frames. |
| 57 const size_t kNumberOfNackRangesSize = 1; | 55 const size_t kNumberOfNackRangesSize = 1; |
| 58 // Size in bytes reserved for the number of ack blocks in ack frames. | 56 // Size in bytes reserved for the number of ack blocks in ack frames. |
| 59 const size_t kNumberOfAckBlocksSize = 1; | 57 const size_t kNumberOfAckBlocksSize = 1; |
| 60 // Maximum number of missing packet ranges that can fit within an ack frame. | 58 // Maximum number of missing packet ranges that can fit within an ack frame. |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 // Called when a BlockedFrame has been parsed. | 139 // Called when a BlockedFrame has been parsed. |
| 142 virtual bool OnBlockedFrame(const QuicBlockedFrame& frame) = 0; | 140 virtual bool OnBlockedFrame(const QuicBlockedFrame& frame) = 0; |
| 143 | 141 |
| 144 // Called when a PathCloseFrame has been parsed. | 142 // Called when a PathCloseFrame has been parsed. |
| 145 virtual bool OnPathCloseFrame(const QuicPathCloseFrame& frame) = 0; | 143 virtual bool OnPathCloseFrame(const QuicPathCloseFrame& frame) = 0; |
| 146 | 144 |
| 147 // Called when a packet has been completely processed. | 145 // Called when a packet has been completely processed. |
| 148 virtual void OnPacketComplete() = 0; | 146 virtual void OnPacketComplete() = 0; |
| 149 }; | 147 }; |
| 150 | 148 |
| 151 // This class calculates the received entropy of the ack packet being | |
| 152 // framed, should it get truncated. | |
| 153 class NET_EXPORT_PRIVATE QuicReceivedEntropyHashCalculatorInterface { | |
| 154 public: | |
| 155 virtual ~QuicReceivedEntropyHashCalculatorInterface() {} | |
| 156 | |
| 157 // When an ack frame gets truncated while being framed the received | |
| 158 // entropy of the ack frame needs to be calculated since the some of the | |
| 159 // missing packets are not added and the largest observed might be lowered. | |
| 160 // This should return the received entropy hash of the packets received up to | |
| 161 // and including |packet_number|. | |
| 162 virtual QuicPacketEntropyHash EntropyHash( | |
| 163 QuicPacketNumber packet_number) const = 0; | |
| 164 }; | |
| 165 | |
| 166 // Class for parsing and constructing QUIC packets. It has a | 149 // Class for parsing and constructing QUIC packets. It has a |
| 167 // QuicFramerVisitorInterface that is called when packets are parsed. | 150 // QuicFramerVisitorInterface that is called when packets are parsed. |
| 168 class NET_EXPORT_PRIVATE QuicFramer { | 151 class NET_EXPORT_PRIVATE QuicFramer { |
| 169 public: | 152 public: |
| 170 // Constructs a new framer that installs a kNULL QuicEncrypter and | 153 // Constructs a new framer that installs a kNULL QuicEncrypter and |
| 171 // QuicDecrypter for level ENCRYPTION_NONE. |supported_versions| specifies the | 154 // QuicDecrypter for level ENCRYPTION_NONE. |supported_versions| specifies the |
| 172 // list of supported QUIC versions. |quic_version_| is set to the maximum | 155 // list of supported QUIC versions. |quic_version_| is set to the maximum |
| 173 // version in |supported_versions|. | 156 // version in |supported_versions|. |
| 174 QuicFramer(const QuicVersionVector& supported_versions, | 157 QuicFramer(const QuicVersionVector& supported_versions, |
| 175 QuicTime creation_time, | 158 QuicTime creation_time, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 193 QuicVersion version() const { return quic_version_; } | 176 QuicVersion version() const { return quic_version_; } |
| 194 | 177 |
| 195 void set_version(const QuicVersion version); | 178 void set_version(const QuicVersion version); |
| 196 | 179 |
| 197 // Does not DCHECK for supported version. Used by tests to set unsupported | 180 // Does not DCHECK for supported version. Used by tests to set unsupported |
| 198 // version to trigger version negotiation. | 181 // version to trigger version negotiation. |
| 199 void set_version_for_tests(const QuicVersion version) { | 182 void set_version_for_tests(const QuicVersion version) { |
| 200 quic_version_ = version; | 183 quic_version_ = version; |
| 201 } | 184 } |
| 202 | 185 |
| 203 // Set entropy calculator to be called from the framer when it needs the | |
| 204 // entropy of a truncated ack frame. An entropy calculator must be set or else | |
| 205 // the framer will likely crash. If this is called multiple times, only the | |
| 206 // last calculator will be used. | |
| 207 void set_received_entropy_calculator( | |
| 208 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator) { | |
| 209 entropy_calculator_ = entropy_calculator; | |
| 210 } | |
| 211 | |
| 212 QuicErrorCode error() const { return error_; } | 186 QuicErrorCode error() const { return error_; } |
| 213 | 187 |
| 214 // Pass a UDP packet into the framer for parsing. | 188 // Pass a UDP packet into the framer for parsing. |
| 215 // Return true if the packet was processed succesfully. |packet| must be a | 189 // Return true if the packet was processed succesfully. |packet| must be a |
| 216 // single, complete UDP packet (not a frame of a packet). This packet | 190 // single, complete UDP packet (not a frame of a packet). This packet |
| 217 // might be null padded past the end of the payload, which will be correctly | 191 // might be null padded past the end of the payload, which will be correctly |
| 218 // ignored. | 192 // ignored. |
| 219 bool ProcessPacket(const QuicEncryptedPacket& packet); | 193 bool ProcessPacket(const QuicEncryptedPacket& packet); |
| 220 | 194 |
| 221 // Largest size in bytes of all stream frame fields without the payload. | 195 // Largest size in bytes of all stream frame fields without the payload. |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 | 330 |
| 357 void SetSupportedVersions(const QuicVersionVector& versions) { | 331 void SetSupportedVersions(const QuicVersionVector& versions) { |
| 358 supported_versions_ = versions; | 332 supported_versions_ = versions; |
| 359 quic_version_ = versions[0]; | 333 quic_version_ = versions[0]; |
| 360 } | 334 } |
| 361 | 335 |
| 362 void set_validate_flags(bool value) { validate_flags_ = value; } | 336 void set_validate_flags(bool value) { validate_flags_ = value; } |
| 363 | 337 |
| 364 Perspective perspective() const { return perspective_; } | 338 Perspective perspective() const { return perspective_; } |
| 365 | 339 |
| 366 static QuicPacketEntropyHash GetPacketEntropyHash( | |
| 367 const QuicPacketHeader& header); | |
| 368 | |
| 369 // Called when a PATH_CLOSED frame has been sent/received on |path_id|. | 340 // Called when a PATH_CLOSED frame has been sent/received on |path_id|. |
| 370 void OnPathClosed(QuicPathId path_id); | 341 void OnPathClosed(QuicPathId path_id); |
| 371 | 342 |
| 372 QuicTag last_version_tag() { return last_version_tag_; } | 343 QuicTag last_version_tag() { return last_version_tag_; } |
| 373 | 344 |
| 374 private: | 345 private: |
| 375 friend class test::QuicFramerPeer; | 346 friend class test::QuicFramerPeer; |
| 376 | 347 |
| 377 typedef std::map<QuicPacketNumber, uint8_t> NackRangeMap; | 348 typedef std::map<QuicPacketNumber, uint8_t> NackRangeMap; |
| 378 | 349 |
| 379 struct AckFrameInfo { | 350 // TODO(rch): Rename this to remove "New" from the name here, and elsewhere. |
| 380 AckFrameInfo(); | |
| 381 AckFrameInfo(const AckFrameInfo& other); | |
| 382 ~AckFrameInfo(); | |
| 383 | |
| 384 // The maximum delta between ranges. | |
| 385 QuicPacketNumber max_delta; | |
| 386 // Nack ranges starting with start packet numbers and lengths. | |
| 387 NackRangeMap nack_ranges; | |
| 388 }; | |
| 389 | |
| 390 struct AckBlock { | |
| 391 AckBlock(uint8_t gap, QuicPacketNumber length); | |
| 392 AckBlock(const AckBlock& other); | |
| 393 ~AckBlock(); | |
| 394 | |
| 395 // Gap to the next ack block. | |
| 396 uint8_t gap; | |
| 397 // Length of this ack block. | |
| 398 QuicPacketNumber length; | |
| 399 }; | |
| 400 | |
| 401 struct NewAckFrameInfo { | 351 struct NewAckFrameInfo { |
| 402 NewAckFrameInfo(); | 352 NewAckFrameInfo(); |
| 403 NewAckFrameInfo(const NewAckFrameInfo& other); | 353 NewAckFrameInfo(const NewAckFrameInfo& other); |
| 404 ~NewAckFrameInfo(); | 354 ~NewAckFrameInfo(); |
| 405 | 355 |
| 406 // The maximum ack block length. | 356 // The maximum ack block length. |
| 407 QuicPacketNumber max_block_length; | 357 QuicPacketNumber max_block_length; |
| 408 // Length of first ack block. | 358 // Length of first ack block. |
| 409 QuicPacketNumber first_block_length; | 359 QuicPacketNumber first_block_length; |
| 410 // Number of ACK blocks needed for the ACK frame. | 360 // Number of ACK blocks needed for the ACK frame. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 424 QuicPacketPublicHeader* public_header); | 374 QuicPacketPublicHeader* public_header); |
| 425 | 375 |
| 426 bool ProcessPublicHeader(QuicDataReader* reader, | 376 bool ProcessPublicHeader(QuicDataReader* reader, |
| 427 QuicPacketPublicHeader* header); | 377 QuicPacketPublicHeader* header); |
| 428 | 378 |
| 429 // Processes the unauthenticated portion of the header into |header| from | 379 // Processes the unauthenticated portion of the header into |header| from |
| 430 // the current QuicDataReader. Returns true on success, false on failure. | 380 // the current QuicDataReader. Returns true on success, false on failure. |
| 431 bool ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, | 381 bool ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, |
| 432 QuicPacketHeader* header); | 382 QuicPacketHeader* header); |
| 433 | 383 |
| 434 // Processes the authenticated portion of the header into |header| from | |
| 435 // the current QuicDataReader. Returns true on success, false on failure. | |
| 436 bool ProcessAuthenticatedHeader(QuicDataReader* reader, | |
| 437 QuicPacketHeader* header); | |
| 438 | |
| 439 bool ProcessPathId(QuicDataReader* reader, QuicPathId* path_id); | 384 bool ProcessPathId(QuicDataReader* reader, QuicPathId* path_id); |
| 440 bool ProcessPacketSequenceNumber(QuicDataReader* reader, | 385 bool ProcessPacketSequenceNumber(QuicDataReader* reader, |
| 441 QuicPacketNumberLength packet_number_length, | 386 QuicPacketNumberLength packet_number_length, |
| 442 QuicPacketNumber base_packet_number, | 387 QuicPacketNumber base_packet_number, |
| 443 QuicPacketNumber* packet_number); | 388 QuicPacketNumber* packet_number); |
| 444 bool ProcessFrameData(QuicDataReader* reader, const QuicPacketHeader& header); | 389 bool ProcessFrameData(QuicDataReader* reader, const QuicPacketHeader& header); |
| 445 bool ProcessStreamFrame(QuicDataReader* reader, | 390 bool ProcessStreamFrame(QuicDataReader* reader, |
| 446 uint8_t frame_type, | 391 uint8_t frame_type, |
| 447 QuicStreamFrame* frame); | 392 QuicStreamFrame* frame); |
| 448 bool ProcessAckFrame(QuicDataReader* reader, | |
| 449 uint8_t frame_type, | |
| 450 QuicAckFrame* frame); | |
| 451 bool ProcessNewAckFrame(QuicDataReader* reader, | 393 bool ProcessNewAckFrame(QuicDataReader* reader, |
| 452 uint8_t frame_type, | 394 uint8_t frame_type, |
| 453 QuicAckFrame* frame); | 395 QuicAckFrame* frame); |
| 454 bool ProcessTimestampsInAckFrame(QuicDataReader* reader, QuicAckFrame* frame); | 396 bool ProcessTimestampsInAckFrame(QuicDataReader* reader, QuicAckFrame* frame); |
| 455 bool ProcessStopWaitingFrame(QuicDataReader* reader, | 397 bool ProcessStopWaitingFrame(QuicDataReader* reader, |
| 456 const QuicPacketHeader& public_header, | 398 const QuicPacketHeader& public_header, |
| 457 QuicStopWaitingFrame* stop_waiting); | 399 QuicStopWaitingFrame* stop_waiting); |
| 458 bool ProcessRstStreamFrame(QuicDataReader* reader, QuicRstStreamFrame* frame); | 400 bool ProcessRstStreamFrame(QuicDataReader* reader, QuicRstStreamFrame* frame); |
| 459 bool ProcessConnectionCloseFrame(QuicDataReader* reader, | 401 bool ProcessConnectionCloseFrame(QuicDataReader* reader, |
| 460 QuicConnectionCloseFrame* frame); | 402 QuicConnectionCloseFrame* frame); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 488 QuicPacketNumber base_packet_number, | 430 QuicPacketNumber base_packet_number, |
| 489 QuicPacketNumber packet_number) const; | 431 QuicPacketNumber packet_number) const; |
| 490 | 432 |
| 491 // Returns the QuicTime::Delta corresponding to the time from when the framer | 433 // Returns the QuicTime::Delta corresponding to the time from when the framer |
| 492 // was created. | 434 // was created. |
| 493 const QuicTime::Delta CalculateTimestampFromWire(uint32_t time_delta_us); | 435 const QuicTime::Delta CalculateTimestampFromWire(uint32_t time_delta_us); |
| 494 | 436 |
| 495 // Computes the wire size in bytes of time stamps in |ack|. | 437 // Computes the wire size in bytes of time stamps in |ack|. |
| 496 size_t GetAckFrameTimeStampSize(const QuicAckFrame& ack); | 438 size_t GetAckFrameTimeStampSize(const QuicAckFrame& ack); |
| 497 | 439 |
| 498 // Computes the wire size in bytes of the |ack| frame, assuming no truncation. | 440 // Computes the wire size in bytes of the |ack| frame. |
| 499 size_t GetAckFrameSize(const QuicAckFrame& ack, | 441 size_t GetAckFrameSize(const QuicAckFrame& ack, |
| 500 QuicPacketNumberLength packet_number_length); | 442 QuicPacketNumberLength packet_number_length); |
| 501 | 443 |
| 502 // Computes the wire size in bytes of the |ack| frame. | 444 // Computes the wire size in bytes of the |ack| frame. |
| 503 size_t GetNewAckFrameSize(const QuicAckFrame& ack); | 445 size_t GetNewAckFrameSize(const QuicAckFrame& ack); |
| 504 | 446 |
| 505 // Computes the wire size in bytes of the payload of |frame|. | 447 // Computes the wire size in bytes of the payload of |frame|. |
| 506 size_t ComputeFrameLength(const QuicFrame& frame, | 448 size_t ComputeFrameLength(const QuicFrame& frame, |
| 507 bool last_frame_in_packet, | 449 bool last_frame_in_packet, |
| 508 QuicPacketNumberLength packet_number_length); | 450 QuicPacketNumberLength packet_number_length); |
| 509 | 451 |
| 510 static bool AppendPacketSequenceNumber( | 452 static bool AppendPacketSequenceNumber( |
| 511 QuicPacketNumberLength packet_number_length, | 453 QuicPacketNumberLength packet_number_length, |
| 512 QuicPacketNumber packet_number, | 454 QuicPacketNumber packet_number, |
| 513 QuicDataWriter* writer); | 455 QuicDataWriter* writer); |
| 514 | 456 |
| 515 // Appends a single ACK block to |writer| and returns true if the block was | 457 // Appends a single ACK block to |writer| and returns true if the block was |
| 516 // successfully appended. | 458 // successfully appended. |
| 517 static bool AppendAckBlock(uint8_t gap, | 459 static bool AppendAckBlock(uint8_t gap, |
| 518 QuicPacketNumberLength length_length, | 460 QuicPacketNumberLength length_length, |
| 519 QuicPacketNumber length, | 461 QuicPacketNumber length, |
| 520 QuicDataWriter* writer); | 462 QuicDataWriter* writer); |
| 521 | 463 |
| 522 static uint8_t GetSequenceNumberFlags( | 464 static uint8_t GetSequenceNumberFlags( |
| 523 QuicPacketNumberLength packet_number_length); | 465 QuicPacketNumberLength packet_number_length); |
| 524 | 466 |
| 525 static AckFrameInfo GetAckFrameInfo(const QuicAckFrame& frame); | |
| 526 | |
| 527 static NewAckFrameInfo GetNewAckFrameInfo(const QuicAckFrame& frame); | 467 static NewAckFrameInfo GetNewAckFrameInfo(const QuicAckFrame& frame); |
| 528 | 468 |
| 529 // The Append* methods attempt to write the provided header or frame using the | 469 // The Append* methods attempt to write the provided header or frame using the |
| 530 // |writer|, and return true if successful. | 470 // |writer|, and return true if successful. |
| 531 | 471 |
| 532 bool AppendAckFrameAndTypeByte(const QuicPacketHeader& header, | |
| 533 const QuicAckFrame& frame, | |
| 534 QuicDataWriter* builder); | |
| 535 bool AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame, | 472 bool AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame, |
| 536 QuicDataWriter* builder); | 473 QuicDataWriter* builder); |
| 537 bool AppendTimestampToAckFrame(const QuicAckFrame& frame, | 474 bool AppendTimestampToAckFrame(const QuicAckFrame& frame, |
| 538 QuicDataWriter* builder); | 475 QuicDataWriter* builder); |
| 539 bool AppendStopWaitingFrame(const QuicPacketHeader& header, | 476 bool AppendStopWaitingFrame(const QuicPacketHeader& header, |
| 540 const QuicStopWaitingFrame& frame, | 477 const QuicStopWaitingFrame& frame, |
| 541 QuicDataWriter* builder); | 478 QuicDataWriter* builder); |
| 542 bool AppendRstStreamFrame(const QuicRstStreamFrame& frame, | 479 bool AppendRstStreamFrame(const QuicRstStreamFrame& frame, |
| 543 QuicDataWriter* builder); | 480 QuicDataWriter* builder); |
| 544 bool AppendConnectionCloseFrame(const QuicConnectionCloseFrame& frame, | 481 bool AppendConnectionCloseFrame(const QuicConnectionCloseFrame& frame, |
| 545 QuicDataWriter* builder); | 482 QuicDataWriter* builder); |
| 546 bool AppendGoAwayFrame(const QuicGoAwayFrame& frame, QuicDataWriter* writer); | 483 bool AppendGoAwayFrame(const QuicGoAwayFrame& frame, QuicDataWriter* writer); |
| 547 bool AppendWindowUpdateFrame(const QuicWindowUpdateFrame& frame, | 484 bool AppendWindowUpdateFrame(const QuicWindowUpdateFrame& frame, |
| 548 QuicDataWriter* writer); | 485 QuicDataWriter* writer); |
| 549 bool AppendBlockedFrame(const QuicBlockedFrame& frame, | 486 bool AppendBlockedFrame(const QuicBlockedFrame& frame, |
| 550 QuicDataWriter* writer); | 487 QuicDataWriter* writer); |
| 551 bool AppendPathCloseFrame(const QuicPathCloseFrame& frame, | 488 bool AppendPathCloseFrame(const QuicPathCloseFrame& frame, |
| 552 QuicDataWriter* writer); | 489 QuicDataWriter* writer); |
| 553 | 490 |
| 554 bool RaiseError(QuicErrorCode error); | 491 bool RaiseError(QuicErrorCode error); |
| 555 | 492 |
| 556 void set_error(QuicErrorCode error) { error_ = error; } | 493 void set_error(QuicErrorCode error) { error_ = error; } |
| 557 | 494 |
| 558 void set_detailed_error(const char* error) { detailed_error_ = error; } | 495 void set_detailed_error(const char* error) { detailed_error_ = error; } |
| 559 | 496 |
| 560 std::string detailed_error_; | 497 std::string detailed_error_; |
| 561 QuicFramerVisitorInterface* visitor_; | 498 QuicFramerVisitorInterface* visitor_; |
| 562 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; | |
| 563 QuicErrorCode error_; | 499 QuicErrorCode error_; |
| 564 // Set of closed paths. A path is considered as closed if a PATH_CLOSED frame | 500 // Set of closed paths. A path is considered as closed if a PATH_CLOSED frame |
| 565 // has been sent/received. | 501 // has been sent/received. |
| 566 // TODO(fayang): this set is never cleaned up. A possible improvement is to | 502 // TODO(fayang): this set is never cleaned up. A possible improvement is to |
| 567 // use intervals. | 503 // use intervals. |
| 568 std::unordered_set<QuicPathId> closed_paths_; | 504 std::unordered_set<QuicPathId> closed_paths_; |
| 569 // Updated by ProcessPacketHeader when it succeeds. | 505 // Updated by ProcessPacketHeader when it succeeds. |
| 570 QuicPacketNumber last_packet_number_; | 506 QuicPacketNumber last_packet_number_; |
| 571 // Map mapping path id to packet number of largest successfully decrypted | 507 // Map mapping path id to packet number of largest successfully decrypted |
| 572 // received packet. | 508 // received packet. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 QuicTime::Delta last_timestamp_; | 549 QuicTime::Delta last_timestamp_; |
| 614 // The diversification nonce from the last received packet. | 550 // The diversification nonce from the last received packet. |
| 615 DiversificationNonce last_nonce_; | 551 DiversificationNonce last_nonce_; |
| 616 | 552 |
| 617 DISALLOW_COPY_AND_ASSIGN(QuicFramer); | 553 DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
| 618 }; | 554 }; |
| 619 | 555 |
| 620 } // namespace net | 556 } // namespace net |
| 621 | 557 |
| 622 #endif // NET_QUIC_QUIC_FRAMER_H_ | 558 #endif // NET_QUIC_QUIC_FRAMER_H_ |
| OLD | NEW |