| 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 |