torrent/tracker/http/client.go

50 lines
943 B
Go

package httpTracker
import (
"context"
"crypto/tls"
"net"
"net/http"
"net/url"
)
type Client struct {
hc *http.Client
url_ *url.URL
}
type (
ProxyFunc func(*http.Request) (*url.URL, error)
DialContextFunc func(ctx context.Context, network, addr string) (net.Conn, error)
)
type NewClientOpts struct {
Proxy ProxyFunc
DialContext DialContextFunc
ServerName string
AllowKeepAlive bool
}
func NewClient(url_ *url.URL, opts NewClientOpts) Client {
return Client{
url_: url_,
hc: &http.Client{
Transport: &http.Transport{
DialContext: opts.DialContext,
Proxy: opts.Proxy,
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
ServerName: opts.ServerName,
},
// This is for S3 trackers that hold connections open.
DisableKeepAlives: !opts.AllowKeepAlive,
},
},
}
}
func (cl Client) Close() error {
cl.hc.CloseIdleConnections()
return nil
}