Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1159)

Unified Diff: net/quic/quic_connection.h

Issue 559373003: Landing Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compiler errors Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_config_test.cc ('k') | net/quic/quic_connection.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_connection.h
diff --git a/net/quic/quic_connection.h b/net/quic/quic_connection.h
index c734387ba696eaf34114255fc1312a60e0c25599..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
@@ -374,7 +375,7 @@ class NET_EXPORT_PRIVATE QuicConnection
virtual QuicAckFrame* CreateAckFrame() OVERRIDE;
virtual QuicCongestionFeedbackFrame* CreateFeedbackFrame() OVERRIDE;
virtual QuicStopWaitingFrame* CreateStopWaitingFrame() OVERRIDE;
- virtual bool OnSerializedPacket(const SerializedPacket& packet) OVERRIDE;
+ virtual void OnSerializedPacket(const SerializedPacket& packet) OVERRIDE;
// QuicSentPacketManager::NetworkChangeVisitor
virtual void OnCongestionWindowChange(
@@ -452,11 +453,11 @@ class NET_EXPORT_PRIVATE QuicConnection
void OnRetransmissionTimeout();
// Retransmits all unacked packets with retransmittable frames if
- // |retransmission_type| is ALL_PACKETS, otherwise retransmits only initially
- // encrypted packets. Used when the negotiated protocol version is different
- // from what was initially assumed and when the visitor wants to re-transmit
- // initially encrypted packets when the initial encrypter changes.
- void RetransmitUnackedPackets(RetransmissionType retransmission_type);
+ // |retransmission_type| is ALL_UNACKED_PACKETS, otherwise retransmits only
+ // initially encrypted packets. Used when the negotiated protocol version is
+ // different from what was initially assumed and when the initial encryption
+ // changes.
+ void RetransmitUnackedPackets(TransmissionType retransmission_type);
// Calls |sent_packet_manager_|'s NeuterUnencryptedPackets. Used when the
// connection becomes forward secure and hasn't received acks for all packets.
@@ -521,23 +522,32 @@ 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.
virtual bool ProcessValidatedPacket();
- // Send a packet to the peer using encryption |level|. If |sequence_number|
- // is present in the |retransmission_map_|, then contents of this packet will
- // be retransmitted with a new sequence number if it's not acked by the peer.
- // Deletes |packet| if WritePacket call succeeds, or transfers ownership to
- // QueuedPacket, ultimately deleted in WriteQueuedPackets. Updates the
- // entropy map corresponding to |sequence_number| using |entropy_hash|.
- // |transmission_type| and |retransmittable| are supplied to the congestion
- // manager, and when |forced| is true, it bypasses the congestion manager.
- // TODO(wtc): none of the callers check the return value.
- virtual bool SendOrQueuePacket(EncryptionLevel level,
- const SerializedPacket& packet,
- TransmissionType transmission_type);
+ // Send a packet to the peer, and takes ownership of the packet if the packet
+ // cannot be written immediately.
+ virtual void SendOrQueuePacket(QueuedPacket packet);
QuicConnectionHelperInterface* helper() { return helper_; }
@@ -556,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);
« no previous file with comments | « net/quic/quic_config_test.cc ('k') | net/quic/quic_connection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698