|  |  | @ -23,14 +23,10 @@ func (cli *Client) postHijacked(ctx context.Context, path string, query url.Valu | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if err != nil { |  |  |  | 	if err != nil { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return types.HijackedResponse{}, err |  |  |  | 		return types.HijackedResponse{}, err | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 	req, err := cli.buildRequest(http.MethodPost, cli.getAPIPath(ctx, path, query), bodyEncoded, headers) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 	apiPath := cli.getAPIPath(ctx, path, query) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	req, err := http.NewRequest(http.MethodPost, apiPath, bodyEncoded) |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	if err != nil { |  |  |  | 	if err != nil { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return types.HijackedResponse{}, err |  |  |  | 		return types.HijackedResponse{}, err | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	req = cli.addHeaders(req, headers) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	conn, mediaType, err := cli.setupHijackConn(ctx, req, "tcp") |  |  |  | 	conn, mediaType, err := cli.setupHijackConn(ctx, req, "tcp") | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if err != nil { |  |  |  | 	if err != nil { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		return types.HijackedResponse{}, err |  |  |  | 		return types.HijackedResponse{}, err | 
			
		
	
	
		
		
			
				
					|  |  | @ -64,11 +60,6 @@ func fallbackDial(proto, addr string, tlsConfig *tls.Config) (net.Conn, error) { | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | func (cli *Client) setupHijackConn(ctx context.Context, req *http.Request, proto string) (net.Conn, string, error) { |  |  |  | func (cli *Client) setupHijackConn(ctx context.Context, req *http.Request, proto string) (net.Conn, string, error) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	req.URL.Host = cli.addr |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if cli.proto == "unix" || cli.proto == "npipe" { |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// Override host header for non-tcp connections.
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		req.Host = DummyHost |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 	req.Header.Set("Connection", "Upgrade") |  |  |  | 	req.Header.Set("Connection", "Upgrade") | 
			
		
	
		
		
			
				
					
					|  |  |  | 	req.Header.Set("Upgrade", proto) |  |  |  | 	req.Header.Set("Upgrade", proto) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -84,8 +75,8 @@ func (cli *Client) setupHijackConn(ctx context.Context, req *http.Request, proto | 
			
		
	
		
		
			
				
					
					|  |  |  | 	// state. Setting TCP KeepAlive on the socket connection will prohibit
 |  |  |  | 	// state. Setting TCP KeepAlive on the socket connection will prohibit
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	// ECONNTIMEOUT unless the socket connection truly is broken
 |  |  |  | 	// ECONNTIMEOUT unless the socket connection truly is broken
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if tcpConn, ok := conn.(*net.TCPConn); ok { |  |  |  | 	if tcpConn, ok := conn.(*net.TCPConn); ok { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		tcpConn.SetKeepAlive(true) |  |  |  | 		_ = tcpConn.SetKeepAlive(true) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		tcpConn.SetKeepAlivePeriod(30 * time.Second) |  |  |  | 		_ = tcpConn.SetKeepAlivePeriod(30 * time.Second) | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	clientconn := httputil.NewClientConn(conn, nil) |  |  |  | 	clientconn := httputil.NewClientConn(conn, nil) | 
			
		
	
	
		
		
			
				
					|  |  | @ -100,7 +91,7 @@ func (cli *Client) setupHijackConn(ctx context.Context, req *http.Request, proto | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return nil, "", err |  |  |  | 			return nil, "", err | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if resp.StatusCode != http.StatusSwitchingProtocols { |  |  |  | 		if resp.StatusCode != http.StatusSwitchingProtocols { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			resp.Body.Close() |  |  |  | 			_ = resp.Body.Close() | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			return nil, "", fmt.Errorf("unable to upgrade to %s, received %d", proto, resp.StatusCode) |  |  |  | 			return nil, "", fmt.Errorf("unable to upgrade to %s, received %d", proto, resp.StatusCode) | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
	
		
		
			
				
					|  |  | 
 |