Files
quic-go/integrationtests/self/simnet_helper_test.go
2025-10-23 19:32:01 +02:00

68 lines
1.1 KiB
Go

package self_test
import (
"net"
"github.com/quic-go/quic-go/testutils/simnet"
)
type droppingRouter struct {
simnet.PerfectRouter
Drop func(simnet.Packet) bool
}
func (d *droppingRouter) SendPacket(p simnet.Packet) error {
if d.Drop(p) {
return nil
}
return d.PerfectRouter.SendPacket(p)
}
type direction uint8
const (
directionUnknown = iota
directionToClient
directionToServer
directionBoth
)
func (d direction) String() string {
switch d {
case directionToClient:
return "to client"
case directionToServer:
return "to server"
case directionBoth:
return "both"
}
return "unknown"
}
var _ simnet.Router = &droppingRouter{}
type directionAwareDroppingRouter struct {
simnet.PerfectRouter
ClientAddr, ServerAddr *net.UDPAddr
Drop func(direction direction, p simnet.Packet) bool
}
func (d *directionAwareDroppingRouter) SendPacket(p simnet.Packet) error {
var dir direction
switch p.To.String() {
case d.ClientAddr.String():
dir = directionToClient
case d.ServerAddr.String():
dir = directionToServer
default:
dir = directionUnknown
}
if d.Drop(dir, p) {
return nil
}
return d.PerfectRouter.SendPacket(p)
}