diff --git a/proxy/blackhole/blackhole.go b/proxy/blackhole/blackhole.go new file mode 100644 index 000000000..16659e665 --- /dev/null +++ b/proxy/blackhole/blackhole.go @@ -0,0 +1,40 @@ +package blackhole + +import ( + "io/ioutil" + + v2net "github.com/v2ray/v2ray-core/common/net" + "github.com/v2ray/v2ray-core/proxy" + "github.com/v2ray/v2ray-core/transport/ray" +) + +// BlackHole is an outbound connection that sliently swallow the entire payload. +type BlackHole struct { +} + +func NewBlackHole() *BlackHole { + return &BlackHole{} +} + +func (bh *BlackHole) Dispatch(firstPacket v2net.Packet, ray ray.OutboundRay) error { + if chunk := firstPacket.Chunk(); chunk != nil { + chunk.Release() + } + + close(ray.OutboundOutput()) + if firstPacket.MoreChunks() { + v2net.ChanToWriter(ioutil.Discard, ray.OutboundInput()) + } + return nil +} + +type BlackHoleFactory struct { +} + +func (factory BlackHoleFactory) Create(config interface{}) (proxy.OutboundConnectionHandler, error) { + return NewBlackHole(), nil +} + +func init() { + proxy.RegisterOutboundConnectionHandlerFactory("blackhole", BlackHoleFactory{}) +} diff --git a/proxy/blackhole/config/json/json.go b/proxy/blackhole/config/json/json.go new file mode 100644 index 000000000..89083e9dd --- /dev/null +++ b/proxy/blackhole/config/json/json.go @@ -0,0 +1,15 @@ +package json + +import ( + "github.com/v2ray/v2ray-core/config" + "github.com/v2ray/v2ray-core/config/json" +) + +type BlackHoleConfig struct { +} + +func init() { + json.RegisterConfigType("blackhole", config.TypeInbound, func() interface{} { + return new(BlackHoleConfig) + }) +}