| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 8 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| 9 #include "net/quic/test_tools/quic_test_utils.h" | 9 #include "net/quic/test_tools/quic_test_utils.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 | 184 |
| 185 manager_.OnSerializedPacket(serialized_packet); | 185 manager_.OnSerializedPacket(serialized_packet); |
| 186 | 186 |
| 187 QuicPacketSequenceNumber unacked[] = { 1 }; | 187 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 188 VerifyUnackedPackets(unacked, arraysize(unacked)); | 188 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 189 QuicPacketSequenceNumber retransmittable[] = { 1 }; | 189 QuicPacketSequenceNumber retransmittable[] = { 1 }; |
| 190 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 190 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 191 } | 191 } |
| 192 | 192 |
| 193 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { | 193 TEST_F(QuicSentPacketManagerTest, IsUnAckedRetransmit) { |
| 194 SerializedPacket serialized_packet(CreateDataPacket(1)); | 194 SendDataPacket(1); |
| 195 | |
| 196 manager_.OnSerializedPacket(serialized_packet); | |
| 197 RetransmitPacket(1, 2); | 195 RetransmitPacket(1, 2); |
| 198 | 196 |
| 199 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); | 197 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, 2)); |
| 200 QuicPacketSequenceNumber unacked[] = { 1, 2 }; | 198 QuicPacketSequenceNumber unacked[] = { 1, 2 }; |
| 201 VerifyUnackedPackets(unacked, arraysize(unacked)); | 199 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 202 QuicPacketSequenceNumber retransmittable[] = { 2 }; | 200 QuicPacketSequenceNumber retransmittable[] = { 2 }; |
| 203 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 201 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 204 } | 202 } |
| 205 | 203 |
| 206 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { | 204 TEST_F(QuicSentPacketManagerTest, RetransmitThenAck) { |
| 207 SerializedPacket serialized_packet(CreateDataPacket(1)); | 205 SendDataPacket(1); |
| 208 | 206 RetransmitAndSendPacket(1, 2); |
| 209 manager_.OnSerializedPacket(serialized_packet); | |
| 210 RetransmitPacket(1, 2); | |
| 211 | 207 |
| 212 // Ack 2 but not 1. | 208 // Ack 2 but not 1. |
| 213 ReceivedPacketInfo received_info; | 209 ReceivedPacketInfo received_info; |
| 214 received_info.largest_observed = 2; | 210 received_info.largest_observed = 2; |
| 215 received_info.missing_packets.insert(1); | 211 received_info.missing_packets.insert(1); |
| 212 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 213 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)).Times(1); |
| 216 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 214 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 217 | 215 |
| 218 // No unacked packets remain. | 216 // Packet 1 is unacked, pending, but not retransmittable. |
| 219 VerifyUnackedPackets(NULL, 0); | 217 QuicPacketSequenceNumber unacked[] = { 1 }; |
| 218 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 219 EXPECT_TRUE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 220 VerifyRetransmittablePackets(NULL, 0); | 220 VerifyRetransmittablePackets(NULL, 0); |
| 221 } | 221 } |
| 222 | 222 |
| 223 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { | 223 TEST_F(QuicSentPacketManagerTest, RetransmitThenAckBeforeSend) { |
| 224 SerializedPacket serialized_packet(CreateDataPacket(1)); | 224 SendDataPacket(1); |
| 225 | |
| 226 manager_.OnSerializedPacket(serialized_packet); | |
| 227 QuicSentPacketManagerPeer::MarkForRetransmission( | 225 QuicSentPacketManagerPeer::MarkForRetransmission( |
| 228 &manager_, 1, NACK_RETRANSMISSION); | 226 &manager_, 1, NACK_RETRANSMISSION); |
| 229 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 227 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 230 | 228 |
| 231 // Ack 1. | 229 // Ack 1. |
| 232 ReceivedPacketInfo received_info; | 230 ReceivedPacketInfo received_info; |
| 233 received_info.largest_observed = 1; | 231 received_info.largest_observed = 1; |
| 232 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 233 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)).Times(1); |
| 234 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 234 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 235 | 235 |
| 236 // There should no longer be a pending retransmission. | 236 // There should no longer be a pending retransmission. |
| 237 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 237 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| 238 | 238 |
| 239 // No unacked packets remain. | 239 // No unacked packets remain. |
| 240 VerifyUnackedPackets(NULL, 0); | 240 VerifyUnackedPackets(NULL, 0); |
| 241 VerifyRetransmittablePackets(NULL, 0); | 241 VerifyRetransmittablePackets(NULL, 0); |
| 242 } | 242 } |
| 243 | 243 |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); | 382 EXPECT_CALL(*send_algorithm_, OnPacketAcked(5, _)); |
| 383 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); | 383 EXPECT_CALL(*send_algorithm_, OnPacketLost(2, _)); |
| 384 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); | 384 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(2, _)); |
| 385 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); | 385 manager_.OnIncomingAck(received_info, clock_.ApproximateNow()); |
| 386 | 386 |
| 387 VerifyUnackedPackets(NULL, 0); | 387 VerifyUnackedPackets(NULL, 0); |
| 388 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); | 388 EXPECT_FALSE(QuicSentPacketManagerPeer::HasPendingPackets(&manager_)); |
| 389 } | 389 } |
| 390 | 390 |
| 391 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { | 391 TEST_F(QuicSentPacketManagerTest, TruncatedAck) { |
| 392 SerializedPacket serialized_packet(CreateDataPacket(1)); | 392 SendDataPacket(1); |
| 393 RetransmitAndSendPacket(1, 2); |
| 394 RetransmitAndSendPacket(2, 3); |
| 395 RetransmitAndSendPacket(3, 4); |
| 396 RetransmitAndSendPacket(4, 5); |
| 393 | 397 |
| 394 manager_.OnSerializedPacket(serialized_packet); | 398 // Truncated ack with 4 NACKs, so the first packet is lost. |
| 395 RetransmitPacket(1, 2); | |
| 396 RetransmitPacket(2, 3); | |
| 397 RetransmitPacket(3, 4); | |
| 398 | |
| 399 // Truncated ack with 2 NACKs | |
| 400 ReceivedPacketInfo received_info; | 399 ReceivedPacketInfo received_info; |
| 401 received_info.largest_observed = 2; | 400 received_info.largest_observed = 4; |
| 402 received_info.missing_packets.insert(1); | 401 received_info.missing_packets.insert(1); |
| 403 received_info.missing_packets.insert(2); | 402 received_info.missing_packets.insert(2); |
| 403 received_info.missing_packets.insert(3); |
| 404 received_info.missing_packets.insert(4); |
| 404 received_info.is_truncated = true; | 405 received_info.is_truncated = true; |
| 406 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 407 EXPECT_CALL(*send_algorithm_, OnPacketLost(1, _)); |
| 408 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(1, _)); |
| 405 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 409 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 406 | 410 |
| 407 // High water mark will be raised. | 411 // High water mark will be raised. |
| 408 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; | 412 QuicPacketSequenceNumber unacked[] = { 2, 3, 4 }; |
| 409 VerifyUnackedPackets(unacked, arraysize(unacked)); | 413 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 410 QuicPacketSequenceNumber retransmittable[] = { 4 }; | 414 QuicPacketSequenceNumber retransmittable[] = { 4 }; |
| 411 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 415 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 412 } | 416 } |
| 413 | 417 |
| 414 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { | 418 TEST_F(QuicSentPacketManagerTest, AckPreviousTransmissionThenTruncatedAck) { |
| 415 SerializedPacket serialized_packet(CreateDataPacket(1)); | 419 SendDataPacket(1); |
| 416 | 420 RetransmitAndSendPacket(1, 2); |
| 417 manager_.OnSerializedPacket(serialized_packet); | 421 RetransmitAndSendPacket(2, 3); |
| 418 RetransmitPacket(1, 2); | 422 RetransmitAndSendPacket(3, 4); |
| 419 RetransmitPacket(2, 3); | |
| 420 RetransmitPacket(3, 4); | |
| 421 manager_.OnSerializedPacket(CreateDataPacket(5)); | 423 manager_.OnSerializedPacket(CreateDataPacket(5)); |
| 422 manager_.OnSerializedPacket(CreateDataPacket(6)); | 424 manager_.OnSerializedPacket(CreateDataPacket(6)); |
| 423 manager_.OnSerializedPacket(CreateDataPacket(7)); | 425 manager_.OnSerializedPacket(CreateDataPacket(7)); |
| 424 manager_.OnSerializedPacket(CreateDataPacket(8)); | 426 manager_.OnSerializedPacket(CreateDataPacket(8)); |
| 425 manager_.OnSerializedPacket(CreateDataPacket(9)); | 427 manager_.OnSerializedPacket(CreateDataPacket(9)); |
| 426 | 428 |
| 427 // Ack previous transmission | 429 // Ack previous transmission |
| 428 { | 430 { |
| 429 ReceivedPacketInfo received_info; | 431 ReceivedPacketInfo received_info; |
| 430 received_info.largest_observed = 2; | 432 received_info.largest_observed = 2; |
| 431 received_info.missing_packets.insert(1); | 433 received_info.missing_packets.insert(1); |
| 434 EXPECT_CALL(*send_algorithm_, UpdateRtt(_)); |
| 435 EXPECT_CALL(*send_algorithm_, OnPacketAcked(2, _)); |
| 432 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 436 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 433 EXPECT_TRUE(manager_.IsUnacked(4)); | 437 EXPECT_TRUE(manager_.IsUnacked(4)); |
| 434 } | 438 } |
| 435 | 439 |
| 436 // Truncated ack with 4 NACKs | 440 // Truncated ack with 4 NACKs |
| 437 { | 441 { |
| 438 ReceivedPacketInfo received_info; | 442 ReceivedPacketInfo received_info; |
| 439 received_info.largest_observed = 6; | 443 received_info.largest_observed = 6; |
| 440 received_info.missing_packets.insert(3); | 444 received_info.missing_packets.insert(3); |
| 441 received_info.missing_packets.insert(4); | 445 received_info.missing_packets.insert(4); |
| 442 received_info.missing_packets.insert(5); | 446 received_info.missing_packets.insert(5); |
| 443 received_info.missing_packets.insert(6); | 447 received_info.missing_packets.insert(6); |
| 444 received_info.is_truncated = true; | 448 received_info.is_truncated = true; |
| 449 EXPECT_CALL(*send_algorithm_, OnPacketAcked(1, _)); |
| 450 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(3, _)); |
| 451 EXPECT_CALL(*send_algorithm_, OnPacketAbandoned(4, _)); |
| 445 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | 452 manager_.OnIncomingAck(received_info, QuicTime::Zero()); |
| 446 } | 453 } |
| 447 | 454 |
| 448 // High water mark will be raised. | 455 // High water mark will be raised. |
| 449 QuicPacketSequenceNumber unacked[] = { 5, 6, 7, 8, 9 }; | 456 QuicPacketSequenceNumber unacked[] = { 5, 6, 7, 8, 9 }; |
| 450 VerifyUnackedPackets(unacked, arraysize(unacked)); | 457 VerifyUnackedPackets(unacked, arraysize(unacked)); |
| 451 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; | 458 QuicPacketSequenceNumber retransmittable[] = { 5, 6, 7, 8, 9 }; |
| 452 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | 459 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); |
| 453 } | 460 } |
| 454 | 461 |
| 455 TEST_F(QuicSentPacketManagerTest, SendDropAckRetransmitManyPackets) { | |
| 456 manager_.OnSerializedPacket(CreateDataPacket(1)); | |
| 457 manager_.OnSerializedPacket(CreateDataPacket(2)); | |
| 458 manager_.OnSerializedPacket(CreateDataPacket(3)); | |
| 459 | |
| 460 { | |
| 461 // Ack packets 1 and 3. | |
| 462 ReceivedPacketInfo received_info; | |
| 463 received_info.largest_observed = 3; | |
| 464 received_info.missing_packets.insert(2); | |
| 465 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
| 466 | |
| 467 QuicPacketSequenceNumber unacked[] = { 2 }; | |
| 468 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
| 469 QuicPacketSequenceNumber retransmittable[] = { 2 }; | |
| 470 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
| 471 } | |
| 472 | |
| 473 manager_.OnSerializedPacket(CreateDataPacket(4)); | |
| 474 manager_.OnSerializedPacket(CreateDataPacket(5)); | |
| 475 | |
| 476 { | |
| 477 // Ack packets 5. | |
| 478 ReceivedPacketInfo received_info; | |
| 479 received_info.largest_observed = 5; | |
| 480 received_info.missing_packets.insert(2); | |
| 481 received_info.missing_packets.insert(4); | |
| 482 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
| 483 | |
| 484 QuicPacketSequenceNumber unacked[] = { 2, 4 }; | |
| 485 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
| 486 QuicPacketSequenceNumber retransmittable[] = { 2, 4 }; | |
| 487 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
| 488 } | |
| 489 | |
| 490 manager_.OnSerializedPacket(CreateDataPacket(6)); | |
| 491 manager_.OnSerializedPacket(CreateDataPacket(7)); | |
| 492 | |
| 493 { | |
| 494 // Ack packets 7. | |
| 495 ReceivedPacketInfo received_info; | |
| 496 received_info.largest_observed = 7; | |
| 497 received_info.missing_packets.insert(2); | |
| 498 received_info.missing_packets.insert(4); | |
| 499 received_info.missing_packets.insert(6); | |
| 500 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
| 501 | |
| 502 QuicPacketSequenceNumber unacked[] = { 2, 4, 6 }; | |
| 503 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
| 504 QuicPacketSequenceNumber retransmittable[] = { 2, 4, 6 }; | |
| 505 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
| 506 } | |
| 507 | |
| 508 RetransmitPacket(2, 8); | |
| 509 manager_.OnSerializedPacket(CreateDataPacket(9)); | |
| 510 manager_.OnSerializedPacket(CreateDataPacket(10)); | |
| 511 | |
| 512 { | |
| 513 // Ack packet 10. | |
| 514 ReceivedPacketInfo received_info; | |
| 515 received_info.largest_observed = 10; | |
| 516 received_info.missing_packets.insert(2); | |
| 517 received_info.missing_packets.insert(4); | |
| 518 received_info.missing_packets.insert(6); | |
| 519 received_info.missing_packets.insert(8); | |
| 520 received_info.missing_packets.insert(9); | |
| 521 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
| 522 | |
| 523 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9 }; | |
| 524 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
| 525 QuicPacketSequenceNumber retransmittable[] = { 4, 6, 8, 9 }; | |
| 526 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
| 527 } | |
| 528 | |
| 529 | |
| 530 RetransmitPacket(4, 11); | |
| 531 manager_.OnSerializedPacket(CreateDataPacket(12)); | |
| 532 manager_.OnSerializedPacket(CreateDataPacket(13)); | |
| 533 | |
| 534 { | |
| 535 // Ack packet 13. | |
| 536 ReceivedPacketInfo received_info; | |
| 537 received_info.largest_observed = 13; | |
| 538 received_info.missing_packets.insert(2); | |
| 539 received_info.missing_packets.insert(4); | |
| 540 received_info.missing_packets.insert(6); | |
| 541 received_info.missing_packets.insert(8); | |
| 542 received_info.missing_packets.insert(9); | |
| 543 received_info.missing_packets.insert(11); | |
| 544 received_info.missing_packets.insert(12); | |
| 545 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
| 546 | |
| 547 QuicPacketSequenceNumber unacked[] = { 2, 4, 6, 8, 9, 11, 12 }; | |
| 548 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
| 549 QuicPacketSequenceNumber retransmittable[] = { 6, 8, 9, 11, 12 }; | |
| 550 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
| 551 } | |
| 552 | |
| 553 RetransmitPacket(6, 14); | |
| 554 manager_.OnSerializedPacket(CreateDataPacket(15)); | |
| 555 manager_.OnSerializedPacket(CreateDataPacket(16)); | |
| 556 | |
| 557 { | |
| 558 // Ack packet 16. | |
| 559 ReceivedPacketInfo received_info; | |
| 560 received_info.largest_observed = 13; | |
| 561 received_info.missing_packets.insert(2); | |
| 562 received_info.missing_packets.insert(4); | |
| 563 received_info.missing_packets.insert(6); | |
| 564 received_info.missing_packets.insert(8); | |
| 565 received_info.missing_packets.insert(9); | |
| 566 received_info.missing_packets.insert(11); | |
| 567 received_info.missing_packets.insert(12); | |
| 568 received_info.is_truncated = true; | |
| 569 manager_.OnIncomingAck(received_info, QuicTime::Zero()); | |
| 570 | |
| 571 // Truncated ack raises the high water mark by clearing out 2, 4, and 6. | |
| 572 QuicPacketSequenceNumber unacked[] = { 8, 9, 11, 12, 14, 15, 16 }; | |
| 573 VerifyUnackedPackets(unacked, arraysize(unacked)); | |
| 574 QuicPacketSequenceNumber retransmittable[] = { 8, 9, 11, 12, 14, 15, 16 }; | |
| 575 VerifyRetransmittablePackets(retransmittable, arraysize(retransmittable)); | |
| 576 } | |
| 577 } | |
| 578 | |
| 579 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { | 462 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacket) { |
| 580 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); | 463 EXPECT_CALL(helper_, GetNextPacketSequenceNumber()).WillOnce(Return(1u)); |
| 581 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 464 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| 582 } | 465 } |
| 583 | 466 |
| 584 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { | 467 TEST_F(QuicSentPacketManagerTest, GetLeastUnackedSentPacketUnacked) { |
| 585 SerializedPacket serialized_packet(CreateDataPacket(1)); | 468 SerializedPacket serialized_packet(CreateDataPacket(1)); |
| 586 | 469 |
| 587 manager_.OnSerializedPacket(serialized_packet); | 470 manager_.OnSerializedPacket(serialized_packet); |
| 588 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); | 471 EXPECT_EQ(1u, manager_.GetLeastUnackedSentPacket()); |
| (...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1282 delay = delay.Add(delay); | 1165 delay = delay.Add(delay); |
| 1283 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1166 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1284 manager_.OnRetransmissionTimeout(); | 1167 manager_.OnRetransmissionTimeout(); |
| 1285 RetransmitNextPacket(i + 2); | 1168 RetransmitNextPacket(i + 2); |
| 1286 } | 1169 } |
| 1287 } | 1170 } |
| 1288 | 1171 |
| 1289 } // namespace | 1172 } // namespace |
| 1290 } // namespace test | 1173 } // namespace test |
| 1291 } // namespace net | 1174 } // namespace net |
| OLD | NEW |