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 27 matching lines...) Expand all Loading... |
38 // Maximum number of bytes reserved for byte offset in stream frame. | 38 // Maximum number of bytes reserved for byte offset in stream frame. |
39 const size_t kQuicMaxStreamOffsetSize = 8; | 39 const size_t kQuicMaxStreamOffsetSize = 8; |
40 // Number of bytes reserved to store payload length in stream frame. | 40 // Number of bytes reserved to store payload length in stream frame. |
41 const size_t kQuicStreamPayloadLengthSize = 2; | 41 const size_t kQuicStreamPayloadLengthSize = 2; |
42 | 42 |
43 // Size in bytes of the entropy hash sent in ack frames. | 43 // Size in bytes of the entropy hash sent in ack frames. |
44 const size_t kQuicEntropyHashSize = 1; | 44 const size_t kQuicEntropyHashSize = 1; |
45 // Size in bytes reserved for the delta time of the largest observed | 45 // Size in bytes reserved for the delta time of the largest observed |
46 // sequence number in ack frames. | 46 // sequence number in ack frames. |
47 const size_t kQuicDeltaTimeLargestObservedSize = 2; | 47 const size_t kQuicDeltaTimeLargestObservedSize = 2; |
| 48 // Size in bytes reserved for the number of received packets with timestamps. |
| 49 const size_t kQuicNumTimestampsSize = 1; |
48 // Size in bytes reserved for the number of missing packets in ack frames. | 50 // Size in bytes reserved for the number of missing packets in ack frames. |
49 const size_t kNumberOfNackRangesSize = 1; | 51 const size_t kNumberOfNackRangesSize = 1; |
50 // Maximum number of missing packet ranges that can fit within an ack frame. | 52 // Maximum number of missing packet ranges that can fit within an ack frame. |
51 const size_t kMaxNackRanges = | 53 const size_t kMaxNackRanges = |
52 (1 << (kNumberOfNackRangesSize * 8)) - 1; | 54 (1 << (kNumberOfNackRangesSize * 8)) - 1; |
53 // Size in bytes reserved for the number of revived packets in ack frames. | 55 // Size in bytes reserved for the number of revived packets in ack frames. |
54 const size_t kNumberOfRevivedPacketsSize = 1; | 56 const size_t kNumberOfRevivedPacketsSize = 1; |
55 // Maximum number of revived packets that can fit within an ack frame. | 57 // Maximum number of revived packets that can fit within an ack frame. |
56 const size_t kMaxRevivedPackets = | 58 const size_t kMaxRevivedPackets = |
57 (1 << (kNumberOfRevivedPacketsSize * 8)) - 1; | 59 (1 << (kNumberOfRevivedPacketsSize * 8)) - 1; |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 | 404 |
403 bool ProcessPacketHeader(QuicPacketHeader* header, | 405 bool ProcessPacketHeader(QuicPacketHeader* header, |
404 const QuicEncryptedPacket& packet); | 406 const QuicEncryptedPacket& packet); |
405 | 407 |
406 bool ProcessPacketSequenceNumber( | 408 bool ProcessPacketSequenceNumber( |
407 QuicSequenceNumberLength sequence_number_length, | 409 QuicSequenceNumberLength sequence_number_length, |
408 QuicPacketSequenceNumber* sequence_number); | 410 QuicPacketSequenceNumber* sequence_number); |
409 bool ProcessFrameData(const QuicPacketHeader& header); | 411 bool ProcessFrameData(const QuicPacketHeader& header); |
410 bool ProcessStreamFrame(uint8 frame_type, QuicStreamFrame* frame); | 412 bool ProcessStreamFrame(uint8 frame_type, QuicStreamFrame* frame); |
411 bool ProcessAckFrame(uint8 frame_type, QuicAckFrame* frame); | 413 bool ProcessAckFrame(uint8 frame_type, QuicAckFrame* frame); |
| 414 bool ProcessTimestampsInAckFrame(QuicAckFrame* frame); |
412 bool ProcessStopWaitingFrame(const QuicPacketHeader& public_header, | 415 bool ProcessStopWaitingFrame(const QuicPacketHeader& public_header, |
413 QuicStopWaitingFrame* stop_waiting); | 416 QuicStopWaitingFrame* stop_waiting); |
414 bool ProcessQuicCongestionFeedbackFrame( | 417 bool ProcessCongestionFeedbackFrame( |
415 QuicCongestionFeedbackFrame* congestion_feedback); | 418 QuicCongestionFeedbackFrame* congestion_feedback); |
416 bool ProcessRstStreamFrame(QuicRstStreamFrame* frame); | 419 bool ProcessRstStreamFrame(QuicRstStreamFrame* frame); |
417 bool ProcessConnectionCloseFrame(QuicConnectionCloseFrame* frame); | 420 bool ProcessConnectionCloseFrame(QuicConnectionCloseFrame* frame); |
418 bool ProcessGoAwayFrame(QuicGoAwayFrame* frame); | 421 bool ProcessGoAwayFrame(QuicGoAwayFrame* frame); |
419 bool ProcessWindowUpdateFrame(QuicWindowUpdateFrame* frame); | 422 bool ProcessWindowUpdateFrame(QuicWindowUpdateFrame* frame); |
420 bool ProcessBlockedFrame(QuicBlockedFrame* frame); | 423 bool ProcessBlockedFrame(QuicBlockedFrame* frame); |
421 | 424 |
422 bool DecryptPayload(const QuicPacketHeader& header, | 425 bool DecryptPayload(const QuicPacketHeader& header, |
423 const QuicEncryptedPacket& packet); | 426 const QuicEncryptedPacket& packet); |
424 | 427 |
425 // Returns the full packet sequence number from the truncated | 428 // Returns the full packet sequence number from the truncated |
426 // wire format version and the last seen packet sequence number. | 429 // wire format version and the last seen packet sequence number. |
427 QuicPacketSequenceNumber CalculatePacketSequenceNumberFromWire( | 430 QuicPacketSequenceNumber CalculatePacketSequenceNumberFromWire( |
428 QuicSequenceNumberLength sequence_number_length, | 431 QuicSequenceNumberLength sequence_number_length, |
429 QuicPacketSequenceNumber packet_sequence_number) const; | 432 QuicPacketSequenceNumber packet_sequence_number) const; |
430 | 433 |
| 434 // Returns the QuicTime::Delta corresponding to the time from when the framer |
| 435 // was created. |
| 436 const QuicTime::Delta CalculateTimestampFromWire(uint32 time_delta_us); |
| 437 |
431 // Computes the wire size in bytes of the |ack| frame, assuming no truncation. | 438 // Computes the wire size in bytes of the |ack| frame, assuming no truncation. |
432 size_t GetAckFrameSize(const QuicAckFrame& ack, | 439 size_t GetAckFrameSize(const QuicAckFrame& ack, |
433 QuicSequenceNumberLength sequence_number_length); | 440 QuicSequenceNumberLength sequence_number_length); |
434 | 441 |
435 // Computes the wire size in bytes of the payload of |frame|. | 442 // Computes the wire size in bytes of the payload of |frame|. |
436 size_t ComputeFrameLength(const QuicFrame& frame, | 443 size_t ComputeFrameLength(const QuicFrame& frame, |
437 bool last_frame_in_packet, | 444 bool last_frame_in_packet, |
438 InFecGroup is_in_fec_group, | 445 InFecGroup is_in_fec_group, |
439 QuicSequenceNumberLength sequence_number_length); | 446 QuicSequenceNumberLength sequence_number_length); |
440 | 447 |
(...skipping 15 matching lines...) Expand all Loading... |
456 bool last_frame_in_packet, | 463 bool last_frame_in_packet, |
457 QuicDataWriter* writer); | 464 QuicDataWriter* writer); |
458 bool AppendStreamFrame(const QuicStreamFrame& frame, | 465 bool AppendStreamFrame(const QuicStreamFrame& frame, |
459 bool last_frame_in_packet, | 466 bool last_frame_in_packet, |
460 QuicDataWriter* builder); | 467 QuicDataWriter* builder); |
461 bool AppendAckFrameAndTypeByte(const QuicPacketHeader& header, | 468 bool AppendAckFrameAndTypeByte(const QuicPacketHeader& header, |
462 const QuicAckFrame& frame, | 469 const QuicAckFrame& frame, |
463 QuicDataWriter* builder); | 470 QuicDataWriter* builder); |
464 bool AppendCongestionFeedbackFrame(const QuicCongestionFeedbackFrame& frame, | 471 bool AppendCongestionFeedbackFrame(const QuicCongestionFeedbackFrame& frame, |
465 QuicDataWriter* builder); | 472 QuicDataWriter* builder); |
| 473 bool AppendTimestampToAckFrame(const QuicAckFrame& frame, |
| 474 QuicDataWriter* builder); |
466 bool AppendStopWaitingFrame(const QuicPacketHeader& header, | 475 bool AppendStopWaitingFrame(const QuicPacketHeader& header, |
467 const QuicStopWaitingFrame& frame, | 476 const QuicStopWaitingFrame& frame, |
468 QuicDataWriter* builder); | 477 QuicDataWriter* builder); |
469 bool AppendRstStreamFrame(const QuicRstStreamFrame& frame, | 478 bool AppendRstStreamFrame(const QuicRstStreamFrame& frame, |
470 QuicDataWriter* builder); | 479 QuicDataWriter* builder); |
471 bool AppendConnectionCloseFrame(const QuicConnectionCloseFrame& frame, | 480 bool AppendConnectionCloseFrame(const QuicConnectionCloseFrame& frame, |
472 QuicDataWriter* builder); | 481 QuicDataWriter* builder); |
473 bool AppendGoAwayFrame(const QuicGoAwayFrame& frame, QuicDataWriter* writer); | 482 bool AppendGoAwayFrame(const QuicGoAwayFrame& frame, QuicDataWriter* writer); |
474 bool AppendWindowUpdateFrame(const QuicWindowUpdateFrame& frame, | 483 bool AppendWindowUpdateFrame(const QuicWindowUpdateFrame& frame, |
475 QuicDataWriter* writer); | 484 QuicDataWriter* writer); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 // Encrypters used to encrypt packets via EncryptPacket(). | 529 // Encrypters used to encrypt packets via EncryptPacket(). |
521 scoped_ptr<QuicEncrypter> encrypter_[NUM_ENCRYPTION_LEVELS]; | 530 scoped_ptr<QuicEncrypter> encrypter_[NUM_ENCRYPTION_LEVELS]; |
522 // Tracks if the framer is being used by the entity that received the | 531 // Tracks if the framer is being used by the entity that received the |
523 // connection or the entity that initiated it. | 532 // connection or the entity that initiated it. |
524 bool is_server_; | 533 bool is_server_; |
525 // If false, skip validation that the public flags are set to legal values. | 534 // If false, skip validation that the public flags are set to legal values. |
526 bool validate_flags_; | 535 bool validate_flags_; |
527 // The time this framer was created. Time written to the wire will be | 536 // The time this framer was created. Time written to the wire will be |
528 // written as a delta from this value. | 537 // written as a delta from this value. |
529 QuicTime creation_time_; | 538 QuicTime creation_time_; |
| 539 // The time delta computed for the last timestamp frame. This is relative to |
| 540 // the creation_time. |
| 541 QuicTime::Delta last_timestamp_; |
530 | 542 |
531 DISALLOW_COPY_AND_ASSIGN(QuicFramer); | 543 DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
532 }; | 544 }; |
533 | 545 |
534 } // namespace net | 546 } // namespace net |
535 | 547 |
536 #endif // NET_QUIC_QUIC_FRAMER_H_ | 548 #endif // NET_QUIC_QUIC_FRAMER_H_ |
OLD | NEW |