| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // +build !confonly
- // Package blackhole is an outbound handler that blocks all connections.
- package blackhole
- //go:generate go run v2ray.com/core/common/errors/errorgen
- import (
- "context"
- "time"
- "v2ray.com/core/common"
- "v2ray.com/core/transport"
- "v2ray.com/core/transport/internet"
- )
- // Handler is an outbound connection that silently swallow the entire payload.
- type Handler struct {
- response ResponseConfig
- }
- // New creates a new blackhole handler.
- func New(ctx context.Context, config *Config) (*Handler, error) {
- response, err := config.GetInternalResponse()
- if err != nil {
- return nil, err
- }
- return &Handler{
- response: response,
- }, nil
- }
- // Process implements OutboundHandler.Dispatch().
- func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer internet.Dialer) error {
- nBytes := h.response.WriteTo(link.Writer)
- if nBytes > 0 {
- // Sleep a little here to make sure the response is sent to client.
- time.Sleep(time.Second)
- }
- common.Interrupt(link.Writer)
- return nil
- }
- func init() {
- common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) {
- return New(ctx, config.(*Config))
- }))
- }
|