| Index: net/quic/quic_connection.h
|
| diff --git a/net/quic/quic_connection.h b/net/quic/quic_connection.h
|
| index bf157559cd0063e6ff8baad7002166deab70c4d3..25b801470edb1063196cb1381894c1695df19fff 100644
|
| --- a/net/quic/quic_connection.h
|
| +++ b/net/quic/quic_connection.h
|
| @@ -53,6 +53,7 @@ class QuicFecGroup;
|
| class QuicRandom;
|
|
|
| namespace test {
|
| +class PacketSavingConnection;
|
| class QuicConnectionPeer;
|
| } // namespace test
|
|
|
| @@ -521,6 +522,24 @@ class NET_EXPORT_PRIVATE QuicConnection
|
| };
|
|
|
| protected:
|
| + // Packets which have not been written to the wire.
|
| + // Owns the QuicPacket* packet.
|
| + struct QueuedPacket {
|
| + QueuedPacket(SerializedPacket packet,
|
| + EncryptionLevel level);
|
| + QueuedPacket(SerializedPacket packet,
|
| + EncryptionLevel level,
|
| + TransmissionType transmission_type,
|
| + QuicPacketSequenceNumber original_sequence_number);
|
| +
|
| + SerializedPacket serialized_packet;
|
| + const EncryptionLevel encryption_level;
|
| + TransmissionType transmission_type;
|
| + // The packet's original sequence number if it is a retransmission.
|
| + // Otherwise it must be 0.
|
| + QuicPacketSequenceNumber original_sequence_number;
|
| + };
|
| +
|
| // Do any work which logically would be done in OnPacket but can not be
|
| // safely done until the packet is validated. Returns true if the packet
|
| // can be handled, false otherwise.
|
| @@ -528,9 +547,7 @@ class NET_EXPORT_PRIVATE QuicConnection
|
|
|
| // Send a packet to the peer, and takes ownership of the packet if the packet
|
| // cannot be written immediately.
|
| - virtual void SendOrQueuePacket(EncryptionLevel level,
|
| - const SerializedPacket& packet,
|
| - TransmissionType transmission_type);
|
| + virtual void SendOrQueuePacket(QueuedPacket packet);
|
|
|
| QuicConnectionHelperInterface* helper() { return helper_; }
|
|
|
| @@ -549,30 +566,23 @@ class NET_EXPORT_PRIVATE QuicConnection
|
|
|
| private:
|
| friend class test::QuicConnectionPeer;
|
| -
|
| - // Packets which have not been written to the wire.
|
| - // Owns the QuicPacket* packet.
|
| - struct QueuedPacket {
|
| - QueuedPacket(SerializedPacket packet,
|
| - EncryptionLevel level,
|
| - TransmissionType transmission_type);
|
| -
|
| - SerializedPacket serialized_packet;
|
| - const EncryptionLevel encryption_level;
|
| - TransmissionType transmission_type;
|
| - };
|
| + friend class test::PacketSavingConnection;
|
|
|
| typedef std::list<QueuedPacket> QueuedPacketList;
|
| typedef std::map<QuicFecGroupNumber, QuicFecGroup*> FecGroupMap;
|
|
|
| // Writes the given packet to socket, encrypted with packet's
|
| // encryption_level. Returns true on successful write, and false if the writer
|
| - // was blocked and the write needs to be tried again. Behavior is undefined
|
| - // if connection is not established or broken. Notifies the SentPacketManager
|
| - // when the write is successful.
|
| + // was blocked and the write needs to be tried again. Notifies the
|
| + // SentPacketManager when the write is successful and sets
|
| + // retransmittable frames to NULL.
|
| // Saves the connection close packet for later transmission, even if the
|
| // writer is write blocked.
|
| - bool WritePacket(const QueuedPacket& packet);
|
| + bool WritePacket(QueuedPacket* packet);
|
| +
|
| + // Does the main work of WritePacket, but does not delete the packet or
|
| + // retransmittable frames upon success.
|
| + bool WritePacketInner(QueuedPacket* packet);
|
|
|
| // Make sure an ack we got from our peer is sane.
|
| bool ValidateAckFrame(const QuicAckFrame& incoming_ack);
|
|
|