WIP: duplicate / counter checking. Working well
This commit is contained in:
parent
62bf956c10
commit
a561dd3cce
12
node/conn.go
12
node/conn.go
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user