take packet rcv timestamp directly after receiving from network

This commit is contained in:
Lucas Clemente
2016-09-07 14:15:14 +02:00
parent 099545521f
commit 29be6301ee
2 changed files with 12 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ import (
"net"
"strings"
"sync"
"time"
"github.com/lucas-clemente/quic-go/crypto"
"github.com/lucas-clemente/quic-go/handshake"
@@ -130,6 +131,8 @@ func (s *Server) handlePacket(conn *net.UDPConn, remoteAddr *net.UDPAddr, packet
return qerr.PacketTooLarge
}
rcvTime := time.Now()
r := bytes.NewReader(packet)
hdr, err := ParsePublicHeader(r)
@@ -175,6 +178,7 @@ func (s *Server) handlePacket(conn *net.UDPConn, remoteAddr *net.UDPAddr, packet
remoteAddr: remoteAddr,
publicHeader: hdr,
data: packet[len(packet)-r.Len():],
rcvTime: rcvTime,
})
return nil
}

View File

@@ -25,6 +25,7 @@ type receivedPacket struct {
remoteAddr interface{}
publicHeader *PublicHeader
data []byte
rcvTime time.Time
}
var (
@@ -179,7 +180,7 @@ func (s *Session) run() {
// begins with the public header and we never copy it.
putPacketBuffer(p.publicHeader.Raw)
if s.delayedAckOriginTime.IsZero() {
s.delayedAckOriginTime = time.Now()
s.delayedAckOriginTime = p.rcvTime
}
case <-s.aeadChanged:
s.tryDecryptingQueuedPackets()
@@ -226,7 +227,12 @@ func (s *Session) maybeResetTimer() {
}
func (s *Session) handlePacketImpl(p *receivedPacket) error {
s.lastNetworkActivityTime = time.Now()
if p.rcvTime.IsZero() {
// To simplify testing
p.rcvTime = time.Now()
}
s.lastNetworkActivityTime = p.rcvTime
hdr := p.publicHeader
data := p.data