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

Unified Diff: net/quic/quic_packet_creator.cc

Issue 23464033: Land Recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix valgrind error Created 7 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_packet_creator.h ('k') | net/quic/quic_packet_generator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_packet_creator.cc
diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc
index 387cd37013589a1d38363ac383076035a0fc53a8..e1d0e21e198775c9fc016aff4c11d00798e314dd 100644
--- a/net/quic/quic_packet_creator.cc
+++ b/net/quic/quic_packet_creator.cc
@@ -6,6 +6,7 @@
#include "base/logging.h"
#include "net/quic/crypto/quic_random.h"
+#include "net/quic/quic_ack_notifier.h"
#include "net/quic/quic_fec_group.h"
#include "net/quic/quic_utils.h"
@@ -30,7 +31,7 @@ QuicPacketCreator::QuicPacketCreator(QuicGuid guid,
send_version_in_packet_(!is_server),
sequence_number_length_(options_.send_sequence_number_length),
packet_size_(0) {
- framer_->set_fec_builder(this);
+ framer_->set_fec_builder(reinterpret_cast<QuicFecBuilderInterface*>(this));
}
QuicPacketCreator::~QuicPacketCreator() {
@@ -138,6 +139,23 @@ size_t QuicPacketCreator::CreateStreamFrame(QuicStreamId id,
return bytes_consumed;
}
+size_t QuicPacketCreator::CreateStreamFrameWithNotifier(
+ QuicStreamId id,
+ StringPiece data,
+ QuicStreamOffset offset,
+ bool fin,
+ QuicAckNotifier* notifier,
+ QuicFrame* frame) {
+ size_t bytes_consumed = CreateStreamFrame(id, data, offset, fin, frame);
+
+ // The frame keeps track of the QuicAckNotifier until it is serialized into
+ // a packet. At that point the notifier is informed of the sequence number
+ // of the packet that this frame was eventually sent in.
+ frame->stream_frame->notifier = notifier;
+
+ return bytes_consumed;
+}
+
SerializedPacket QuicPacketCreator::ReserializeAllFrames(
const QuicFrames& frames,
QuicSequenceNumberLength original_length) {
@@ -215,8 +233,19 @@ SerializedPacket QuicPacketCreator::SerializePacket() {
QuicPacketHeader header;
FillPacketHeader(fec_group_number_, false, false, &header);
- SerializedPacket serialized = framer_->BuildDataPacket(
- header, queued_frames_, PacketSize());
+ SerializedPacket serialized =
+ framer_->BuildDataPacket(header, queued_frames_, packet_size_);
+
+ // Run through all the included frames and if any of them have an AckNotifier
+ // registered, then inform the AckNotifier that it should be interested in
+ // this packet's sequence number.
+ for (QuicFrames::iterator it = queued_frames_.begin();
+ it != queued_frames_.end(); ++it) {
+ if (it->type == STREAM_FRAME && it->stream_frame->notifier != NULL) {
+ it->stream_frame->notifier->AddSequenceNumber(serialized.sequence_number);
+ }
+ }
+
packet_size_ = 0;
queued_frames_.clear();
serialized.retransmittable_frames = queued_retransmittable_frames_.release();
« no previous file with comments | « net/quic/quic_packet_creator.h ('k') | net/quic/quic_packet_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698