@@ -26,10 +26,6 @@ import (
2626 "errors"
2727 "fmt"
2828 "io"
29- << << << < HEAD
30- "io/ioutil"
31- == == == =
32- >> >> >> > upstream / naive
3329 "math/rand"
3430 "net"
3531 "net/http"
@@ -306,21 +302,11 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyht
306302 }
307303 }
308304
309- << << << < HEAD
310- // HTTP CONNECT Fast Open. We merely close the connection if Open fails.
311- wFlusher , ok := w .(http.Flusher )
312- if ! ok {
313- return caddyhttp .Error (http .StatusInternalServerError ,
314- fmt .Errorf ("ResponseWriter doesn't implement http.Flusher" ))
315- }
316- // Creates a padding of [30, 30+32)
317- == == == =
318305 // HTTP CONNECT Fast Open: Directly responds with a 200 OK
319306 // before attempting to connect to origin to reduce response latency.
320307 // We merely close the connection if Open fails.
321308
322309 // Creates a padding header with length in [30, 30+32)
323- >> >> >> > upstream / naive
324310 paddingLen := rand .Intn (32 ) + 30
325311 padding := make ([]byte , paddingLen )
326312 bits := rand .Uint64 ()
@@ -333,18 +319,13 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request, next caddyht
333319 padding [i ] = '~'
334320 }
335321 w .Header ().Set ("Padding" , string (padding ))
336- << << << < HEAD
337- w .WriteHeader (http .StatusOK )
338- wFlusher .Flush ()
339- == == == =
340322
341323 w .WriteHeader (http .StatusOK )
342324 err := http .NewResponseController (w ).Flush ()
343325 if err != nil {
344326 return caddyhttp .Error (http .StatusInternalServerError ,
345327 fmt .Errorf ("ResponseWriter flush error: %v" , err ))
346328 }
347- >> >> >> > upstream / naive
348329
349330 hostPort := r .URL .Host
350331 if hostPort == "" {
@@ -534,13 +515,13 @@ func (h Handler) dialContextCheckACL(ctx context.Context, network, hostPort stri
534515 return nil , caddyhttp .Error (http .StatusBadRequest , err )
535516 }
536517
537- if host == uot .UOTMagicAddress {
518+ if host == uot .MagicAddress || host == uot . LegacyMagicAddress {
538519 udpConn , err := net .ListenUDP ("udp" , nil )
539520 if err != nil {
540521 return nil , err
541522 }
542523
543- return uot .NewServerConn (udpConn ), nil
524+ return uot .NewServerConn (udpConn , uot . Version ), nil
544525 }
545526
546527 if h .upstream != nil {
@@ -697,12 +678,8 @@ func dualStream(target net.Conn, clientReader io.ReadCloser, clientWriter io.Wri
697678 buf := * bufPtr
698679 buf = buf [0 :cap (buf )]
699680 _ , _err := flushingIoCopy (w , r , buf , paddingType )
700- << << << < HEAD
701- bufferPool .Put (buf )
702- == == == =
703681 bufferPool .Put (bufPtr )
704682
705- >> >> >> > upstream / naive
706683 if cw , ok := w .(closeWriter ); ok {
707684 _ = cw .CloseWrite ()
708685 }
@@ -711,16 +688,9 @@ func dualStream(target net.Conn, clientReader io.ReadCloser, clientWriter io.Wri
711688 if padding {
712689 go stream (target , clientReader , RemovePadding )
713690 return stream (clientWriter , target , AddPadding )
714- << << << < HEAD
715- } else {
716- go stream (target , clientReader , NoPadding )
717- return stream (clientWriter , target , NoPadding )
718- }
719- == == == =
720691 }
721- go stream (target , clientReader , NoPadding ) //nolint: errcheck
722- return stream (clientWriter , target , NoPadding )
723- >> >> >> > upstream / naive
692+ go stream (target , clientReader , RemovePadding ) //nolint: errcheck
693+ return stream (clientWriter , target , AddPadding )
724694}
725695
726696type closeWriter interface {
@@ -731,15 +701,11 @@ type closeWriter interface {
731701// If dst does not implement http.Flusher(e.g. net.TCPConn), it will do a simple io.CopyBuffer().
732702// Reasoning: http2ResponseWriter will not flush on its own, so we have to do it manually.
733703func flushingIoCopy (dst io.Writer , src io.Reader , buf []byte , paddingType int ) (written int64 , err error ) {
734- << << << < HEAD
735- flusher , hasFlusher := dst .(http.Flusher )
736- == == == =
737704 rw , ok := dst .(http.ResponseWriter )
738705 var rc * http.ResponseController
739706 if ok {
740707 rc = http .NewResponseController (rw )
741708 }
742- >> >> >> > upstream / naive
743709 var numPadding int
744710 for {
745711 var nr int
@@ -775,12 +741,6 @@ func flushingIoCopy(dst io.Writer, src io.Reader, buf []byte, paddingType int) (
775741 }
776742 if nr > 0 {
777743 nw , ew := dst .Write (buf [0 :nr ])
778- << << << < HEAD
779- if hasFlusher {
780- flusher .Flush ()
781- }
782- == == == =
783- >> >> >> > upstream / naive
784744 if nw > 0 {
785745 written += int64 (nw )
786746 }
@@ -862,12 +822,8 @@ function FindProxyForURL(url, host) {
862822
863823var bufferPool = sync.Pool {
864824 New : func () interface {} {
865- << << << < HEAD
866- return make ([]byte , 0 , 64 * 1024 )
867- == == == =
868825 buffer := make ([]byte , 0 , 64 * 1024 )
869826 return & buffer
870- >> >> >> > upstream / naive
871827 },
872828}
873829
0 commit comments