github.com/xraypb/Xray-core@v1.8.1/proxy/blackhole/blackhole.go (about) 1 // Package blackhole is an outbound handler that blocks all connections. 2 package blackhole 3 4 //go:generate go run github.com/xraypb/Xray-core/common/errors/errorgen 5 6 import ( 7 "context" 8 "time" 9 10 "github.com/xraypb/Xray-core/common" 11 "github.com/xraypb/Xray-core/transport" 12 "github.com/xraypb/Xray-core/transport/internet" 13 ) 14 15 // Handler is an outbound connection that silently swallow the entire payload. 16 type Handler struct { 17 response ResponseConfig 18 } 19 20 // New creates a new blackhole handler. 21 func New(ctx context.Context, config *Config) (*Handler, error) { 22 response, err := config.GetInternalResponse() 23 if err != nil { 24 return nil, err 25 } 26 return &Handler{ 27 response: response, 28 }, nil 29 } 30 31 // Process implements OutboundHandler.Dispatch(). 32 func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error { 33 nBytes := h.response.WriteTo(link.Writer) 34 if nBytes > 0 { 35 // Sleep a little here to make sure the response is sent to client. 36 time.Sleep(time.Second) 37 } 38 common.Interrupt(link.Writer) 39 return nil 40 } 41 42 func init() { 43 common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) { 44 return New(ctx, config.(*Config)) 45 })) 46 }