| 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/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/crypto/null_encrypter.h" | 10 #include "net/quic/crypto/null_encrypter.h" |
| (...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { | 532 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { |
| 533 // If the original packet number length, the current packet number | 533 // If the original packet number length, the current packet number |
| 534 // length, and the configured send packet number length are different, the | 534 // length, and the configured send packet number length are different, the |
| 535 // retransmit must sent with the original length and the others do not change. | 535 // retransmit must sent with the original length and the others do not change. |
| 536 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | 536 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, |
| 537 PACKET_4BYTE_PACKET_NUMBER); | 537 PACKET_4BYTE_PACKET_NUMBER); |
| 538 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, | 538 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, |
| 539 PACKET_2BYTE_PACKET_NUMBER); | 539 PACKET_2BYTE_PACKET_NUMBER); |
| 540 QuicStreamFrame* stream_frame = | 540 QuicStreamFrame* stream_frame = |
| 541 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); | 541 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); |
| 542 RetransmittableFrames frames(ENCRYPTION_NONE); | 542 RetransmittableFrames frames; |
| 543 frames.AddFrame(QuicFrame(stream_frame)); | 543 frames.AddFrame(QuicFrame(stream_frame)); |
| 544 char buffer[kMaxPacketSize]; | 544 char buffer[kMaxPacketSize]; |
| 545 SerializedPacket serialized = creator_.ReserializeAllFrames( | 545 SerializedPacket serialized = creator_.ReserializeAllFrames( |
| 546 frames, PACKET_1BYTE_PACKET_NUMBER, buffer, kMaxPacketSize); | 546 frames, ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER, buffer, |
| 547 kMaxPacketSize); |
| 547 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | 548 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 548 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 549 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 549 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 550 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 550 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 551 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 551 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); | 552 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); |
| 552 | 553 |
| 553 { | 554 { |
| 554 InSequence s; | 555 InSequence s; |
| 555 EXPECT_CALL(framer_visitor_, OnPacket()); | 556 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 556 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 557 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 557 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 558 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 558 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 559 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 559 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 560 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 560 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 561 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 561 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 562 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 562 } | 563 } |
| 563 ProcessPacket(serialized.packet); | 564 ProcessPacket(serialized.packet); |
| 564 delete serialized.packet; | 565 delete serialized.packet; |
| 565 } | 566 } |
| 566 | 567 |
| 567 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { | 568 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { |
| 568 QuicFrame frame; | 569 QuicFrame frame; |
| 569 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); | 570 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); |
| 570 UniqueStreamBuffer stream_buffer; | 571 UniqueStreamBuffer stream_buffer; |
| 571 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, | 572 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, |
| 572 io_vector, 0u, 0u, false, &frame, | 573 io_vector, 0u, 0u, false, &frame); |
| 573 &stream_buffer); | 574 RetransmittableFrames frames; |
| 574 RetransmittableFrames frames(ENCRYPTION_NONE); | |
| 575 frames.AddFrame(frame); | 575 frames.AddFrame(frame); |
| 576 frames.set_needs_padding(true); | 576 frames.set_needs_padding(true); |
| 577 char buffer[kMaxPacketSize]; | 577 char buffer[kMaxPacketSize]; |
| 578 SerializedPacket serialized = creator_.ReserializeAllFrames( | 578 SerializedPacket serialized = creator_.ReserializeAllFrames( |
| 579 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, | 579 frames, ENCRYPTION_NONE, |
| 580 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, |
| 580 kMaxPacketSize); | 581 kMaxPacketSize); |
| 581 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); | 582 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); |
| 582 delete serialized.packet; | 583 delete serialized.packet; |
| 583 } | 584 } |
| 584 | 585 |
| 585 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { | 586 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { |
| 586 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 587 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 587 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 588 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 588 size_t capacity = kDefaultMaxPacketSize - overhead; | 589 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 589 for (int delta = -5; delta <= 0; ++delta) { | 590 for (int delta = -5; delta <= 0; ++delta) { |
| 590 string data(capacity + delta, 'A'); | 591 string data(capacity + delta, 'A'); |
| 591 size_t bytes_free = 0 - delta; | 592 size_t bytes_free = 0 - delta; |
| 592 | 593 |
| 593 QuicFrame frame; | 594 QuicFrame frame; |
| 594 QuicIOVector io_vector(MakeIOVector(data)); | 595 QuicIOVector io_vector(MakeIOVector(data)); |
| 595 UniqueStreamBuffer stream_buffer; | 596 UniqueStreamBuffer stream_buffer; |
| 596 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, | 597 QuicPacketCreatorPeer::CreateStreamFrame( |
| 597 io_vector, 0, kOffset, false, | 598 &creator_, kCryptoStreamId, io_vector, 0, kOffset, false, &frame); |
| 598 &frame, &stream_buffer); | 599 RetransmittableFrames frames; |
| 599 RetransmittableFrames frames(ENCRYPTION_NONE); | |
| 600 frames.AddFrame(frame); | 600 frames.AddFrame(frame); |
| 601 frames.set_needs_padding(true); | 601 frames.set_needs_padding(true); |
| 602 char buffer[kMaxPacketSize]; | 602 char buffer[kMaxPacketSize]; |
| 603 SerializedPacket serialized = creator_.ReserializeAllFrames( | 603 SerializedPacket serialized = creator_.ReserializeAllFrames( |
| 604 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), | 604 frames, ENCRYPTION_NONE, |
| 605 buffer, kMaxPacketSize); | 605 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, |
| 606 kMaxPacketSize); |
| 606 | 607 |
| 607 // If there is not enough space in the packet to fit a padding frame | 608 // If there is not enough space in the packet to fit a padding frame |
| 608 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 609 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
| 609 // will not be padded. | 610 // will not be padded. |
| 610 if (bytes_free < 3) { | 611 if (bytes_free < 3) { |
| 611 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, | 612 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
| 612 serialized.packet->length()); | 613 serialized.packet->length()); |
| 613 } else { | 614 } else { |
| 614 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); | 615 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); |
| 615 } | 616 } |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 789 GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 789 size_t capacity = kDefaultMaxPacketSize - overhead; | 790 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 790 // Now, test various sizes around this size. | 791 // Now, test various sizes around this size. |
| 791 for (int delta = -5; delta <= 5; ++delta) { | 792 for (int delta = -5; delta <= 5; ++delta) { |
| 792 string data(capacity + delta, 'A'); | 793 string data(capacity + delta, 'A'); |
| 793 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 794 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 794 QuicFrame frame; | 795 QuicFrame frame; |
| 795 QuicIOVector io_vector(MakeIOVector(data)); | 796 QuicIOVector io_vector(MakeIOVector(data)); |
| 796 UniqueStreamBuffer stream_buffer; | 797 UniqueStreamBuffer stream_buffer; |
| 797 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame( | 798 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame( |
| 798 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame, | 799 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame); |
| 799 &stream_buffer); | |
| 800 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 800 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
| 801 | 801 |
| 802 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 802 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 803 // BytesFree() returns bytes available for the next frame, which will | 803 // BytesFree() returns bytes available for the next frame, which will |
| 804 // be two bytes smaller since the stream frame would need to be grown. | 804 // be two bytes smaller since the stream frame would need to be grown. |
| 805 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); | 805 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); |
| 806 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; | 806 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; |
| 807 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; | 807 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; |
| 808 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 808 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 809 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 809 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 822 GetStreamFrameOverhead(IN_FEC_GROUP); | 822 GetStreamFrameOverhead(IN_FEC_GROUP); |
| 823 size_t capacity = kDefaultMaxPacketSize - overhead; | 823 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 824 // Now, test various sizes around this size. | 824 // Now, test various sizes around this size. |
| 825 for (int delta = -5; delta <= 5; ++delta) { | 825 for (int delta = -5; delta <= 5; ++delta) { |
| 826 string data(capacity + delta, 'A'); | 826 string data(capacity + delta, 'A'); |
| 827 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 827 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 828 QuicFrame frame; | 828 QuicFrame frame; |
| 829 QuicIOVector io_vector(MakeIOVector(data)); | 829 QuicIOVector io_vector(MakeIOVector(data)); |
| 830 UniqueStreamBuffer stream_buffer; | 830 UniqueStreamBuffer stream_buffer; |
| 831 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame( | 831 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame( |
| 832 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame, | 832 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame); |
| 833 &stream_buffer); | |
| 834 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 833 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
| 835 | 834 |
| 836 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 835 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 837 // BytesFree() returns bytes available for the next frame. Since stream | 836 // BytesFree() returns bytes available for the next frame. Since stream |
| 838 // frame does not grow for FEC protected packets, this should be the same | 837 // frame does not grow for FEC protected packets, this should be the same |
| 839 // as bytes_free (bound by 0). | 838 // as bytes_free (bound by 0). |
| 840 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); | 839 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); |
| 841 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; | 840 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; |
| 842 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; | 841 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; |
| 843 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 842 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| (...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1295 creator_.set_fec_send_policy(FEC_ALARM_TRIGGER); | 1294 creator_.set_fec_send_policy(FEC_ALARM_TRIGGER); |
| 1296 creator_.set_should_fec_protect(true); | 1295 creator_.set_should_fec_protect(true); |
| 1297 creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true, | 1296 creator_.MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/true, |
| 1298 /*is_fec_timeout=*/false); | 1297 /*is_fec_timeout=*/false); |
| 1299 EXPECT_FALSE(creator_.IsFecGroupOpen()); | 1298 EXPECT_FALSE(creator_.IsFecGroupOpen()); |
| 1300 } | 1299 } |
| 1301 | 1300 |
| 1302 } // namespace | 1301 } // namespace |
| 1303 } // namespace test | 1302 } // namespace test |
| 1304 } // namespace net | 1303 } // namespace net |
| OLD | NEW |