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{}