1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file.
4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#ifndef NET_QUIC_TEST_TOOLS_QUIC_SENT_PACKET_MANAGER_PEER_H_
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define NET_QUIC_TEST_TOOLS_QUIC_SENT_PACKET_MANAGER_PEER_H_
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "net/quic/quic_protocol.h"
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "net/quic/quic_sent_packet_manager.h"
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace net {
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class SendAlgorithmInterface;
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace test {
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class QuicSentPacketManagerPeer {
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public:
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static void SetMaxTailLossProbes(
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      QuicSentPacketManager* sent_packet_manager, size_t max_tail_loss_probes);
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  static void SetSendAlgorithm(QuicSentPacketManager* sent_packet_manager,
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                               SendAlgorithmInterface* send_algorithm);
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  static const LossDetectionInterface* GetLossAlgorithm(
26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      QuicSentPacketManager* sent_packet_manager);
27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static const SendAlgorithmInterface* GetCongestionControlAlgorithm(
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const QuicSentPacketManager& sent_packet_manager);
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static void SetLossAlgorithm(QuicSentPacketManager* sent_packet_manager,
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                               LossDetectionInterface* loss_detector);
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static RttStats* GetRttStats(QuicSentPacketManager* sent_packet_manager);
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  static size_t GetNackCount(
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager,
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      QuicPacketSequenceNumber sequence_number);
39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static size_t GetPendingRetransmissionCount(
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager);
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static bool HasPendingPackets(
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager);
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static QuicTime GetSentTime(const QuicSentPacketManager* sent_packet_manager,
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                              QuicPacketSequenceNumber sequence_number);
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Returns true if |sequence_number| is a retransmission of a packet.
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  static bool IsRetransmission(QuicSentPacketManager* sent_packet_manager,
51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                               QuicPacketSequenceNumber sequence_number);
52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  static void MarkForRetransmission(QuicSentPacketManager* sent_packet_manager,
54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                    QuicPacketSequenceNumber sequence_number,
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                    TransmissionType transmission_type);
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static QuicTime::Delta GetRetransmissionDelay(
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager);
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static bool HasUnackedCryptoPackets(
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager);
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static size_t GetNumRetransmittablePackets(
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager);
65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static QuicByteCount GetBytesInFlight(
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager);
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static QuicSentPacketManager::NetworkChangeVisitor* GetNetworkChangeVisitor(
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const QuicSentPacketManager* sent_packet_manager);
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  static QuicSustainedBandwidthRecorder& GetBandwidthRecorder(
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      QuicSentPacketManager* sent_packet_manager);
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) private:
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManagerPeer);
77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)};
78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}  // namespace test
80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}  // namespace net
82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif  // NET_QUIC_TEST_TOOLS_QUIC_SENT_PACKET_MANAGER_PEER_H_
84