Landing Recent QUIC changes until 2016-03-07 19:39 UTC
Up to, and including internal change 116570346

Add a new QUIC Ack Decimation mode that is reordering tolerant. Protected by FLAG_quic_ack_decimation2.

Merge internal change: 115853846
https://codereview.chromium.org/1777293002/

Deprecating FLAG_quic_batch_writes

Merge internal change: 115880164
https://codereview.chromium.org/1780913002/

Deprecate FLAG_quic_validate_stk_without_scid

Merge internal change: 115885351
https://codereview.chromium.org/1780923002/

Deprecate FLAG_quic_use_new_tcp_sender

Merge internal change: 115890504
https://codereview.chromium.org/1785663003/

Deprecate FLAG_quic_use_new_idle_timeout

Merge internal change: 115904466
https://codereview.chromium.org/1785693003/

Deprecate FLAG_quic_block_unencrypted_writes

Merge internal change: 115909446
https://codereview.chromium.org/1784643006/

Clang formatting net/quic.

Merge internal change: 115992556
https://codereview.chromium.org/1780783003/

Optionally defer responding to a QUIC ACK until all ACK processing has completed for an EpollServer iteration. Guarded by FLAG_quic_connection_defer_ack_response

Merge internal change: 114770052
https://codereview.chromium.org/1782053003/

Deprecate FLAG_require_strike_register_or_server_nonce

Merge internal change: 115891009
https://codereview.chromium.org/1785613005/

Add a boolean use_stateless_rejects_if_peer_supported argument to the QuicCryptoServerStream constructor instead of consulting FLAG_enable_quic_stateless_reject_support directly. No behavior change expected.

Merge internal change: 115844136
https://codereview.chromium.org/1783713003/

Remove FEC from send path.

Merge internal change: 115997404
https://codereview.chromium.org/1784903003/

Remove FEC code from receive path.

Drop received FEC packet.

Merge internal change: 116134765
https://codereview.chromium.org/1782143003/

Only cancel QUIC alarms if they have been set. Protected behind FLAG_quic_only_cancel_set_alarms

Merge internal change: 116142833
https://codereview.chromium.org/1781073002/

Call QuicAlarm::IsSet instead of looking at deadline_ directly, rename some variables for readability.

Merge internal change: 116146641
https://codereview.chromium.org/1778243005/

Add whether QUIC's unencrypted stream data was received or about to be sent in the error log.  Logging only change.

Merge internal change: 116152506
https://codereview.chromium.org/1782193002/

Temporarily store the raw QUIC packet in QuicConnection.

Merge internal change: 116180343
https://codereview.chromium.org/1779313002/

Deprecate FLAG_quic_no_unencrypted_fec.

Merge internal change: 116244697
https://codereview.chromium.org/1780573006/

Make ShouldCreateOutgoingDynamicStream a virtual method.

Merge internal change: 116249386
https://codereview.chromium.org/1784933003/

Correctly handle EINTR during sendmsg in QuicSocketUtils::WritePacket.

Merge internal change: 116261116
https://codereview.chromium.org/1780323002/

Simplify QUIC's encryption path now that FEC is gone.  Protected by FLAG_quic_inplace_encryption.

Merge internal change: 116266391
https://codereview.chromium.org/1785513003/

Remove the force param from QuicPacketGenerator::SetMaxPacketLength because path MTU packets should not be sent if the MTU cannot be changed.  Not flag protected.

Merge internal change: 116273065
https://codereview.chromium.org/1781043004/

Remove lastest_revived_packet from QuicAckFrame since FEC is gone. No functional change expected.

Wire format is not changed yet.

Merge internal change: 116411121
https://codereview.chromium.org/1787443002/

Remove is_fec_packet from TransmissionInfo and SerializedPacket. No functional change.

Merge internal change: 116555910
https://codereview.chromium.org/1785853002/

Remove FEC related connection options and update FEC related comment in code base.

Merge internal change: 116566297
https://codereview.chromium.org/1785863002/

Switch "const StringPiece&" to just "StringPiece" in QUIC code. No functional change. Not flag protected.

Merge internal change: 116570346
https://codereview.chromium.org/1787453002/

Add a QuicCompressedCertsCache instance to QuicDispatcher, plumbing to QuicServerSessionBase but not used. No behavior change.

Merge internal change: 116277134
https://codereview.chromium.org/1783783003/

Add more detailed logging to QUIC's ack validation.  No functional change.

Merge internal change: 116277228
https://codereview.chromium.org/1784963002/

Remove max_packet_length from QuicPacketGenerator, because it is no longer necessary with FEC gone.  Not flag protected.

Merge internal change: 116387934
https://codereview.chromium.org/1777423002/

Add QuicCompressedCertsCache* to QuicCrytoServerStream plumbed from QuicServerSessionBase. No behavior change.

Merge internal change: 116388439
https://codereview.chromium.org/1782743005/

Remove unused return value from QuicAlarm::Delegate::OnAlarm. No behavior change, not protected.

The only place in the codebase that returns something other than
QuicTime::Zero() is the DelayAlarm in PacketDroppingTestWriter. I've the
implementation of OnAlarm in there to set the alarm directly to the new
time, rather than relying on the return value.

Merge internal change: 116389752
https://codereview.chromium.org/1779883005/

Add a QUIC ScopedPacketBundler to send an ack when the ack alarm goes off.  No functional change.  Not flag protected.

Merge internal change: 116391846
https://codereview.chromium.org/1786493003/

OnStreamEnd is now called instead of the sentinel call of OnStreamFrameData(stream_id, nullptr, 0, true). Protected by the flag FLAGS_spdy_on_stream_end.

Merge internal change: 116272960
https://codereview.chromium.org/1777163003/

[email protected]
BUG=

Review URL: https://codereview.chromium.org/1781123002

Cr-Commit-Position: refs/heads/master@{#380718}
diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
index 1b275cb..25fa411 100644
--- a/net/quic/quic_protocol.h
+++ b/net/quic/quic_protocol.h
@@ -140,6 +140,9 @@
 // Maximum delayed ack time, in ms.
 const int64_t kMaxDelayedAckTimeMs = 25;
 
+// Minimum tail loss probe time in ms.
+static const int64_t kMinTailLossProbeTimeoutMs = 10;
+
 // The timeout before the handshake succeeds.
 const int64_t kInitialIdleTimeoutSecs = 5;
 // The default idle timeout.
@@ -234,26 +237,6 @@
 NET_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
                                             const Perspective& s);
 
-// Indicates FEC protection level for data being written.
-enum FecProtection {
-  MUST_FEC_PROTECT,  // Callee must FEC protect this data.
-  MAY_FEC_PROTECT    // Callee does not have to but may FEC protect this data.
-};
-
-// Indicates FEC policy.
-enum FecPolicy {
-  FEC_PROTECT_ALWAYS,   // All data in the stream should be FEC protected.
-  FEC_PROTECT_OPTIONAL  // Data in the stream does not need FEC protection.
-};
-
-// Indicates FEC policy about when to send FEC packet.
-enum FecSendPolicy {
-  // Send FEC packet when FEC group is full or when FEC alarm goes off.
-  FEC_ANY_TRIGGER,
-  // Send FEC packet only when FEC alarm goes off.
-  FEC_ALARM_TRIGGER
-};
-
 enum QuicFrameType {
   // Regular frame types. The values set here cannot change without the
   // introduction of a new QUIC version.
@@ -426,25 +409,20 @@
 NET_EXPORT_PRIVATE bool ContainsQuicTag(const QuicTagVector& tag_vector,
                                         QuicTag tag);
 
-// Size in bytes of the data or fec packet header.
+// Size in bytes of the data packet header.
 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(const QuicPacketHeader& header);
 
 NET_EXPORT_PRIVATE size_t
 GetPacketHeaderSize(QuicConnectionIdLength connection_id_length,
                     bool include_version,
                     bool include_path_id,
-                    QuicPacketNumberLength packet_number_length,
-                    InFecGroup is_in_fec_group);
-
-// Index of the first byte in a QUIC packet of FEC protected data.
-NET_EXPORT_PRIVATE size_t
-GetStartOfFecProtectedData(QuicConnectionIdLength connection_id_length,
-                           bool include_version,
-                           bool include_path_id,
-                           QuicPacketNumberLength packet_number_length);
+                    QuicPacketNumberLength packet_number_length);
 
 // Index of the first byte in a QUIC packet of encrypted data.
 NET_EXPORT_PRIVATE size_t
+GetStartOfEncryptedData(const QuicPacketHeader& header);
+
+NET_EXPORT_PRIVATE size_t
 GetStartOfEncryptedData(QuicConnectionIdLength connection_id_length,
                         bool include_version,
                         bool include_path_id,
@@ -709,7 +687,7 @@
 // An integer which cannot be a packet number.
 const QuicPacketNumber kInvalidPacketNumber = 0;
 
-// Header for Data or FEC packets.
+// Header for Data packets.
 struct NET_EXPORT_PRIVATE QuicPacketHeader {
   QuicPacketHeader();
   explicit QuicPacketHeader(const QuicPacketPublicHeader& header);
@@ -998,10 +976,6 @@
 
   // The set of packets which we're expecting and have not received.
   PacketNumberQueue missing_packets;
-
-  // Packet most recently revived via FEC, 0 if no packet was revived by FEC.
-  // If non-zero, must be present in missing_packets.
-  QuicPacketNumber latest_revived_packet;
 };
 
 // True if the packet number is greater than largest_observed or is listed
@@ -1235,7 +1209,6 @@
              bool includes_path_id,
              QuicPacketNumberLength packet_number_length);
 
-  base::StringPiece FecProtectedData() const;
   base::StringPiece AssociatedData() const;
   base::StringPiece Plaintext() const;
 
@@ -1326,7 +1299,6 @@
   QuicPacketNumberLength packet_number_length;
   EncryptionLevel encryption_level;
   QuicPacketEntropyHash entropy_hash;
-  bool is_fec_packet;
   bool has_ack;
   bool has_stop_waiting;
   QuicPacketNumber original_packet_number;
@@ -1347,7 +1319,6 @@
                    TransmissionType transmission_type,
                    QuicTime sent_time,
                    QuicPacketLength bytes_sent,
-                   bool is_fec_packet,
                    bool has_crypto_handshake,
                    bool needs_padding);
 
@@ -1367,8 +1338,6 @@
   bool in_flight;
   // True if the packet can never be acked, so it can be removed.
   bool is_unackable;
-  // True if the packet is an FEC packet.
-  bool is_fec_packet;
   // True if the packet contains stream data from the crypto stream.
   bool has_crypto_handshake;
   // True if the packet needs padding if it's retransmitted.