refactor-for-testability (#3)
Co-authored-by: jdl <jdl@desktop> Co-authored-by: jdl <jdl@crumpington.com> Reviewed-on: #3
This commit is contained in:
120
peer/packets.go
Normal file
120
peer/packets.go
Normal file
@@ -0,0 +1,120 @@
|
||||
package peer
|
||||
|
||||
import (
|
||||
"net/netip"
|
||||
)
|
||||
|
||||
const (
|
||||
packetTypeSyn = 1
|
||||
packetTypeInit = 2
|
||||
packetTypeAck = 3
|
||||
packetTypeProbe = 4
|
||||
packetTypeAddrDiscovery = 5
|
||||
)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
type packetInit struct {
|
||||
TraceID uint64
|
||||
Direct bool
|
||||
Version uint64
|
||||
}
|
||||
|
||||
func (p packetInit) Marshal(buf []byte) []byte {
|
||||
return newBinWriter(buf).
|
||||
Byte(packetTypeInit).
|
||||
Uint64(p.TraceID).
|
||||
Bool(p.Direct).
|
||||
Uint64(p.Version).
|
||||
Build()
|
||||
}
|
||||
|
||||
func parsePacketInit(buf []byte) (p packetInit, err error) {
|
||||
err = newBinReader(buf[1:]).
|
||||
Uint64(&p.TraceID).
|
||||
Bool(&p.Direct).
|
||||
Uint64(&p.Version).
|
||||
Error()
|
||||
return
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
type packetSyn struct {
|
||||
TraceID uint64 // TraceID to match response w/ request.
|
||||
SharedKey [32]byte // Our shared key.
|
||||
Direct bool
|
||||
PossibleAddrs [8]netip.AddrPort // Possible public addresses of the sender.
|
||||
}
|
||||
|
||||
func (p packetSyn) Marshal(buf []byte) []byte {
|
||||
return newBinWriter(buf).
|
||||
Byte(packetTypeSyn).
|
||||
Uint64(p.TraceID).
|
||||
SharedKey(p.SharedKey).
|
||||
Bool(p.Direct).
|
||||
AddrPort8(p.PossibleAddrs).
|
||||
Build()
|
||||
}
|
||||
|
||||
func parsePacketSyn(buf []byte) (p packetSyn, err error) {
|
||||
err = newBinReader(buf[1:]).
|
||||
Uint64(&p.TraceID).
|
||||
SharedKey(&p.SharedKey).
|
||||
Bool(&p.Direct).
|
||||
AddrPort8(&p.PossibleAddrs).
|
||||
Error()
|
||||
return
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
type packetAck struct {
|
||||
TraceID uint64
|
||||
ToAddr netip.AddrPort
|
||||
PossibleAddrs [8]netip.AddrPort // Possible public addresses of the sender.
|
||||
}
|
||||
|
||||
func (p packetAck) Marshal(buf []byte) []byte {
|
||||
return newBinWriter(buf).
|
||||
Byte(packetTypeAck).
|
||||
Uint64(p.TraceID).
|
||||
AddrPort(p.ToAddr).
|
||||
AddrPort8(p.PossibleAddrs).
|
||||
Build()
|
||||
}
|
||||
|
||||
func parsePacketAck(buf []byte) (p packetAck, err error) {
|
||||
err = newBinReader(buf[1:]).
|
||||
Uint64(&p.TraceID).
|
||||
AddrPort(&p.ToAddr).
|
||||
AddrPort8(&p.PossibleAddrs).
|
||||
Error()
|
||||
return
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// A probeReqPacket is sent from a client to a server to determine if direct
|
||||
// UDP communication can be used.
|
||||
type packetProbe struct {
|
||||
TraceID uint64
|
||||
}
|
||||
|
||||
func (p packetProbe) Marshal(buf []byte) []byte {
|
||||
return newBinWriter(buf).
|
||||
Byte(packetTypeProbe).
|
||||
Uint64(p.TraceID).
|
||||
Build()
|
||||
}
|
||||
|
||||
func parsePacketProbe(buf []byte) (p packetProbe, err error) {
|
||||
err = newBinReader(buf[1:]).
|
||||
Uint64(&p.TraceID).
|
||||
Error()
|
||||
return
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
type packetLocalDiscovery struct{}
|
||||
Reference in New Issue
Block a user