vppn/peer/controlmessage.go
2025-02-10 19:11:30 +01:00

59 lines
1.1 KiB
Go

package peer
import (
"net/netip"
"vppn/m"
)
// ----------------------------------------------------------------------------
type controlMsg[T any] struct {
SrcIP byte
SrcAddr netip.AddrPort
// TODO: RecvdAt int64 // Unixmilli.
Packet T
}
func parseControlMsg(srcIP byte, srcAddr netip.AddrPort, buf []byte) (any, error) {
switch buf[0] {
case PacketTypeSyn:
packet, err := ParsePacketSyn(buf)
return controlMsg[PacketSyn]{
SrcIP: srcIP,
SrcAddr: srcAddr,
Packet: packet,
}, err
case PacketTypeAck:
packet, err := ParsePacketAck(buf)
return controlMsg[PacketAck]{
SrcIP: srcIP,
SrcAddr: srcAddr,
Packet: packet,
}, err
case PacketTypeProbe:
packet, err := ParsePacketProbe(buf)
return controlMsg[PacketProbe]{
SrcIP: srcIP,
SrcAddr: srcAddr,
Packet: packet,
}, err
default:
return nil, errUnknownPacketType
}
}
// ----------------------------------------------------------------------------
type peerUpdateMsg struct {
PeerIP byte
Peer *m.Peer
}
// ----------------------------------------------------------------------------
type pingTimerMsg struct{}