save the RTT along the session ticket and use it on resumed connections

This commit is contained in:
Marten Seemann
2020-02-01 16:58:09 +07:00
parent 8ad95ce2d3
commit 69ab66ba82
7 changed files with 177 additions and 35 deletions

View File

@@ -18,6 +18,8 @@ const (
// RTTStats provides round-trip statistics
type RTTStats struct {
hasMeasurement bool
minRTT time.Duration
latestRTT time.Duration
smoothedRTT time.Duration
@@ -84,7 +86,8 @@ func (r *RTTStats) UpdateRTT(sendDelta, ackDelay time.Duration, now time.Time) {
}
r.latestRTT = sample
// First time call.
if r.smoothedRTT == 0 {
if !r.hasMeasurement {
r.hasMeasurement = true
r.smoothedRTT = sample
r.meanDeviation = sample / 2
} else {
@@ -93,10 +96,21 @@ func (r *RTTStats) UpdateRTT(sendDelta, ackDelay time.Duration, now time.Time) {
}
}
// SetMaxAckDelay sets the max_ack_delay
func (r *RTTStats) SetMaxAckDelay(mad time.Duration) {
r.maxAckDelay = mad
}
// SetInitialRTT sets the initial RTT.
// It is used during the 0-RTT handshake when restoring the RTT stats from the session state.
func (r *RTTStats) SetInitialRTT(t time.Duration) {
if r.hasMeasurement {
panic("initial RTT set after first measurement")
}
r.smoothedRTT = t
r.latestRTT = t
}
// OnConnectionMigration is called when connection migrates and rtt measurement needs to be reset.
func (r *RTTStats) OnConnectionMigration() {
r.latestRTT = 0