]> Sergey Matveev's repositories - btrtrc.git/blob - tracker/http/client.go
Drop support for go 1.20
[btrtrc.git] / tracker / http / client.go
1 package httpTracker
2
3 import (
4         "context"
5         "crypto/tls"
6         "net"
7         "net/http"
8         "net/url"
9 )
10
11 type Client struct {
12         hc   *http.Client
13         url_ *url.URL
14 }
15
16 type (
17         ProxyFunc       func(*http.Request) (*url.URL, error)
18         DialContextFunc func(ctx context.Context, network, addr string) (net.Conn, error)
19 )
20
21 type NewClientOpts struct {
22         Proxy          ProxyFunc
23         DialContext    DialContextFunc
24         ServerName     string
25         AllowKeepAlive bool
26 }
27
28 func NewClient(url_ *url.URL, opts NewClientOpts) Client {
29         return Client{
30                 url_: url_,
31                 hc: &http.Client{
32                         Transport: &http.Transport{
33                                 DialContext: opts.DialContext,
34                                 Proxy:       opts.Proxy,
35                                 TLSClientConfig: &tls.Config{
36                                         InsecureSkipVerify: true,
37                                         ServerName:         opts.ServerName,
38                                 },
39                                 // This is for S3 trackers that hold connections open.
40                                 DisableKeepAlives: !opts.AllowKeepAlive,
41                         },
42                 },
43         }
44 }
45
46 func (cl Client) Close() error {
47         cl.hc.CloseIdleConnections()
48         return nil
49 }