| OLD | NEW |
| 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 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 << "Attempt to serialize empty packet"; | 372 << "Attempt to serialize empty packet"; |
| 373 DCHECK_GE(sequence_number_ + 1, fec_group_number_); | 373 DCHECK_GE(sequence_number_ + 1, fec_group_number_); |
| 374 QuicPacketHeader header; | 374 QuicPacketHeader header; |
| 375 FillPacketHeader(should_fec_protect_ ? fec_group_number_ : 0, false, &header); | 375 FillPacketHeader(should_fec_protect_ ? fec_group_number_ : 0, false, &header); |
| 376 | 376 |
| 377 MaybeAddPadding(); | 377 MaybeAddPadding(); |
| 378 | 378 |
| 379 size_t max_plaintext_size = | 379 size_t max_plaintext_size = |
| 380 framer_->GetMaxPlaintextSize(max_packet_length_); | 380 framer_->GetMaxPlaintextSize(max_packet_length_); |
| 381 DCHECK_GE(max_plaintext_size, packet_size_); | 381 DCHECK_GE(max_plaintext_size, packet_size_); |
| 382 // ACK Frames will be truncated only if they're the only frame in the packet, | 382 // ACK Frames will be truncated due to length only if they're the only frame |
| 383 // and if packet_size_ was set to max_plaintext_size. If truncation occurred, | 383 // in the packet, and if packet_size_ was set to max_plaintext_size. If |
| 384 // then GetSerializedFrameLength will have returned all bytes free. | 384 // truncation due to length occurred, then GetSerializedFrameLength will have |
| 385 bool possibly_truncated = packet_size_ == max_plaintext_size && | 385 // returned all bytes free. |
| 386 queued_frames_.size() == 1 && | 386 bool possibly_truncated_by_length = packet_size_ == max_plaintext_size && |
| 387 queued_frames_.back().type == ACK_FRAME; | 387 queued_frames_.size() == 1 && |
| 388 queued_frames_.back().type == ACK_FRAME; |
| 388 SerializedPacket serialized = | 389 SerializedPacket serialized = |
| 389 framer_->BuildDataPacket(header, queued_frames_, packet_size_); | 390 framer_->BuildDataPacket(header, queued_frames_, packet_size_); |
| 390 LOG_IF(DFATAL, !serialized.packet) | 391 LOG_IF(DFATAL, !serialized.packet) |
| 391 << "Failed to serialize " << queued_frames_.size() << " frames."; | 392 << "Failed to serialize " << queued_frames_.size() << " frames."; |
| 392 // Because of possible truncation, we can't be confident that our | 393 // Because of possible truncation, we can't be confident that our |
| 393 // packet size calculation worked correctly. | 394 // packet size calculation worked correctly. |
| 394 if (!possibly_truncated) { | 395 if (!possibly_truncated_by_length) { |
| 395 DCHECK_EQ(packet_size_, serialized.packet->length()); | 396 DCHECK_EQ(packet_size_, serialized.packet->length()); |
| 396 } | 397 } |
| 397 packet_size_ = 0; | 398 packet_size_ = 0; |
| 398 queued_frames_.clear(); | 399 queued_frames_.clear(); |
| 399 serialized.retransmittable_frames = queued_retransmittable_frames_.release(); | 400 serialized.retransmittable_frames = queued_retransmittable_frames_.release(); |
| 400 return serialized; | 401 return serialized; |
| 401 } | 402 } |
| 402 | 403 |
| 403 SerializedPacket QuicPacketCreator::SerializeFec() { | 404 SerializedPacket QuicPacketCreator::SerializeFec() { |
| 404 if (fec_group_.get() == NULL || fec_group_->NumReceivedPackets() <= 0) { | 405 if (fec_group_.get() == NULL || fec_group_->NumReceivedPackets() <= 0) { |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 511 if (BytesFree() == 0) { | 512 if (BytesFree() == 0) { |
| 512 // Don't pad full packets. | 513 // Don't pad full packets. |
| 513 return; | 514 return; |
| 514 } | 515 } |
| 515 QuicPaddingFrame padding; | 516 QuicPaddingFrame padding; |
| 516 bool success = AddFrame(QuicFrame(&padding), false); | 517 bool success = AddFrame(QuicFrame(&padding), false); |
| 517 DCHECK(success); | 518 DCHECK(success); |
| 518 } | 519 } |
| 519 | 520 |
| 520 } // namespace net | 521 } // namespace net |
| OLD | NEW |