| 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 <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 has_stop_waiting |= frame.type == STOP_WAITING_FRAME; | 593 has_stop_waiting |= frame.type == STOP_WAITING_FRAME; |
| 594 } | 594 } |
| 595 | 595 |
| 596 packet_size_ = 0; | 596 packet_size_ = 0; |
| 597 queued_frames_.clear(); | 597 queued_frames_.clear(); |
| 598 needs_padding_ = false; | 598 needs_padding_ = false; |
| 599 return SerializedPacket( | 599 return SerializedPacket( |
| 600 header.packet_number, header.public_header.packet_number_length, | 600 header.packet_number, header.public_header.packet_number_length, |
| 601 encrypted_buffer, encrypted_length, /* owns_buffer*/ false, | 601 encrypted_buffer, encrypted_length, /* owns_buffer*/ false, |
| 602 QuicFramer::GetPacketEntropyHash(header), | 602 QuicFramer::GetPacketEntropyHash(header), |
| 603 queued_retransmittable_frames_.release(), has_ack, has_stop_waiting); | 603 queued_retransmittable_frames_.release(), has_ack, has_stop_waiting, |
| 604 encryption_level_); |
| 604 } | 605 } |
| 605 | 606 |
| 606 SerializedPacket QuicPacketCreator::SerializeFec(char* buffer, | 607 SerializedPacket QuicPacketCreator::SerializeFec(char* buffer, |
| 607 size_t buffer_len) { | 608 size_t buffer_len) { |
| 608 DCHECK_LT(0u, buffer_len); | 609 DCHECK_LT(0u, buffer_len); |
| 609 if (fec_group_.get() == nullptr || fec_group_->NumReceivedPackets() <= 0) { | 610 if (fec_group_.get() == nullptr || fec_group_->NumReceivedPackets() <= 0) { |
| 610 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group."; | 611 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group."; |
| 611 // TODO(jri): Make this a public method of framer? | 612 // TODO(jri): Make this a public method of framer? |
| 612 return NoPacket(); | 613 return NoPacket(); |
| 613 } | 614 } |
| 614 DCHECK_EQ(0u, queued_frames_.size()); | 615 DCHECK_EQ(0u, queued_frames_.size()); |
| 615 QuicPacketHeader header; | 616 QuicPacketHeader header; |
| 616 FillPacketHeader(fec_group_->FecGroupNumber(), true, &header); | 617 FillPacketHeader(fec_group_->FecGroupNumber(), true, &header); |
| 617 scoped_ptr<QuicPacket> packet( | 618 scoped_ptr<QuicPacket> packet( |
| 618 framer_->BuildFecPacket(header, fec_group_->PayloadParity())); | 619 framer_->BuildFecPacket(header, fec_group_->PayloadParity())); |
| 619 fec_group_.reset(nullptr); | 620 fec_group_.reset(nullptr); |
| 620 packet_size_ = 0; | 621 packet_size_ = 0; |
| 621 LOG_IF(DFATAL, packet == nullptr) | 622 LOG_IF(DFATAL, packet == nullptr) |
| 622 << "Failed to serialize fec packet for group:" | 623 << "Failed to serialize fec packet for group:" |
| 623 << fec_group_->FecGroupNumber(); | 624 << fec_group_->FecGroupNumber(); |
| 624 DCHECK_GE(max_packet_length_, packet->length()); | 625 DCHECK_GE(max_packet_length_, packet->length()); |
| 625 // Immediately encrypt the packet, to ensure we don't encrypt the same packet | 626 // Immediately encrypt the packet, to ensure we don't encrypt the same packet |
| 626 // packet number multiple times. | 627 // packet number multiple times. |
| 627 size_t encrypted_length = framer_->EncryptPayload( | 628 size_t encrypted_length = framer_->EncryptPayload( |
| 628 encryption_level_, packet_number_, *packet, buffer, buffer_len); | 629 encryption_level_, packet_number_, *packet, buffer, buffer_len); |
| 629 if (encrypted_length == 0) { | 630 if (encrypted_length == 0) { |
| 630 LOG(DFATAL) << "Failed to encrypt packet number " << packet_number_; | 631 LOG(DFATAL) << "Failed to encrypt packet number " << packet_number_; |
| 631 return NoPacket(); | 632 return NoPacket(); |
| 632 } | 633 } |
| 633 SerializedPacket serialized( | 634 SerializedPacket serialized(header.packet_number, |
| 634 header.packet_number, header.public_header.packet_number_length, buffer, | 635 header.public_header.packet_number_length, buffer, |
| 635 encrypted_length, /* owns_buffer */ false, | 636 encrypted_length, /* owns_buffer */ false, |
| 636 QuicFramer::GetPacketEntropyHash(header), nullptr, false, false); | 637 QuicFramer::GetPacketEntropyHash(header), nullptr, |
| 638 false, false, encryption_level_); |
| 637 serialized.is_fec_packet = true; | 639 serialized.is_fec_packet = true; |
| 638 return serialized; | 640 return serialized; |
| 639 } | 641 } |
| 640 | 642 |
| 641 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket( | 643 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket( |
| 642 const QuicVersionVector& supported_versions) { | 644 const QuicVersionVector& supported_versions) { |
| 643 DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective()); | 645 DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective()); |
| 644 QuicEncryptedPacket* encrypted = QuicFramer::BuildVersionNegotiationPacket( | 646 QuicEncryptedPacket* encrypted = QuicFramer::BuildVersionNegotiationPacket( |
| 645 connection_id_, supported_versions); | 647 connection_id_, supported_versions); |
| 646 DCHECK(encrypted); | 648 DCHECK(encrypted); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 QuicPacketCount max_packets_in_flight) { | 783 QuicPacketCount max_packets_in_flight) { |
| 782 set_max_packets_per_fec_group(static_cast<size_t>( | 784 set_max_packets_per_fec_group(static_cast<size_t>( |
| 783 kMaxPacketsInFlightMultiplierForFecGroupSize * max_packets_in_flight)); | 785 kMaxPacketsInFlightMultiplierForFecGroupSize * max_packets_in_flight)); |
| 784 } | 786 } |
| 785 | 787 |
| 786 void QuicPacketCreator::OnRttChange(QuicTime::Delta rtt) { | 788 void QuicPacketCreator::OnRttChange(QuicTime::Delta rtt) { |
| 787 fec_timeout_ = rtt.Multiply(rtt_multiplier_for_fec_timeout_); | 789 fec_timeout_ = rtt.Multiply(rtt_multiplier_for_fec_timeout_); |
| 788 } | 790 } |
| 789 | 791 |
| 790 } // namespace net | 792 } // namespace net |
| OLD | NEW |