Ver Fonte

wait only when data was written into piep

Darien Raymond há 7 anos atrás
pai
commit
3137eba542
2 ficheiros alterados com 11 adições e 7 exclusões
  1. 5 3
      proxy/blackhole/blackhole.go
  2. 6 4
      proxy/blackhole/config.go

+ 5 - 3
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
 }

+ 6 - 4
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.