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

Unified Diff: net/quic/quic_connection.h

Issue 11958018: Queueing QUIC frames to be resent instead of packets and packing RST frames with acks and congestio… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 | « no previous file | net/quic/quic_connection.cc » ('j') | net/quic/quic_connection.cc » ('J')
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 d69a3a27054b190de8f9430c905a109345e86c29..1e3bf8189ce4ba75112802987b9d609ed911e8be 100644
--- a/net/quic/quic_connection.h
+++ b/net/quic/quic_connection.h
@@ -136,6 +136,7 @@ class NET_EXPORT_PRIVATE QuicConnection : public QuicFramerVisitorInterface {
QuicConnectionHelperInterface* helper);
virtual ~QuicConnection();
+ static void DeleteEnclosedFrame(QuicFrame* frame);
// Send the data payload to the peer.
// Returns a pair with the number of bytes consumed from data, and a boolean
@@ -233,7 +234,8 @@ class NET_EXPORT_PRIVATE QuicConnection : public QuicFramerVisitorInterface {
// data, and contents will be resent with a new sequence number if we don't
// get an ack. If force is true, then the packet will be sent immediately and
// the send scheduler will not be consulted. If is_retransmit is true, this
- // packet is being retransmitted with a new sequence number.
+ // packet is being retransmitted with a new sequence number. Always takes
+ // ownership of packet.
// TODO(wtc): none of the callers check the return value.
virtual bool SendPacket(QuicPacketSequenceNumber number,
QuicPacket* packet,
@@ -285,17 +287,19 @@ class NET_EXPORT_PRIVATE QuicConnection : public QuicFramerVisitorInterface {
};
struct UnackedPacket {
- explicit UnackedPacket(QuicPacket* packet)
- : packet(packet),
- number_nacks(0) {
- }
- QuicPacket* packet;
+ explicit UnackedPacket(QuicFrames unacked_frames);
+ UnackedPacket(QuicFrames unacked_frames, std::string data);
+ ~UnackedPacket();
+
+ QuicFrames frames;
uint8 number_nacks;
+ // Data referenced by the StringPiece of a QuicStreamFrame.
+ std::string data;
};
typedef std::list<QueuedPacket> QueuedPacketList;
typedef base::hash_map<QuicPacketSequenceNumber,
- UnackedPacket> UnackedPacketMap;
+ UnackedPacket*> UnackedPacketMap;
typedef std::map<QuicFecGroupNumber, QuicFecGroup*> FecGroupMap;
// The amount of time we wait before resending a packet.
@@ -303,6 +307,9 @@ class NET_EXPORT_PRIVATE QuicConnection : public QuicFramerVisitorInterface {
return QuicTime::Delta::FromMilliseconds(500);
}
+ static void DeleteUnackedPacket(UnackedPacket* unacked);
+ static bool ShouldResend(const QuicFrame& frame);
+
// Checks if a packet can be written now, and sets the timer if necessary.
bool CanWrite(bool is_retransmit);
@@ -350,15 +357,17 @@ class NET_EXPORT_PRIVATE QuicConnection : public QuicFramerVisitorInterface {
QuicPacketSequenceNumber peer_least_packet_awaiting_ack_;
// When new packets are created which may be resent, they are added
- // to this map, which contains owning pointers.
+ // to this map, which contains owning pointers to the contained frames.
UnackedPacketMap unacked_packets_;
// When packets could not be sent because the socket was not writable,
- // they are added to this list. For packets that are not resendable, this
- // list contains owning pointers, since they are not added to
- // unacked_packets_.
+ // they are added to this list. All corresponding frames are in
+ // unacked_packets_ if they are to be resent.
QueuedPacketList queued_packets_;
+ // Pending control frames, besides the ack and congestion control frames.
+ QuicFrames queued_control_frames_;
+
// True when the socket becomes unwritable.
bool write_blocked_;
« no previous file with comments | « no previous file | net/quic/quic_connection.cc » ('j') | net/quic/quic_connection.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698