| 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 <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 frame.stream_frame->frame_length)); | 175 frame.stream_frame->frame_length)); |
| 176 EXPECT_EQ(offset, frame.stream_frame->offset); | 176 EXPECT_EQ(offset, frame.stream_frame->offset); |
| 177 EXPECT_EQ(fin, frame.stream_frame->fin); | 177 EXPECT_EQ(fin, frame.stream_frame->fin); |
| 178 } | 178 } |
| 179 | 179 |
| 180 // Returns the number of bytes consumed by the header of packet, including | 180 // Returns the number of bytes consumed by the header of packet, including |
| 181 // the version. | 181 // the version. |
| 182 size_t GetPacketHeaderOverhead() { | 182 size_t GetPacketHeaderOverhead() { |
| 183 return GetPacketHeaderSize( | 183 return GetPacketHeaderSize( |
| 184 creator_.connection_id_length(), kIncludeVersion, !kIncludePathId, | 184 creator_.connection_id_length(), kIncludeVersion, !kIncludePathId, |
| 185 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), | 185 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 186 NOT_IN_FEC_GROUP); | |
| 187 } | 186 } |
| 188 | 187 |
| 189 // Returns the number of bytes of overhead that will be added to a packet | 188 // Returns the number of bytes of overhead that will be added to a packet |
| 190 // of maximum length. | 189 // of maximum length. |
| 191 size_t GetEncryptionOverhead() { | 190 size_t GetEncryptionOverhead() { |
| 192 return creator_.max_packet_length() - | 191 return creator_.max_packet_length() - |
| 193 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 192 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 194 } | 193 } |
| 195 | 194 |
| 196 // Returns the number of bytes consumed by the non-data fields of a stream | 195 // Returns the number of bytes consumed by the non-data fields of a stream |
| 197 // frame, assuming it is the last frame in the packet | 196 // frame, assuming it is the last frame in the packet |
| 198 size_t GetStreamFrameOverhead() { | 197 size_t GetStreamFrameOverhead() { |
| 199 return QuicFramer::GetMinStreamFrameSize(kClientDataStreamId1, kOffset, | 198 return QuicFramer::GetMinStreamFrameSize(kClientDataStreamId1, kOffset, |
| 200 true, NOT_IN_FEC_GROUP); | 199 true); |
| 201 } | 200 } |
| 202 | 201 |
| 203 QuicIOVector MakeIOVector(StringPiece s) { | 202 QuicIOVector MakeIOVector(StringPiece s) { |
| 204 return ::net::MakeIOVector(s, &iov_); | 203 return ::net::MakeIOVector(s, &iov_); |
| 205 } | 204 } |
| 206 | 205 |
| 207 PendingRetransmission CreateRetransmission( | 206 PendingRetransmission CreateRetransmission( |
| 208 const QuicFrames& retransmittable_frames, | 207 const QuicFrames& retransmittable_frames, |
| 209 bool has_crypto_handshake, | 208 bool has_crypto_handshake, |
| 210 bool needs_padding, | 209 bool needs_padding, |
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 811 if (!GetParam().version_serialization) { | 810 if (!GetParam().version_serialization) { |
| 812 creator_.StopSendingVersion(); | 811 creator_.StopSendingVersion(); |
| 813 } | 812 } |
| 814 // A string larger than fits into a frame. | 813 // A string larger than fits into a frame. |
| 815 size_t payload_length; | 814 size_t payload_length; |
| 816 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( | 815 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( |
| 817 client_framer_.version(), | 816 client_framer_.version(), |
| 818 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 817 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 819 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 818 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
| 820 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, | 819 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, |
| 821 NOT_IN_FEC_GROUP, &payload_length)); | 820 &payload_length)); |
| 822 QuicFrame frame; | 821 QuicFrame frame; |
| 823 const string too_long_payload(payload_length * 2, 'a'); | 822 const string too_long_payload(payload_length * 2, 'a'); |
| 824 QuicIOVector io_vector(MakeIOVector(too_long_payload)); | 823 QuicIOVector io_vector(MakeIOVector(too_long_payload)); |
| 825 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 824 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 826 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 825 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 827 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); | 826 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); |
| 828 ASSERT_TRUE(frame.stream_frame); | 827 ASSERT_TRUE(frame.stream_frame); |
| 829 size_t consumed = frame.stream_frame->frame_length; | 828 size_t consumed = frame.stream_frame->frame_length; |
| 830 EXPECT_EQ(payload_length, consumed); | 829 EXPECT_EQ(payload_length, consumed); |
| 831 const string payload(payload_length, 'a'); | 830 const string payload(payload_length, 'a'); |
| 832 CheckStreamFrame(frame, 1u, payload, 0u, false); | 831 CheckStreamFrame(frame, 1u, payload, 0u, false); |
| 833 creator_.Flush(); | 832 creator_.Flush(); |
| 834 DeleteSerializedPacket(); | 833 DeleteSerializedPacket(); |
| 835 } | 834 } |
| 836 | 835 |
| 837 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { | 836 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { |
| 838 if (!GetParam().version_serialization) { | 837 if (!GetParam().version_serialization) { |
| 839 creator_.StopSendingVersion(); | 838 creator_.StopSendingVersion(); |
| 840 } | 839 } |
| 841 const size_t max_plaintext_size = | 840 const size_t max_plaintext_size = |
| 842 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 841 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 843 EXPECT_FALSE(creator_.HasPendingFrames()); | 842 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 844 EXPECT_EQ(max_plaintext_size - | 843 EXPECT_EQ(max_plaintext_size - |
| 845 GetPacketHeaderSize( | 844 GetPacketHeaderSize( |
| 846 creator_.connection_id_length(), | 845 creator_.connection_id_length(), |
| 847 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 846 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 848 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), | 847 QuicPacketCreatorPeer::SendPathIdInPacket(&creator_), |
| 849 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 848 PACKET_1BYTE_PACKET_NUMBER), |
| 850 creator_.BytesFree()); | 849 creator_.BytesFree()); |
| 851 | 850 |
| 852 // Add a variety of frame types and then a padding frame. | 851 // Add a variety of frame types and then a padding frame. |
| 853 QuicAckFrame ack_frame(MakeAckFrame(0u)); | 852 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
| 854 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 853 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 855 EXPECT_TRUE(creator_.HasPendingFrames()); | 854 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 856 | 855 |
| 857 QuicFrame frame; | 856 QuicFrame frame; |
| 858 QuicIOVector io_vector(MakeIOVector("test")); | 857 QuicIOVector io_vector(MakeIOVector("test")); |
| 859 ASSERT_TRUE( | 858 ASSERT_TRUE( |
| (...skipping 20 matching lines...) Expand all Loading... |
| 880 ASSERT_EQ(1u, retransmittable.size()); | 879 ASSERT_EQ(1u, retransmittable.size()); |
| 881 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); | 880 EXPECT_EQ(STREAM_FRAME, retransmittable[0].type); |
| 882 ASSERT_TRUE(retransmittable[0].stream_frame); | 881 ASSERT_TRUE(retransmittable[0].stream_frame); |
| 883 DeleteSerializedPacket(); | 882 DeleteSerializedPacket(); |
| 884 | 883 |
| 885 EXPECT_FALSE(creator_.HasPendingFrames()); | 884 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 886 EXPECT_EQ(max_plaintext_size - | 885 EXPECT_EQ(max_plaintext_size - |
| 887 GetPacketHeaderSize( | 886 GetPacketHeaderSize( |
| 888 creator_.connection_id_length(), | 887 creator_.connection_id_length(), |
| 889 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 888 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 890 /*include_path_id=*/false, PACKET_1BYTE_PACKET_NUMBER, | 889 /*include_path_id=*/false, PACKET_1BYTE_PACKET_NUMBER), |
| 891 NOT_IN_FEC_GROUP), | |
| 892 creator_.BytesFree()); | 890 creator_.BytesFree()); |
| 893 } | 891 } |
| 894 | 892 |
| 895 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { | 893 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithLargePacketSize) { |
| 896 if (!GetParam().version_serialization) { | 894 if (!GetParam().version_serialization) { |
| 897 creator_.StopSendingVersion(); | 895 creator_.StopSendingVersion(); |
| 898 } | 896 } |
| 899 creator_.SetMaxPacketLength(kMaxPacketSize); | 897 creator_.SetMaxPacketLength(kMaxPacketSize); |
| 900 | 898 |
| 901 // Serialized length of ack frame with 2000 nack ranges should be limited by | 899 // Serialized length of ack frame with 2000 nack ranges should be limited by |
| 902 // the number of nack ranges that can be fit in an ack frame. | 900 // the number of nack ranges that can be fit in an ack frame. |
| 903 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 901 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
| 904 size_t frame_len = client_framer_.GetSerializedFrameLength( | 902 size_t frame_len = client_framer_.GetSerializedFrameLength( |
| 905 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP, | 903 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, |
| 906 PACKET_1BYTE_PACKET_NUMBER); | 904 PACKET_1BYTE_PACKET_NUMBER); |
| 907 EXPECT_GT(creator_.BytesFree(), frame_len); | 905 EXPECT_GT(creator_.BytesFree(), frame_len); |
| 908 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 906 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
| 909 | 907 |
| 910 // Add ack frame to creator. | 908 // Add ack frame to creator. |
| 911 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 909 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 912 EXPECT_TRUE(creator_.HasPendingFrames()); | 910 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 913 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 911 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
| 914 EXPECT_LT(0u, creator_.BytesFree()); | 912 EXPECT_LT(0u, creator_.BytesFree()); |
| 915 | 913 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 943 creator_.SetMaxPacketLength(500u); | 941 creator_.SetMaxPacketLength(500u); |
| 944 | 942 |
| 945 const size_t max_plaintext_size = | 943 const size_t max_plaintext_size = |
| 946 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 944 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 947 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); | 945 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); |
| 948 | 946 |
| 949 // Serialized length of ack frame with 2000 nack ranges should be limited by | 947 // Serialized length of ack frame with 2000 nack ranges should be limited by |
| 950 // the packet size. | 948 // the packet size. |
| 951 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 949 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
| 952 size_t frame_len = client_framer_.GetSerializedFrameLength( | 950 size_t frame_len = client_framer_.GetSerializedFrameLength( |
| 953 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP, | 951 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, |
| 954 PACKET_1BYTE_PACKET_NUMBER); | 952 PACKET_1BYTE_PACKET_NUMBER); |
| 955 EXPECT_EQ(creator_.BytesFree(), frame_len); | 953 EXPECT_EQ(creator_.BytesFree(), frame_len); |
| 956 | 954 |
| 957 // Add ack frame to creator. | 955 // Add ack frame to creator. |
| 958 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 956 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 959 EXPECT_TRUE(creator_.HasPendingFrames()); | 957 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 960 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), | 958 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), |
| 961 creator_.PacketSize()); | 959 creator_.PacketSize()); |
| 962 EXPECT_EQ(0u, creator_.BytesFree()); | 960 EXPECT_EQ(0u, creator_.BytesFree()); |
| 963 | 961 |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1141 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _)); | 1139 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _)); |
| 1142 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, | 1140 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, |
| 1143 StringPiece()); | 1141 StringPiece()); |
| 1144 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), | 1142 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), |
| 1145 "Cannot send stream data without encryption."); | 1143 "Cannot send stream data without encryption."); |
| 1146 } | 1144 } |
| 1147 | 1145 |
| 1148 } // namespace | 1146 } // namespace |
| 1149 } // namespace test | 1147 } // namespace test |
| 1150 } // namespace net | 1148 } // namespace net |
| OLD | NEW |