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
3 // found in the LICENSE file.
4 
5 #ifndef QUICHE_QUIC_TEST_TOOLS_QUIC_SENT_PACKET_MANAGER_PEER_H_
6 #define QUICHE_QUIC_TEST_TOOLS_QUIC_SENT_PACKET_MANAGER_PEER_H_
7 
8 #include "quiche/quic/core/congestion_control/pacing_sender.h"
9 #include "quiche/quic/core/quic_packets.h"
10 #include "quiche/quic/core/quic_sent_packet_manager.h"
11 
12 namespace quic {
13 
14 class SendAlgorithmInterface;
15 
16 namespace test {
17 
18 class QuicSentPacketManagerPeer {
19  public:
20   QuicSentPacketManagerPeer() = delete;
21 
22 
23   static void SetPerspective(QuicSentPacketManager* sent_packet_manager,
24                              Perspective perspective);
25 
26   static SendAlgorithmInterface* GetSendAlgorithm(
27       const QuicSentPacketManager& sent_packet_manager);
28 
29   static void SetSendAlgorithm(QuicSentPacketManager* sent_packet_manager,
30                                SendAlgorithmInterface* send_algorithm);
31 
32   static const LossDetectionInterface* GetLossAlgorithm(
33       QuicSentPacketManager* sent_packet_manager);
34 
35   static void SetLossAlgorithm(QuicSentPacketManager* sent_packet_manager,
36                                LossDetectionInterface* loss_detector);
37 
38   static RttStats* GetRttStats(QuicSentPacketManager* sent_packet_manager);
39 
40   // Returns true if |packet_number| is a retransmission of a packet.
41   static bool IsRetransmission(QuicSentPacketManager* sent_packet_manager,
42                                uint64_t packet_number);
43 
44   static void MarkForRetransmission(QuicSentPacketManager* sent_packet_manager,
45                                     uint64_t packet_number,
46                                     TransmissionType transmission_type);
47 
48   static size_t GetNumRetransmittablePackets(
49       const QuicSentPacketManager* sent_packet_manager);
50 
51   static void SetConsecutivePtoCount(QuicSentPacketManager* sent_packet_manager,
52                                      size_t count);
53 
54   static QuicSustainedBandwidthRecorder& GetBandwidthRecorder(
55       QuicSentPacketManager* sent_packet_manager);
56 
57   static void SetUsingPacing(QuicSentPacketManager* sent_packet_manager,
58                              bool using_pacing);
59 
60   static bool UsingPacing(const QuicSentPacketManager* sent_packet_manager);
61 
62   static PacingSender* GetPacingSender(
63       QuicSentPacketManager* sent_packet_manager);
64 
65   static bool HasRetransmittableFrames(
66       QuicSentPacketManager* sent_packet_manager, uint64_t packet_number);
67 
68   static QuicUnackedPacketMap* GetUnackedPacketMap(
69       QuicSentPacketManager* sent_packet_manager);
70 
71   static void DisablePacerBursts(QuicSentPacketManager* sent_packet_manager);
72 
73   static int GetPacerInitialBurstSize(
74       QuicSentPacketManager* sent_packet_manager);
75 
76   static void SetNextPacedPacketTime(QuicSentPacketManager* sent_packet_manager,
77                                      QuicTime time);
78 
79   static int GetReorderingShift(QuicSentPacketManager* sent_packet_manager);
80 
81   static bool AdaptiveReorderingThresholdEnabled(
82       QuicSentPacketManager* sent_packet_manager);
83 
84   static bool AdaptiveTimeThresholdEnabled(
85       QuicSentPacketManager* sent_packet_manager);
86 
87   static bool UsePacketThresholdForRuntPackets(
88       QuicSentPacketManager* sent_packet_manager);
89 
90   static int GetNumPtosForPathDegrading(
91       QuicSentPacketManager* sent_packet_manager);
92 
93   static QuicEcnCounts* GetPeerEcnCounts(
94       QuicSentPacketManager* sent_packet_manager, PacketNumberSpace space);
95 
96   static QuicPacketCount GetEct0Sent(QuicSentPacketManager* sent_packet_manager,
97                                      PacketNumberSpace space);
98 
99   static QuicPacketCount GetEct1Sent(QuicSentPacketManager* sent_packet_manager,
100                                      PacketNumberSpace space);
101 };
102 
103 }  // namespace test
104 
105 }  // namespace quic
106 
107 #endif  // QUICHE_QUIC_TEST_TOOLS_QUIC_SENT_PACKET_MANAGER_PEER_H_
108