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/core/quic_connection.h" | 5 #include "net/quic/core/quic_connection.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <memory> | 8 #include <memory> |
9 #include <ostream> | 9 #include <ostream> |
10 #include <utility> | 10 #include <utility> |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 framer_(SupportedVersions(version()), | 683 framer_(SupportedVersions(version()), |
684 QuicTime::Zero(), | 684 QuicTime::Zero(), |
685 Perspective::IS_CLIENT), | 685 Perspective::IS_CLIENT), |
686 send_algorithm_(new StrictMock<MockSendAlgorithm>), | 686 send_algorithm_(new StrictMock<MockSendAlgorithm>), |
687 loss_algorithm_(new MockLossAlgorithm()), | 687 loss_algorithm_(new MockLossAlgorithm()), |
688 helper_(new TestConnectionHelper(&clock_, &random_generator_)), | 688 helper_(new TestConnectionHelper(&clock_, &random_generator_)), |
689 alarm_factory_(new TestAlarmFactory()), | 689 alarm_factory_(new TestAlarmFactory()), |
690 peer_framer_(SupportedVersions(version()), | 690 peer_framer_(SupportedVersions(version()), |
691 QuicTime::Zero(), | 691 QuicTime::Zero(), |
692 Perspective::IS_SERVER), | 692 Perspective::IS_SERVER), |
693 peer_creator_(connection_id_, | 693 peer_creator_(GetPeerInMemoryConnectionId(connection_id_), |
694 &peer_framer_, | 694 &peer_framer_, |
695 &buffer_allocator_, | 695 &buffer_allocator_, |
696 /*delegate=*/nullptr), | 696 /*delegate=*/nullptr), |
697 writer_(new TestPacketWriter(version(), &clock_)), | 697 writer_(new TestPacketWriter(version(), &clock_)), |
698 connection_(connection_id_, | 698 connection_(connection_id_, |
699 kPeerAddress, | 699 kPeerAddress, |
700 helper_.get(), | 700 helper_.get(), |
701 alarm_factory_.get(), | 701 alarm_factory_.get(), |
702 writer_.get(), | 702 writer_.get(), |
703 Perspective::IS_CLIENT, | 703 Perspective::IS_CLIENT, |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 | 825 |
826 connection_.ProcessUdpPacket( | 826 connection_.ProcessUdpPacket( |
827 kSelfAddress, kPeerAddress, | 827 kSelfAddress, kPeerAddress, |
828 QuicReceivedPacket(encrypted_buffer, encrypted_length, clock_.Now())); | 828 QuicReceivedPacket(encrypted_buffer, encrypted_length, clock_.Now())); |
829 } | 829 } |
830 | 830 |
831 size_t ProcessFramePacketAtLevel(QuicPacketNumber number, | 831 size_t ProcessFramePacketAtLevel(QuicPacketNumber number, |
832 QuicFrame frame, | 832 QuicFrame frame, |
833 EncryptionLevel level) { | 833 EncryptionLevel level) { |
834 QuicPacketHeader header; | 834 QuicPacketHeader header; |
835 header.public_header.connection_id = connection_id_; | 835 header.public_header.connection_id = |
| 836 GetPeerInMemoryConnectionId(connection_id_); |
836 header.public_header.packet_number_length = packet_number_length_; | 837 header.public_header.packet_number_length = packet_number_length_; |
837 header.public_header.connection_id_length = connection_id_length_; | 838 header.public_header.connection_id_length = connection_id_length_; |
838 header.public_header.multipath_flag = false; | 839 header.public_header.multipath_flag = false; |
839 header.packet_number = number; | 840 header.packet_number = number; |
840 QuicFrames frames; | 841 QuicFrames frames; |
841 frames.push_back(frame); | 842 frames.push_back(frame); |
842 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 843 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
843 | 844 |
844 char buffer[kMaxPacketSize]; | 845 char buffer[kMaxPacketSize]; |
845 size_t encrypted_length = | 846 size_t encrypted_length = |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 | 936 |
936 QuicPacket* ConstructPacket(QuicPacketHeader header, QuicFrames frames) { | 937 QuicPacket* ConstructPacket(QuicPacketHeader header, QuicFrames frames) { |
937 QuicPacket* packet = BuildUnsizedDataPacket(&peer_framer_, header, frames); | 938 QuicPacket* packet = BuildUnsizedDataPacket(&peer_framer_, header, frames); |
938 EXPECT_NE(nullptr, packet); | 939 EXPECT_NE(nullptr, packet); |
939 return packet; | 940 return packet; |
940 } | 941 } |
941 | 942 |
942 QuicPacket* ConstructDataPacket(QuicPacketNumber number, | 943 QuicPacket* ConstructDataPacket(QuicPacketNumber number, |
943 bool has_stop_waiting) { | 944 bool has_stop_waiting) { |
944 QuicPacketHeader header; | 945 QuicPacketHeader header; |
945 header.public_header.connection_id = connection_id_; | 946 // Set connection_id to peer's in memory representation as this data packet |
| 947 // is created by peer_framer. |
| 948 header.public_header.connection_id = |
| 949 GetPeerInMemoryConnectionId(connection_id_); |
946 header.public_header.packet_number_length = packet_number_length_; | 950 header.public_header.packet_number_length = packet_number_length_; |
947 header.public_header.connection_id_length = connection_id_length_; | 951 header.public_header.connection_id_length = connection_id_length_; |
948 header.public_header.multipath_flag = false; | 952 header.public_header.multipath_flag = false; |
949 header.packet_number = number; | 953 header.packet_number = number; |
950 | 954 |
951 QuicFrames frames; | 955 QuicFrames frames; |
952 frames.push_back(QuicFrame(&frame1_)); | 956 frames.push_back(QuicFrame(&frame1_)); |
953 if (has_stop_waiting) { | 957 if (has_stop_waiting) { |
954 frames.push_back(QuicFrame(&stop_waiting_)); | 958 frames.push_back(QuicFrame(&stop_waiting_)); |
955 } | 959 } |
956 return ConstructPacket(header, frames); | 960 return ConstructPacket(header, frames); |
957 } | 961 } |
958 | 962 |
959 QuicPacket* ConstructClosePacket(QuicPacketNumber number) { | 963 QuicPacket* ConstructClosePacket(QuicPacketNumber number) { |
960 QuicPacketHeader header; | 964 QuicPacketHeader header; |
961 header.public_header.connection_id = connection_id_; | 965 // Set connection_id to peer's in memory representation as this connection |
| 966 // close packet is created by peer_framer. |
| 967 header.public_header.connection_id = |
| 968 GetPeerInMemoryConnectionId(connection_id_); |
962 header.packet_number = number; | 969 header.packet_number = number; |
963 | 970 |
964 QuicConnectionCloseFrame qccf; | 971 QuicConnectionCloseFrame qccf; |
965 qccf.error_code = QUIC_PEER_GOING_AWAY; | 972 qccf.error_code = QUIC_PEER_GOING_AWAY; |
966 | 973 |
967 QuicFrames frames; | 974 QuicFrames frames; |
968 frames.push_back(QuicFrame(&qccf)); | 975 frames.push_back(QuicFrame(&qccf)); |
969 return ConstructPacket(header, frames); | 976 return ConstructPacket(header, frames); |
970 } | 977 } |
971 | 978 |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1192 EXPECT_EQ(1000u, connection.max_packet_length()); | 1199 EXPECT_EQ(1000u, connection.max_packet_length()); |
1193 } | 1200 } |
1194 | 1201 |
1195 TEST_P(QuicConnectionTest, IncreaseServerMaxPacketSize) { | 1202 TEST_P(QuicConnectionTest, IncreaseServerMaxPacketSize) { |
1196 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 1203 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
1197 | 1204 |
1198 set_perspective(Perspective::IS_SERVER); | 1205 set_perspective(Perspective::IS_SERVER); |
1199 connection_.SetMaxPacketLength(1000); | 1206 connection_.SetMaxPacketLength(1000); |
1200 | 1207 |
1201 QuicPacketHeader header; | 1208 QuicPacketHeader header; |
1202 header.public_header.connection_id = connection_id_; | 1209 header.public_header.connection_id = |
| 1210 GetPeerInMemoryConnectionId(connection_id_); |
1203 header.public_header.version_flag = true; | 1211 header.public_header.version_flag = true; |
1204 header.packet_number = 1; | 1212 header.packet_number = 1; |
1205 | 1213 |
1206 QuicFrames frames; | 1214 QuicFrames frames; |
1207 QuicPaddingFrame padding; | 1215 QuicPaddingFrame padding; |
1208 frames.push_back(QuicFrame(&frame1_)); | 1216 frames.push_back(QuicFrame(&frame1_)); |
1209 frames.push_back(QuicFrame(padding)); | 1217 frames.push_back(QuicFrame(padding)); |
1210 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 1218 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
1211 char buffer[kMaxPacketSize]; | 1219 char buffer[kMaxPacketSize]; |
1212 size_t encrypted_length = peer_framer_.EncryptPayload( | 1220 size_t encrypted_length = peer_framer_.EncryptPayload( |
(...skipping 12 matching lines...) Expand all Loading... |
1225 TEST_P(QuicConnectionTest, IncreaseServerMaxPacketSizeWhileWriterLimited) { | 1233 TEST_P(QuicConnectionTest, IncreaseServerMaxPacketSizeWhileWriterLimited) { |
1226 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 1234 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
1227 | 1235 |
1228 const QuicByteCount lower_max_packet_size = 1240; | 1236 const QuicByteCount lower_max_packet_size = 1240; |
1229 writer_->set_max_packet_size(lower_max_packet_size); | 1237 writer_->set_max_packet_size(lower_max_packet_size); |
1230 set_perspective(Perspective::IS_SERVER); | 1238 set_perspective(Perspective::IS_SERVER); |
1231 connection_.SetMaxPacketLength(1000); | 1239 connection_.SetMaxPacketLength(1000); |
1232 EXPECT_EQ(1000u, connection_.max_packet_length()); | 1240 EXPECT_EQ(1000u, connection_.max_packet_length()); |
1233 | 1241 |
1234 QuicPacketHeader header; | 1242 QuicPacketHeader header; |
1235 header.public_header.connection_id = connection_id_; | 1243 header.public_header.connection_id = |
| 1244 GetPeerInMemoryConnectionId(connection_id_); |
1236 header.public_header.version_flag = true; | 1245 header.public_header.version_flag = true; |
1237 header.packet_number = 1; | 1246 header.packet_number = 1; |
1238 | 1247 |
1239 QuicFrames frames; | 1248 QuicFrames frames; |
1240 QuicPaddingFrame padding; | 1249 QuicPaddingFrame padding; |
1241 frames.push_back(QuicFrame(&frame1_)); | 1250 frames.push_back(QuicFrame(&frame1_)); |
1242 frames.push_back(QuicFrame(padding)); | 1251 frames.push_back(QuicFrame(padding)); |
1243 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 1252 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
1244 char buffer[kMaxPacketSize]; | 1253 char buffer[kMaxPacketSize]; |
1245 size_t encrypted_length = peer_framer_.EncryptPayload( | 1254 size_t encrypted_length = peer_framer_.EncryptPayload( |
(...skipping 3070 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4316 EXPECT_FALSE(connection_.connected()); | 4325 EXPECT_FALSE(connection_.connected()); |
4317 EXPECT_FALSE(connection_.CanWriteStreamData()); | 4326 EXPECT_FALSE(connection_.CanWriteStreamData()); |
4318 QuicPacket* packet = ConstructDataPacket(1, !kHasStopWaiting); | 4327 QuicPacket* packet = ConstructDataPacket(1, !kHasStopWaiting); |
4319 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0); | 4328 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 1, _, _)).Times(0); |
4320 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, HAS_RETRANSMITTABLE_DATA, | 4329 connection_.SendPacket(ENCRYPTION_NONE, 1, packet, HAS_RETRANSMITTABLE_DATA, |
4321 false, false); | 4330 false, false); |
4322 } | 4331 } |
4323 | 4332 |
4324 TEST_P(QuicConnectionTest, PublicReset) { | 4333 TEST_P(QuicConnectionTest, PublicReset) { |
4325 QuicPublicResetPacket header; | 4334 QuicPublicResetPacket header; |
4326 header.public_header.connection_id = connection_id_; | 4335 // Public reset packet in only built by server. |
| 4336 header.public_header.connection_id = |
| 4337 GetPeerInMemoryConnectionId(connection_id_); |
4327 header.public_header.reset_flag = true; | 4338 header.public_header.reset_flag = true; |
4328 header.public_header.version_flag = false; | 4339 header.public_header.version_flag = false; |
4329 header.rejected_packet_number = 10101; | 4340 header.rejected_packet_number = 10101; |
4330 std::unique_ptr<QuicEncryptedPacket> packet( | 4341 std::unique_ptr<QuicEncryptedPacket> packet( |
4331 framer_.BuildPublicResetPacket(header)); | 4342 framer_.BuildPublicResetPacket(header)); |
4332 std::unique_ptr<QuicReceivedPacket> received( | 4343 std::unique_ptr<QuicReceivedPacket> received( |
4333 ConstructReceivedPacket(*packet, QuicTime::Zero())); | 4344 ConstructReceivedPacket(*packet, QuicTime::Zero())); |
4334 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, _, | 4345 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PUBLIC_RESET, _, |
4335 ConnectionCloseSource::FROM_PEER)); | 4346 ConnectionCloseSource::FROM_PEER)); |
4336 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); | 4347 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4383 ProcessStopWaitingPacket(&frame); | 4394 ProcessStopWaitingPacket(&frame); |
4384 EXPECT_FALSE(outgoing_ack()->packets.Empty()); | 4395 EXPECT_FALSE(outgoing_ack()->packets.Empty()); |
4385 } | 4396 } |
4386 | 4397 |
4387 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) { | 4398 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacket) { |
4388 connection_.SetSupportedVersions(AllSupportedVersions()); | 4399 connection_.SetSupportedVersions(AllSupportedVersions()); |
4389 set_perspective(Perspective::IS_SERVER); | 4400 set_perspective(Perspective::IS_SERVER); |
4390 peer_framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); | 4401 peer_framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); |
4391 | 4402 |
4392 QuicPacketHeader header; | 4403 QuicPacketHeader header; |
4393 header.public_header.connection_id = connection_id_; | 4404 header.public_header.connection_id = |
| 4405 GetPeerInMemoryConnectionId(connection_id_); |
4394 header.public_header.version_flag = true; | 4406 header.public_header.version_flag = true; |
4395 header.packet_number = 12; | 4407 header.packet_number = 12; |
4396 | 4408 |
4397 QuicFrames frames; | 4409 QuicFrames frames; |
4398 frames.push_back(QuicFrame(&frame1_)); | 4410 frames.push_back(QuicFrame(&frame1_)); |
4399 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 4411 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
4400 char buffer[kMaxPacketSize]; | 4412 char buffer[kMaxPacketSize]; |
4401 size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet, | 4413 size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet, |
4402 buffer, kMaxPacketSize); | 4414 buffer, kMaxPacketSize); |
4403 | 4415 |
(...skipping 14 matching lines...) Expand all Loading... |
4418 writer_->version_negotiation_packet()->versions[i]); | 4430 writer_->version_negotiation_packet()->versions[i]); |
4419 } | 4431 } |
4420 } | 4432 } |
4421 | 4433 |
4422 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) { | 4434 TEST_P(QuicConnectionTest, ServerSendsVersionNegotiationPacketSocketBlocked) { |
4423 connection_.SetSupportedVersions(AllSupportedVersions()); | 4435 connection_.SetSupportedVersions(AllSupportedVersions()); |
4424 set_perspective(Perspective::IS_SERVER); | 4436 set_perspective(Perspective::IS_SERVER); |
4425 peer_framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); | 4437 peer_framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); |
4426 | 4438 |
4427 QuicPacketHeader header; | 4439 QuicPacketHeader header; |
4428 header.public_header.connection_id = connection_id_; | 4440 header.public_header.connection_id = |
| 4441 GetPeerInMemoryConnectionId(connection_id_); |
4429 header.public_header.version_flag = true; | 4442 header.public_header.version_flag = true; |
4430 header.packet_number = 12; | 4443 header.packet_number = 12; |
4431 | 4444 |
4432 QuicFrames frames; | 4445 QuicFrames frames; |
4433 frames.push_back(QuicFrame(&frame1_)); | 4446 frames.push_back(QuicFrame(&frame1_)); |
4434 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 4447 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
4435 char buffer[kMaxPacketSize]; | 4448 char buffer[kMaxPacketSize]; |
4436 size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet, | 4449 size_t encrypted_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet, |
4437 buffer, kMaxPacketSize); | 4450 buffer, kMaxPacketSize); |
4438 | 4451 |
(...skipping 21 matching lines...) Expand all Loading... |
4460 } | 4473 } |
4461 } | 4474 } |
4462 | 4475 |
4463 TEST_P(QuicConnectionTest, | 4476 TEST_P(QuicConnectionTest, |
4464 ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) { | 4477 ServerSendsVersionNegotiationPacketSocketBlockedDataBuffered) { |
4465 connection_.SetSupportedVersions(AllSupportedVersions()); | 4478 connection_.SetSupportedVersions(AllSupportedVersions()); |
4466 set_perspective(Perspective::IS_SERVER); | 4479 set_perspective(Perspective::IS_SERVER); |
4467 peer_framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); | 4480 peer_framer_.set_version_for_tests(QUIC_VERSION_UNSUPPORTED); |
4468 | 4481 |
4469 QuicPacketHeader header; | 4482 QuicPacketHeader header; |
4470 header.public_header.connection_id = connection_id_; | 4483 header.public_header.connection_id = |
| 4484 GetPeerInMemoryConnectionId(connection_id_); |
4471 header.public_header.version_flag = true; | 4485 header.public_header.version_flag = true; |
4472 header.packet_number = 12; | 4486 header.packet_number = 12; |
4473 | 4487 |
4474 QuicFrames frames; | 4488 QuicFrames frames; |
4475 frames.push_back(QuicFrame(&frame1_)); | 4489 frames.push_back(QuicFrame(&frame1_)); |
4476 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 4490 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
4477 char buffer[kMaxPacketSize]; | 4491 char buffer[kMaxPacketSize]; |
4478 size_t encryped_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet, | 4492 size_t encryped_length = framer_.EncryptPayload(ENCRYPTION_NONE, 12, *packet, |
4479 buffer, kMaxPacketSize); | 4493 buffer, kMaxPacketSize); |
4480 | 4494 |
4481 framer_.set_version(version()); | 4495 framer_.set_version(version()); |
4482 set_perspective(Perspective::IS_SERVER); | 4496 set_perspective(Perspective::IS_SERVER); |
4483 BlockOnNextWrite(); | 4497 BlockOnNextWrite(); |
4484 writer_->set_is_write_blocked_data_buffered(true); | 4498 writer_->set_is_write_blocked_data_buffered(true); |
4485 connection_.ProcessUdpPacket( | 4499 connection_.ProcessUdpPacket( |
4486 kSelfAddress, kPeerAddress, | 4500 kSelfAddress, kPeerAddress, |
4487 QuicReceivedPacket(buffer, encryped_length, QuicTime::Zero(), false)); | 4501 QuicReceivedPacket(buffer, encryped_length, QuicTime::Zero(), false)); |
4488 EXPECT_EQ(0u, writer_->last_packet_size()); | 4502 EXPECT_EQ(0u, writer_->last_packet_size()); |
4489 EXPECT_FALSE(connection_.HasQueuedData()); | 4503 EXPECT_FALSE(connection_.HasQueuedData()); |
4490 } | 4504 } |
4491 | 4505 |
4492 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) { | 4506 TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) { |
4493 // Start out with some unsupported version. | 4507 // Start out with some unsupported version. |
4494 QuicConnectionPeer::GetFramer(&connection_) | 4508 QuicConnectionPeer::GetFramer(&connection_) |
4495 ->set_version_for_tests(QUIC_VERSION_UNSUPPORTED); | 4509 ->set_version_for_tests(QUIC_VERSION_UNSUPPORTED); |
4496 | 4510 |
4497 // Send a version negotiation packet. | 4511 // Send a version negotiation packet. |
4498 std::unique_ptr<QuicEncryptedPacket> encrypted( | 4512 std::unique_ptr<QuicEncryptedPacket> encrypted( |
4499 peer_framer_.BuildVersionNegotiationPacket(connection_id_, | 4513 peer_framer_.BuildVersionNegotiationPacket( |
4500 AllSupportedVersions())); | 4514 GetPeerInMemoryConnectionId(connection_id_), AllSupportedVersions())); |
4501 std::unique_ptr<QuicReceivedPacket> received( | 4515 std::unique_ptr<QuicReceivedPacket> received( |
4502 ConstructReceivedPacket(*encrypted, QuicTime::Zero())); | 4516 ConstructReceivedPacket(*encrypted, QuicTime::Zero())); |
4503 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); | 4517 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); |
4504 | 4518 |
4505 // Now force another packet. The connection should transition into | 4519 // Now force another packet. The connection should transition into |
4506 // NEGOTIATED_VERSION state and tell the packet creator to StopSendingVersion. | 4520 // NEGOTIATED_VERSION state and tell the packet creator to StopSendingVersion. |
4507 QuicPacketHeader header; | 4521 QuicPacketHeader header; |
4508 header.public_header.connection_id = connection_id_; | 4522 header.public_header.connection_id = |
| 4523 GetPeerInMemoryConnectionId(connection_id_); |
4509 header.packet_number = 12; | 4524 header.packet_number = 12; |
4510 header.public_header.version_flag = false; | 4525 header.public_header.version_flag = false; |
4511 QuicFrames frames; | 4526 QuicFrames frames; |
4512 frames.push_back(QuicFrame(&frame1_)); | 4527 frames.push_back(QuicFrame(&frame1_)); |
4513 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 4528 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
4514 char buffer[kMaxPacketSize]; | 4529 char buffer[kMaxPacketSize]; |
4515 size_t encrypted_length = peer_framer_.EncryptPayload( | 4530 size_t encrypted_length = peer_framer_.EncryptPayload( |
4516 ENCRYPTION_NONE, 12, *packet, buffer, kMaxPacketSize); | 4531 ENCRYPTION_NONE, 12, *packet, buffer, kMaxPacketSize); |
4517 ASSERT_NE(0u, encrypted_length); | 4532 ASSERT_NE(0u, encrypted_length); |
4518 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); | 4533 EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1); |
4519 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 4534 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
4520 connection_.ProcessUdpPacket( | 4535 connection_.ProcessUdpPacket( |
4521 kSelfAddress, kPeerAddress, | 4536 kSelfAddress, kPeerAddress, |
4522 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); | 4537 QuicReceivedPacket(buffer, encrypted_length, QuicTime::Zero(), false)); |
4523 | 4538 |
4524 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket(creator_)); | 4539 ASSERT_FALSE(QuicPacketCreatorPeer::SendVersionInPacket(creator_)); |
4525 } | 4540 } |
4526 | 4541 |
4527 TEST_P(QuicConnectionTest, BadVersionNegotiation) { | 4542 TEST_P(QuicConnectionTest, BadVersionNegotiation) { |
4528 // Send a version negotiation packet with the version the client started with. | 4543 // Send a version negotiation packet with the version the client started with. |
4529 // It should be rejected. | 4544 // It should be rejected. |
4530 EXPECT_CALL(visitor_, | 4545 EXPECT_CALL(visitor_, |
4531 OnConnectionClosed(QUIC_INVALID_VERSION_NEGOTIATION_PACKET, _, | 4546 OnConnectionClosed(QUIC_INVALID_VERSION_NEGOTIATION_PACKET, _, |
4532 ConnectionCloseSource::FROM_SELF)); | 4547 ConnectionCloseSource::FROM_SELF)); |
4533 std::unique_ptr<QuicEncryptedPacket> encrypted( | 4548 std::unique_ptr<QuicEncryptedPacket> encrypted( |
4534 framer_.BuildVersionNegotiationPacket(connection_id_, | 4549 framer_.BuildVersionNegotiationPacket( |
4535 AllSupportedVersions())); | 4550 GetPeerInMemoryConnectionId(connection_id_), AllSupportedVersions())); |
4536 std::unique_ptr<QuicReceivedPacket> received( | 4551 std::unique_ptr<QuicReceivedPacket> received( |
4537 ConstructReceivedPacket(*encrypted, QuicTime::Zero())); | 4552 ConstructReceivedPacket(*encrypted, QuicTime::Zero())); |
4538 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); | 4553 connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received); |
4539 } | 4554 } |
4540 | 4555 |
4541 TEST_P(QuicConnectionTest, CheckSendStats) { | 4556 TEST_P(QuicConnectionTest, CheckSendStats) { |
4542 connection_.SetMaxTailLossProbes(0); | 4557 connection_.SetMaxTailLossProbes(0); |
4543 | 4558 |
4544 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); | 4559 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); |
4545 connection_.SendStreamDataWithString(3, "first", 0, !kFin, nullptr); | 4560 connection_.SendStreamDataWithString(3, "first", 0, !kFin, nullptr); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4581 EXPECT_EQ(2 * first_packet_size + second_packet_size - kQuicVersionSize, | 4596 EXPECT_EQ(2 * first_packet_size + second_packet_size - kQuicVersionSize, |
4582 stats.bytes_retransmitted); | 4597 stats.bytes_retransmitted); |
4583 EXPECT_EQ(3u, stats.packets_retransmitted); | 4598 EXPECT_EQ(3u, stats.packets_retransmitted); |
4584 EXPECT_EQ(1u, stats.rto_count); | 4599 EXPECT_EQ(1u, stats.rto_count); |
4585 EXPECT_EQ(kDefaultMaxPacketSize, stats.max_packet_size); | 4600 EXPECT_EQ(kDefaultMaxPacketSize, stats.max_packet_size); |
4586 } | 4601 } |
4587 | 4602 |
4588 TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) { | 4603 TEST_P(QuicConnectionTest, ProcessFramesIfPacketClosedConnection) { |
4589 // Construct a packet with stream frame and connection close frame. | 4604 // Construct a packet with stream frame and connection close frame. |
4590 QuicPacketHeader header; | 4605 QuicPacketHeader header; |
4591 header.public_header.connection_id = connection_id_; | 4606 header.public_header.connection_id = |
| 4607 GetPeerInMemoryConnectionId(connection_id_); |
4592 header.packet_number = 1; | 4608 header.packet_number = 1; |
4593 header.public_header.version_flag = false; | 4609 header.public_header.version_flag = false; |
4594 | 4610 |
4595 QuicConnectionCloseFrame qccf; | 4611 QuicConnectionCloseFrame qccf; |
4596 qccf.error_code = QUIC_PEER_GOING_AWAY; | 4612 qccf.error_code = QUIC_PEER_GOING_AWAY; |
4597 | 4613 |
4598 QuicFrames frames; | 4614 QuicFrames frames; |
4599 frames.push_back(QuicFrame(&frame1_)); | 4615 frames.push_back(QuicFrame(&frame1_)); |
4600 frames.push_back(QuicFrame(&qccf)); | 4616 frames.push_back(QuicFrame(&qccf)); |
4601 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); | 4617 std::unique_ptr<QuicPacket> packet(ConstructPacket(header, frames)); |
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5132 error_details, ConnectionCloseSource::FROM_PEER)); | 5148 error_details, ConnectionCloseSource::FROM_PEER)); |
5133 connection_.set_perspective(Perspective::IS_CLIENT); | 5149 connection_.set_perspective(Perspective::IS_CLIENT); |
5134 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, | 5150 connection_.CloseConnection(QUIC_CRYPTO_HANDSHAKE_STATELESS_REJECT, |
5135 error_details, | 5151 error_details, |
5136 ConnectionCloseBehavior::SILENT_CLOSE); | 5152 ConnectionCloseBehavior::SILENT_CLOSE); |
5137 } | 5153 } |
5138 | 5154 |
5139 } // namespace | 5155 } // namespace |
5140 } // namespace test | 5156 } // namespace test |
5141 } // namespace net | 5157 } // namespace net |
OLD | NEW |