14 #ifndef hifi_TCPVegasCC_h
15 #define hifi_TCPVegasCC_h
19 #include "CongestionControl.h"
20 #include "Constants.h"
25 class TCPVegasCC :
public CongestionControl {
29 virtual bool onACK(SequenceNumber ackNum, p_high_resolution_clock::time_point receiveTime)
override;
30 virtual void onTimeout()
override {};
32 virtual void onPacketSent(
int wireSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint)
override;
33 virtual void onPacketReSent(
int wireSize, SequenceNumber seqNum, p_high_resolution_clock::time_point timePoint)
override;
35 virtual int estimatedTimeout()
const override;
38 virtual void performCongestionAvoidance(SequenceNumber ack);
39 virtual void setInitialSendSequenceNumber(SequenceNumber seqNum)
override { _lastACK = seqNum - 1; }
41 bool calculateRTT(p_high_resolution_clock::time_point sendTime, p_high_resolution_clock::time_point receiveTime);
42 bool needsFastRetransmit(SequenceNumber ack,
bool wasDuplicateACK);
44 bool isCongestionWindowLimited();
45 void performRenoCongestionAvoidance(SequenceNumber ack);
47 struct SentPacketData {
48 SentPacketData(SequenceNumber seqNum, p_high_resolution_clock::time_point tPoint)
49 : sequenceNumber(seqNum), timePoint(tPoint) {};
51 SequenceNumber sequenceNumber;
52 p_high_resolution_clock::time_point timePoint;
53 bool wasResent {
false };
56 using PacketTimeList = std::vector<SentPacketData>;
57 PacketTimeList _sentPacketDatas;
59 p_high_resolution_clock::time_point _lastAdjustmentTime;
61 bool _slowStart {
true };
63 SequenceNumber _lastACK;
65 int _numACKSinceFastRetransmit { 3 };
70 int _rttVariance { 0 };
74 int _ackAICount { 0 };
75 int _duplicateACKCount { 0 };
77 int _slowStartOddAdjust { 0 };