WIP: duplicate / counter checking. Working well

This commit is contained in:
jdl 2024-12-16 20:55:08 +01:00
parent 62bf956c10
commit a561dd3cce

View File

@ -61,16 +61,20 @@ func (w *connWriter) WriteTo(remoteIP, packetType byte, data []byte) error {
type connReader struct { type connReader struct {
*net.UDPConn *net.UDPConn
localIP byte localIP byte
counters [256]uint64 dupChecks [256]*dupCheck
lookup func(byte) *peer lookup func(byte) *peer
} }
func newConnReader(conn *net.UDPConn, localIP byte, lookup func(byte) *peer) *connReader { func newConnReader(conn *net.UDPConn, localIP byte, lookup func(byte) *peer) *connReader {
return &connReader{ r := &connReader{
UDPConn: conn, UDPConn: conn,
localIP: localIP, localIP: localIP,
lookup: lookup, lookup: lookup,
} }
for i := range r.dupChecks {
r.dupChecks[i] = newDupCheck(0)
}
return r
} }
func (r *connReader) Read(buf []byte) (remoteAddr netip.AddrPort, h header, data []byte, err error) { func (r *connReader) Read(buf []byte) (remoteAddr netip.AddrPort, h header, data []byte, err error) {
@ -94,8 +98,8 @@ func (r *connReader) Read(buf []byte) (remoteAddr netip.AddrPort, h header, data
continue // Packet is corrupt. continue // Packet is corrupt.
} }
if h.Counter > r.counters[h.SourceIP] { if r.dupChecks[h.SourceIP].IsDup(h.Counter) {
r.counters[h.SourceIP] = h.Counter continue
} }
return return