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

Side by Side Diff: net/quic/quic_packet_generator.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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_packet_generator.h ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_packet_generator.h" 5 #include "net/quic/quic_packet_generator.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "net/quic/quic_fec_group.h" 8 #include "net/quic/quic_fec_group.h"
9 #include "net/quic/quic_utils.h" 9 #include "net/quic/quic_utils.h"
10 10
11 using base::StringPiece; 11 using base::StringPiece;
12 12
13 namespace net { 13 namespace net {
14 14
15 class QuicAckNotifier;
16
15 QuicPacketGenerator::QuicPacketGenerator(DelegateInterface* delegate, 17 QuicPacketGenerator::QuicPacketGenerator(DelegateInterface* delegate,
16 DebugDelegateInterface* debug_delegate, 18 DebugDelegateInterface* debug_delegate,
17 QuicPacketCreator* creator) 19 QuicPacketCreator* creator)
18 : delegate_(delegate), 20 : delegate_(delegate),
19 debug_delegate_(debug_delegate), 21 debug_delegate_(debug_delegate),
20 packet_creator_(creator), 22 packet_creator_(creator),
21 batch_mode_(false), 23 batch_mode_(false),
22 should_send_ack_(false), 24 should_send_ack_(false),
23 should_send_feedback_(false) { 25 should_send_feedback_(false) {
24 } 26 }
(...skipping 28 matching lines...) Expand all
53 } 55 }
54 } 56 }
55 } 57 }
56 58
57 void QuicPacketGenerator::SetShouldSendAck(bool also_send_feedback) { 59 void QuicPacketGenerator::SetShouldSendAck(bool also_send_feedback) {
58 should_send_ack_ = true; 60 should_send_ack_ = true;
59 should_send_feedback_ = also_send_feedback; 61 should_send_feedback_ = also_send_feedback;
60 SendQueuedFrames(); 62 SendQueuedFrames();
61 } 63 }
62 64
63
64 void QuicPacketGenerator::AddControlFrame(const QuicFrame& frame) { 65 void QuicPacketGenerator::AddControlFrame(const QuicFrame& frame) {
65 queued_control_frames_.push_back(frame); 66 queued_control_frames_.push_back(frame);
66 SendQueuedFrames(); 67 SendQueuedFrames();
67 } 68 }
68 69
69 QuicConsumedData QuicPacketGenerator::ConsumeData(QuicStreamId id, 70 QuicConsumedData QuicPacketGenerator::ConsumeData(QuicStreamId id,
70 StringPiece data, 71 StringPiece data,
71 QuicStreamOffset offset, 72 QuicStreamOffset offset,
72 bool fin) { 73 bool fin) {
74 return ConsumeData(id, data, offset, fin, NULL);
75 }
76
77 QuicConsumedData QuicPacketGenerator::ConsumeData(QuicStreamId id,
78 StringPiece data,
79 QuicStreamOffset offset,
80 bool fin,
81 QuicAckNotifier* notifier) {
73 IsHandshake handshake = id == kCryptoStreamId ? IS_HANDSHAKE : NOT_HANDSHAKE; 82 IsHandshake handshake = id == kCryptoStreamId ? IS_HANDSHAKE : NOT_HANDSHAKE;
74 // The caller should have flushed pending frames before sending handshake 83 // The caller should have flushed pending frames before sending handshake
75 // messages. 84 // messages.
76 DCHECK(handshake == NOT_HANDSHAKE || !HasPendingFrames()); 85 DCHECK(handshake == NOT_HANDSHAKE || !HasPendingFrames());
77 SendQueuedFrames(); 86 SendQueuedFrames();
78 87
79 size_t total_bytes_consumed = 0; 88 size_t total_bytes_consumed = 0;
80 bool fin_consumed = false; 89 bool fin_consumed = false;
81 90
82 while (delegate_->CanWrite(NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA, 91 while (delegate_->CanWrite(NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA,
83 handshake)) { 92 handshake)) {
84 QuicFrame frame; 93 QuicFrame frame;
85 size_t bytes_consumed = packet_creator_->CreateStreamFrame( 94 size_t bytes_consumed;
95 if (notifier != NULL) {
96 // We want to track which packet this stream frame ends up in.
97 bytes_consumed = packet_creator_->CreateStreamFrameWithNotifier(
98 id, data, offset + total_bytes_consumed, fin, notifier, &frame);
99 } else {
100 bytes_consumed = packet_creator_->CreateStreamFrame(
86 id, data, offset + total_bytes_consumed, fin, &frame); 101 id, data, offset + total_bytes_consumed, fin, &frame);
102 }
87 bool success = AddFrame(frame); 103 bool success = AddFrame(frame);
88 DCHECK(success); 104 DCHECK(success);
89 105
90 total_bytes_consumed += bytes_consumed; 106 total_bytes_consumed += bytes_consumed;
91 fin_consumed = fin && bytes_consumed == data.size(); 107 fin_consumed = fin && bytes_consumed == data.size();
92 data.remove_prefix(bytes_consumed); 108 data.remove_prefix(bytes_consumed);
93 DCHECK(data.empty() || packet_creator_->BytesFree() == 0u); 109 DCHECK(data.empty() || packet_creator_->BytesFree() == 0u);
94 110
95 // TODO(ianswett): Restore packet reordering. 111 // TODO(ianswett): Restore packet reordering.
96 if (!InBatchMode() || !packet_creator_->HasRoomForStreamFrame(id, offset)) { 112 if (!InBatchMode() || !packet_creator_->HasRoomForStreamFrame(id, offset)) {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 236
221 if (packet_creator_->ShouldSendFec(false)) { 237 if (packet_creator_->ShouldSendFec(false)) {
222 SerializedPacket serialized_fec = packet_creator_->SerializeFec(); 238 SerializedPacket serialized_fec = packet_creator_->SerializeFec();
223 DCHECK(serialized_fec.packet); 239 DCHECK(serialized_fec.packet);
224 delegate_->OnSerializedPacket(serialized_fec); 240 delegate_->OnSerializedPacket(serialized_fec);
225 packet_creator_->MaybeStartFEC(); 241 packet_creator_->MaybeStartFEC();
226 } 242 }
227 } 243 }
228 244
229 } // namespace net 245 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_generator.h ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698