diff --git a/proxy/blackhole/blackhole.go b/proxy/blackhole/blackhole.go index e3e26410..e584295e 100644 --- a/proxy/blackhole/blackhole.go +++ b/proxy/blackhole/blackhole.go @@ -31,9 +31,11 @@ func New(ctx context.Context, config *Config) (*Handler, error) { // Process implements OutboundHandler.Dispatch(). func (h *Handler) Process(ctx context.Context, link *core.Link, dialer proxy.Dialer) error { - h.response.WriteTo(link.Writer) - // Sleep a little here to make sure the response is sent to client. - time.Sleep(time.Second) + 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) + } pipe.CloseError(link.Writer) return nil } diff --git a/proxy/blackhole/config.go b/proxy/blackhole/config.go index 89c8df43..9ff56464 100644 --- a/proxy/blackhole/config.go +++ b/proxy/blackhole/config.go @@ -19,17 +19,19 @@ Content-Length: 0 // ResponseConfig is the configuration for blackhole responses. type ResponseConfig interface { // WriteTo writes predefined response to the give buffer. - WriteTo(buf.Writer) + WriteTo(buf.Writer) int32 } // WriteTo implements ResponseConfig.WriteTo(). -func (*NoneResponse) WriteTo(buf.Writer) {} +func (*NoneResponse) WriteTo(buf.Writer) int32 { return 0 } // WriteTo implements ResponseConfig.WriteTo(). -func (*HTTPResponse) WriteTo(writer buf.Writer) { +func (*HTTPResponse) WriteTo(writer buf.Writer) int32 { b := buf.New() - common.Must(b.AppendSupplier(serial.WriteString(http403response))) + common.Must(b.Reset(serial.WriteString(http403response))) + n := b.Len() writer.WriteMultiBuffer(buf.NewMultiBufferValue(b)) + return n } // GetInternalResponse converts response settings from proto to internal data structure.