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

Side by Side Diff: net/quic/quic_packet_creator.cc

Issue 420313005: Land Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Final_0723
Patch Set: change QUIC packet size to 1350 Created 6 years, 4 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
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_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "net/quic/crypto/quic_random.h" 9 #include "net/quic/crypto/quic_random.h"
10 #include "net/quic/quic_ack_notifier.h" 10 #include "net/quic/quic_ack_notifier.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 next_sequence_number_length_ = 200 next_sequence_number_length_ =
201 QuicFramer::GetMinSequenceNumberLength(delta * 4); 201 QuicFramer::GetMinSequenceNumberLength(delta * 4);
202 } 202 }
203 203
204 bool QuicPacketCreator::HasRoomForStreamFrame(QuicStreamId id, 204 bool QuicPacketCreator::HasRoomForStreamFrame(QuicStreamId id,
205 QuicStreamOffset offset) const { 205 QuicStreamOffset offset) const {
206 // TODO(jri): This is a simple safe decision for now, but make 206 // TODO(jri): This is a simple safe decision for now, but make
207 // is_in_fec_group a parameter. Same as with all public methods in 207 // is_in_fec_group a parameter. Same as with all public methods in
208 // QuicPacketCreator. 208 // QuicPacketCreator.
209 return BytesFree() > 209 return BytesFree() >
210 QuicFramer::GetMinStreamFrameSize(framer_->version(), id, offset, true, 210 QuicFramer::GetMinStreamFrameSize(id, offset, true,
211 should_fec_protect_ ? IN_FEC_GROUP : 211 should_fec_protect_ ? IN_FEC_GROUP :
212 NOT_IN_FEC_GROUP); 212 NOT_IN_FEC_GROUP);
213 } 213 }
214 214
215 // static 215 // static
216 size_t QuicPacketCreator::StreamFramePacketOverhead( 216 size_t QuicPacketCreator::StreamFramePacketOverhead(
217 QuicVersion version,
218 QuicConnectionIdLength connection_id_length, 217 QuicConnectionIdLength connection_id_length,
219 bool include_version, 218 bool include_version,
220 QuicSequenceNumberLength sequence_number_length, 219 QuicSequenceNumberLength sequence_number_length,
221 QuicStreamOffset offset, 220 QuicStreamOffset offset,
222 InFecGroup is_in_fec_group) { 221 InFecGroup is_in_fec_group) {
223 return GetPacketHeaderSize(connection_id_length, include_version, 222 return GetPacketHeaderSize(connection_id_length, include_version,
224 sequence_number_length, is_in_fec_group) + 223 sequence_number_length, is_in_fec_group) +
225 // Assumes this is a stream with a single lone packet. 224 // Assumes this is a stream with a single lone packet.
226 QuicFramer::GetMinStreamFrameSize(version, 1u, offset, true, 225 QuicFramer::GetMinStreamFrameSize(1u, offset, true, is_in_fec_group);
227 is_in_fec_group);
228 } 226 }
229 227
230 size_t QuicPacketCreator::CreateStreamFrame(QuicStreamId id, 228 size_t QuicPacketCreator::CreateStreamFrame(QuicStreamId id,
231 const IOVector& data, 229 const IOVector& data,
232 QuicStreamOffset offset, 230 QuicStreamOffset offset,
233 bool fin, 231 bool fin,
234 QuicFrame* frame) { 232 QuicFrame* frame) {
235 DCHECK_GT(max_packet_length_, StreamFramePacketOverhead( 233 DCHECK_GT(max_packet_length_, StreamFramePacketOverhead(
236 framer_->version(), PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, 234 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion,
237 PACKET_6BYTE_SEQUENCE_NUMBER, offset, IN_FEC_GROUP)); 235 PACKET_6BYTE_SEQUENCE_NUMBER, offset, IN_FEC_GROUP));
238 236
239 InFecGroup is_in_fec_group = MaybeUpdateLengthsAndStartFec(); 237 InFecGroup is_in_fec_group = MaybeUpdateLengthsAndStartFec();
240 238
241 LOG_IF(DFATAL, !HasRoomForStreamFrame(id, offset)) 239 LOG_IF(DFATAL, !HasRoomForStreamFrame(id, offset))
242 << "No room for Stream frame, BytesFree: " << BytesFree() 240 << "No room for Stream frame, BytesFree: " << BytesFree()
243 << " MinStreamFrameSize: " 241 << " MinStreamFrameSize: "
244 << QuicFramer::GetMinStreamFrameSize( 242 << QuicFramer::GetMinStreamFrameSize(id, offset, true, is_in_fec_group);
245 framer_->version(), id, offset, true, is_in_fec_group);
246 243
247 if (data.Empty()) { 244 if (data.Empty()) {
248 LOG_IF(DFATAL, !fin) 245 LOG_IF(DFATAL, !fin)
249 << "Creating a stream frame with no data or fin."; 246 << "Creating a stream frame with no data or fin.";
250 // Create a new packet for the fin, if necessary. 247 // Create a new packet for the fin, if necessary.
251 *frame = QuicFrame(new QuicStreamFrame(id, true, offset, data)); 248 *frame = QuicFrame(new QuicStreamFrame(id, true, offset, data));
252 return 0; 249 return 0;
253 } 250 }
254 251
255 const size_t data_size = data.TotalBufferSize(); 252 const size_t data_size = data.TotalBufferSize();
256 size_t min_frame_size = QuicFramer::GetMinStreamFrameSize( 253 size_t min_frame_size = QuicFramer::GetMinStreamFrameSize(
257 framer_->version(), id, offset, /*last_frame_in_packet=*/ true, 254 id, offset, /* last_frame_in_packet= */ true, is_in_fec_group);
258 is_in_fec_group);
259 size_t bytes_consumed = min<size_t>(BytesFree() - min_frame_size, data_size); 255 size_t bytes_consumed = min<size_t>(BytesFree() - min_frame_size, data_size);
260 256
261 bool set_fin = fin && bytes_consumed == data_size; // Last frame. 257 bool set_fin = fin && bytes_consumed == data_size; // Last frame.
262 IOVector frame_data; 258 IOVector frame_data;
263 frame_data.AppendIovecAtMostBytes(data.iovec(), data.Size(), 259 frame_data.AppendIovecAtMostBytes(data.iovec(), data.Size(),
264 bytes_consumed); 260 bytes_consumed);
265 DCHECK_EQ(frame_data.TotalBufferSize(), bytes_consumed); 261 DCHECK_EQ(frame_data.TotalBufferSize(), bytes_consumed);
266 *frame = QuicFrame(new QuicStreamFrame(id, set_fin, offset, frame_data)); 262 *frame = QuicFrame(new QuicStreamFrame(id, set_fin, offset, frame_data));
267 return bytes_consumed; 263 return bytes_consumed;
268 } 264 }
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 if (!is_handshake) { 520 if (!is_handshake) {
525 return; 521 return;
526 } 522 }
527 523
528 QuicPaddingFrame padding; 524 QuicPaddingFrame padding;
529 bool success = AddFrame(QuicFrame(&padding), false); 525 bool success = AddFrame(QuicFrame(&padding), false);
530 DCHECK(success); 526 DCHECK(success);
531 } 527 }
532 528
533 } // namespace net 529 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698