Audit changes.
This commit is contained in:
@@ -7,18 +7,29 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/netip"
|
"net/netip"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.crumpington.com/lib/go/ratelimiter"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Receiver(selfVPNIP netip.Addr, ch chan<- Packet) {
|
func Receiver(selfVPNIP netip.Addr, ch chan<- Packet) {
|
||||||
|
limiters := make([]*ratelimiter.Limiter, 256)
|
||||||
|
for i := range limiters {
|
||||||
|
limiters[i] = ratelimiter.New(ratelimiter.Config{
|
||||||
|
BurstLimit: 1,
|
||||||
|
FillPeriod: broadcastInterval / 2,
|
||||||
|
MaxWaitCount: 0,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
if err := receiver(selfVPNIP, ch); err != nil {
|
if err := receiver(selfVPNIP, limiters, ch); err != nil {
|
||||||
log.Printf("[MCReader] %v", err)
|
log.Printf("[MCReader] %v", err)
|
||||||
}
|
}
|
||||||
time.Sleep(errorTimeout)
|
time.Sleep(errorTimeout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func receiver(selfVPNIP netip.Addr, ch chan<- Packet) error {
|
func receiver(selfVPNIP netip.Addr, limiters []*ratelimiter.Limiter, ch chan<- Packet) error {
|
||||||
selfIP := selfVPNIP.As4()[3]
|
selfIP := selfVPNIP.As4()[3]
|
||||||
|
|
||||||
conn, err := net.ListenMulticastUDP("udp", nil, multicastAddr(selfVPNIP))
|
conn, err := net.ListenMulticastUDP("udp", nil, multicastAddr(selfVPNIP))
|
||||||
@@ -44,6 +55,9 @@ func receiver(selfVPNIP netip.Addr, ch chan<- Packet) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
packet := unmarshal(buf[:n])
|
packet := unmarshal(buf[:n])
|
||||||
|
if err := limiters[packet.PeerIP].Limit(); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if packet.PeerIP == selfIP {
|
if packet.PeerIP == selfIP {
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user