forked from MetaCubeX/quic-go
-
Notifications
You must be signed in to change notification settings - Fork 1
/
interface.go
65 lines (57 loc) · 2.07 KB
/
interface.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package congestion
import (
"time"
"github.com/daeuniverse/quic-go/internal/protocol"
)
type (
ByteCount protocol.ByteCount
PacketNumber protocol.PacketNumber
)
// Expose some constants from protocol that congestion control algorithms may need.
const (
InitialPacketSizeIPv4 = protocol.InitialPacketSizeIPv4
InitialPacketSizeIPv6 = protocol.InitialPacketSizeIPv6
MinPacingDelay = protocol.MinPacingDelay
MaxPacketBufferSize = protocol.MaxPacketBufferSize
MinInitialPacketSize = protocol.MinInitialPacketSize
MaxCongestionWindowPackets = protocol.MaxCongestionWindowPackets
PacketsPerConnectionID = protocol.PacketsPerConnectionID
)
type AckedPacketInfo struct {
PacketNumber PacketNumber
BytesAcked ByteCount
ReceivedTime time.Time
}
type LostPacketInfo struct {
PacketNumber PacketNumber
BytesLost ByteCount
}
type CongestionControl interface {
SetRTTStatsProvider(provider RTTStatsProvider)
TimeUntilSend(bytesInFlight ByteCount) time.Time
HasPacingBudget(now time.Time) bool
OnPacketSent(sentTime time.Time, bytesInFlight ByteCount, packetNumber PacketNumber, bytes ByteCount, isRetransmittable bool)
CanSend(bytesInFlight ByteCount) bool
MaybeExitSlowStart()
OnPacketAcked(number PacketNumber, ackedBytes ByteCount, priorInFlight ByteCount, eventTime time.Time)
OnCongestionEvent(number PacketNumber, lostBytes ByteCount, priorInFlight ByteCount)
OnCongestionEventEx(priorInFlight ByteCount, eventTime time.Time, ackedPackets []AckedPacketInfo, lostPackets []LostPacketInfo)
OnRetransmissionTimeout(packetsRetransmitted bool)
SetMaxDatagramSize(size ByteCount)
InSlowStart() bool
InRecovery() bool
GetCongestionWindow() ByteCount
}
type RTTStatsProvider interface {
MinRTT() time.Duration
LatestRTT() time.Duration
SmoothedRTT() time.Duration
MeanDeviation() time.Duration
MaxAckDelay() time.Duration
PTO(includeMaxAckDelay bool) time.Duration
UpdateRTT(sendDelta, ackDelay time.Duration, now time.Time)
SetMaxAckDelay(mad time.Duration)
SetInitialRTT(t time.Duration)
OnConnectionMigration()
ExpireSmoothedMetrics()
}