// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build go1.21 package quic import ( "math" "time" ) // An unscaledAckDelay is an ACK Delay field value from an ACK packet, // without the ack_delay_exponent scaling applied. type unscaledAckDelay int64 func unscaledAckDelayFromDuration(d time.Duration, ackDelayExponent uint8) unscaledAckDelay { return unscaledAckDelay(d.Microseconds() >> ackDelayExponent) } func (d unscaledAckDelay) Duration(ackDelayExponent uint8) time.Duration { if int64(d) > (math.MaxInt64>>ackDelayExponent)/int64(time.Microsecond) { // If scaling the delay would overflow, ignore the delay. return 0 } return time.Duration(d<