return
}
elemsContainer.Lock()
- for _, elem := range elemsContainer.elems {
+ validTailPacket := -1
+ dataPacketReceived := false
+ for i, elem := range elemsContainer.elems {
if elem.packet == nil {
// decryption failed
continue
continue
}
- peer.SetEndpointFromPacket(elem.endpoint)
+ validTailPacket = i
if peer.ReceivedWithKeypair(elem.keypair) {
+ peer.SetEndpointFromPacket(elem.endpoint)
peer.timersHandshakeComplete()
peer.SendStagedPackets()
}
- peer.keepKeyFreshReceiving()
- peer.timersAnyAuthenticatedPacketTraversal()
- peer.timersAnyAuthenticatedPacketReceived()
peer.rxBytes.Add(uint64(len(elem.packet) + MinMessageSize))
if len(elem.packet) == 0 {
device.log.Verbosef("%v - Receiving keepalive packet", peer)
continue
}
- peer.timersDataReceived()
+ dataPacketReceived = true
switch elem.packet[0] >> 4 {
case 4:
bufs = append(bufs, elem.buffer[:MessageTransportOffsetContent+len(elem.packet)])
}
+ if validTailPacket >= 0 {
+ peer.SetEndpointFromPacket(elemsContainer.elems[validTailPacket].endpoint)
+ peer.keepKeyFreshReceiving()
+ peer.timersAnyAuthenticatedPacketTraversal()
+ peer.timersAnyAuthenticatedPacketReceived()
+ }
+ if dataPacketReceived {
+ peer.timersDataReceived()
+ }
if len(bufs) > 0 {
_, err := device.tun.device.Write(bufs, MessageTransportOffsetContent)
if err != nil && !device.isClosed() {