| Index: net/quic/quic_packet_creator.h
|
| diff --git a/net/quic/quic_packet_creator.h b/net/quic/quic_packet_creator.h
|
| index 36ab5df8d8125026e2b37480ade5aa6a84e94218..0e198879f936be4d4d618d10615277b158b4ae97 100644
|
| --- a/net/quic/quic_packet_creator.h
|
| +++ b/net/quic/quic_packet_creator.h
|
| @@ -29,22 +29,6 @@ class QuicRandomBoolSource;
|
|
|
| class NET_EXPORT_PRIVATE QuicPacketCreator : public QuicFecBuilderInterface {
|
| public:
|
| - // Options for controlling how packets are created.
|
| - struct Options {
|
| - Options()
|
| - : max_packet_length(kDefaultMaxPacketSize),
|
| - max_packets_per_fec_group(0),
|
| - send_connection_id_length(PACKET_8BYTE_CONNECTION_ID),
|
| - send_sequence_number_length(PACKET_1BYTE_SEQUENCE_NUMBER) {}
|
| -
|
| - size_t max_packet_length;
|
| - // 0 indicates fec is disabled.
|
| - size_t max_packets_per_fec_group;
|
| - // Length of connection_id to send over the wire.
|
| - QuicConnectionIdLength send_connection_id_length;
|
| - QuicSequenceNumberLength send_sequence_number_length;
|
| - };
|
| -
|
| // QuicRandom* required for packet entropy.
|
| QuicPacketCreator(QuicConnectionId connection_id,
|
| QuicFramer* framer,
|
| @@ -63,21 +47,15 @@ class NET_EXPORT_PRIVATE QuicPacketCreator : public QuicFecBuilderInterface {
|
| void StartFecProtectingPackets();
|
|
|
| // Turn off FEC protection for subsequently created packets. If the creator
|
| - // has any open fec group, call will fail. It is the caller's responsibility
|
| + // has any open FEC group, call will fail. It is the caller's responsibility
|
| // to flush out FEC packets in generation, and to verify with ShouldSendFec()
|
| // that there is no open FEC group.
|
| void StopFecProtectingPackets();
|
|
|
| // Checks if it's time to send an FEC packet. |force_close| forces this to
|
| - // return true if an fec group is open.
|
| + // return true if an FEC group is open.
|
| bool ShouldSendFec(bool force_close) const;
|
|
|
| - // Returns current max number of packets covered by an FEC group.
|
| - size_t max_packets_per_fec_group() const;
|
| -
|
| - // Sets creator's max number of packets covered by an FEC group.
|
| - void set_max_packets_per_fec_group(size_t max_packets_per_fec_group);
|
| -
|
| // Makes the framer not serialize the protocol version in sent packets.
|
| void StopSendingVersion();
|
|
|
| @@ -213,8 +191,39 @@ class NET_EXPORT_PRIVATE QuicPacketCreator : public QuicFecBuilderInterface {
|
| sequence_number_ = s;
|
| }
|
|
|
| - Options* options() {
|
| - return &options_;
|
| + QuicConnectionIdLength connection_id_length() const {
|
| + return connection_id_length_;
|
| + }
|
| +
|
| + QuicSequenceNumberLength next_sequence_number_length() const {
|
| + return next_sequence_number_length_;
|
| + }
|
| +
|
| + void set_next_sequence_number_length(QuicSequenceNumberLength length) {
|
| + next_sequence_number_length_ = length;
|
| + }
|
| +
|
| + size_t max_packet_length() const {
|
| + return max_packet_length_;
|
| + }
|
| +
|
| + void set_max_packet_length(size_t length) {
|
| + // |max_packet_length_| should not be changed mid-packet or mid-FEC group.
|
| + DCHECK(fec_group_.get() == NULL && queued_frames_.empty());
|
| + max_packet_length_ = length;
|
| + }
|
| +
|
| + // Returns current max number of packets covered by an FEC group.
|
| + size_t max_packets_per_fec_group() const {
|
| + return max_packets_per_fec_group_;
|
| + }
|
| +
|
| + // Sets creator's max number of packets covered by an FEC group.
|
| + void set_max_packets_per_fec_group(
|
| + size_t max_packets_per_fec_group) {
|
| + // To turn off FEC protection, use StopFecProtectingPackets().
|
| + DCHECK_NE(0u, max_packets_per_fec_group);
|
| + max_packets_per_fec_group_ = max_packets_per_fec_group;
|
| }
|
|
|
| private:
|
| @@ -222,9 +231,12 @@ class NET_EXPORT_PRIVATE QuicPacketCreator : public QuicFecBuilderInterface {
|
|
|
| static bool ShouldRetransmit(const QuicFrame& frame);
|
|
|
| - // Updates sequence number length on a packet or FEC group boundary.
|
| - // Also starts an FEC group if FEC protection is on and there is not already
|
| - // an FEC group open.
|
| + // Updates sequence number and max packet lengths on a packet or FEC group
|
| + // boundary.
|
| + void MaybeUpdateLengths();
|
| +
|
| + // Updates lengths and also starts an FEC group if FEC protection is on and
|
| + // there is not already an FEC group open.
|
| InFecGroup MaybeUpdateLengthsAndStartFec();
|
|
|
| void FillPacketHeader(QuicFecGroupNumber fec_group,
|
| @@ -240,7 +252,6 @@ class NET_EXPORT_PRIVATE QuicPacketCreator : public QuicFecBuilderInterface {
|
| // padding frame.
|
| void MaybeAddPadding();
|
|
|
| - Options options_;
|
| QuicConnectionId connection_id_;
|
| EncryptionLevel encryption_level_;
|
| QuicFramer* framer_;
|
| @@ -255,9 +266,20 @@ class NET_EXPORT_PRIVATE QuicPacketCreator : public QuicFecBuilderInterface {
|
| // Controls whether protocol version should be included while serializing the
|
| // packet.
|
| bool send_version_in_packet_;
|
| - // The sequence number length for the current packet and the current FEC group
|
| - // if FEC is enabled.
|
| - // Mutable so PacketSize() can adjust it when the packet is empty.
|
| + // Maximum length including headers and encryption (UDP payload length.)
|
| + size_t max_packet_length_;
|
| + // 0 indicates FEC is disabled.
|
| + size_t max_packets_per_fec_group_;
|
| + // Length of connection_id to send over the wire.
|
| + QuicConnectionIdLength connection_id_length_;
|
| + // Staging variable to hold next packet sequence number length. When sequence
|
| + // number length is to be changed, this variable holds the new length until
|
| + // a packet or FEC group boundary, when the creator's sequence_number_length_
|
| + // can be changed to this new value.
|
| + QuicSequenceNumberLength next_sequence_number_length_;
|
| + // Sequence number length for the current packet and for the current FEC group
|
| + // when FEC is enabled. Mutable so PacketSize() can adjust it when the packet
|
| + // is empty.
|
| mutable QuicSequenceNumberLength sequence_number_length_;
|
| // packet_size_ is mutable because it's just a cache of the current size.
|
| // packet_size should never be read directly, use PacketSize() instead.
|
|
|