@@ -95,7 +95,7 @@ func (s *ProxyHandler) HandleTunnel(wr http.ResponseWriter, req *http.Request, u
9595
9696 if req .ProtoMajor == 0 || req .ProtoMajor == 1 {
9797 // Upgrade client connection
98- localconn , _ , err := hijack (wr )
98+ localconn , rw , err := hijack (wr )
9999 if err != nil {
100100 s .logger .Error ("Can't hijack client connection: %v" , err )
101101 http .Error (wr , "Can't hijack client connection" , http .StatusInternalServerError )
@@ -106,6 +106,18 @@ func (s *ProxyHandler) HandleTunnel(wr http.ResponseWriter, req *http.Request, u
106106 // Inform client connection is built
107107 fmt .Fprintf (localconn , "HTTP/%d.%d 200 OK\r \n \r \n " , req .ProtoMajor , req .ProtoMinor )
108108
109+ if buffered := rw .Reader .Buffered (); buffered > 0 {
110+ s .logger .Debug ("saving %d bytes buffered in bufio.ReadWriter" , buffered )
111+ s .forward (
112+ req .Context (),
113+ username ,
114+ wrapH1ReqBody (io .NopCloser (io .LimitReader (rw .Reader , int64 (buffered )))),
115+ wrapH1RespWriter (conn ),
116+ )
117+ } else {
118+ s .logger .Debug ("not rescuing remaining data in bufio.ReadWriter" )
119+ }
120+
109121 s .forward (req .Context (), username , localconn , conn )
110122 } else if req .ProtoMajor == 2 {
111123 wr .Header ()["Date" ] = nil
0 commit comments