forked from quic-go/quic-go
68 lines
1.1 KiB
Go
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)
|
|
}
|