summaryrefslogtreecommitdiff
path: root/utilities/transport.go
blob: 8e890d051badde813da9ec942a3ffcb5266349bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
 * This file is part of Go Responsiveness.
 *
 * Go Responsiveness is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software Foundation,
 * either version 2 of the License, or (at your option) any later version.
 * Go Responsiveness is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with Go Responsiveness. If not, see <https://www.gnu.org/licenses/>.
 */

package utilities

import (
	"context"
	"net"
	"net/http"
	"time"

	"golang.org/x/net/http2"
)

func OverrideHostTransport(transport *http.Transport, connectToAddr string) {
	dialer := &net.Dialer{
		Timeout: 10 * time.Second,
	}

	transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
		_, port, err := net.SplitHostPort(addr)
		if err != nil {
			return nil, err
		}

		if len(connectToAddr) > 0 {
			addr = net.JoinHostPort(connectToAddr, port)
		}

		return dialer.DialContext(ctx, network, addr)
	}

	if t2, err := http2.ConfigureTransports(transport); err != nil {
		panic("Panic: Could not properly upgrade an http/1.1 transport for http/2.")
	} else {
		t2.StrictMaxConcurrentStreams = true
	}
}