58 lines
1.1 KiB
Go
58 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 {
|
|
Peer *m.Peer
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
type pingTimerMsg struct{}
|