12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // Package transport provides function to send request to remote endpoints.
- package transport
- import (
- "fmt"
- "net/http"
- "github.com/docker/go-connections/sockets"
- )
- // apiTransport holds information about the http transport to connect with the API.
- type apiTransport struct {
- *http.Client
- *tlsInfo
- transport *http.Transport
- }
- // NewTransportWithHTTP creates a new transport based on the provided proto, address and http client.
- // It uses Docker's default http transport configuration if the client is nil.
- // It does not modify the client's transport if it's not nil.
- func NewTransportWithHTTP(proto, addr string, client *http.Client) (Client, error) {
- var transport *http.Transport
- if client != nil {
- tr, ok := client.Transport.(*http.Transport)
- if !ok {
- return nil, fmt.Errorf("unable to verify TLS configuration, invalid transport %v", client.Transport)
- }
- transport = tr
- } else {
- transport = defaultTransport(proto, addr)
- client = &http.Client{
- Transport: transport,
- }
- }
- return &apiTransport{
- Client: client,
- tlsInfo: &tlsInfo{transport.TLSClientConfig},
- transport: transport,
- }, nil
- }
- // CancelRequest stops a request execution.
- func (a *apiTransport) CancelRequest(req *http.Request) {
- a.transport.CancelRequest(req)
- }
- // defaultTransport creates a new http.Transport with Docker's
- // default transport configuration.
- func defaultTransport(proto, addr string) *http.Transport {
- tr := new(http.Transport)
- sockets.ConfigureTransport(tr, proto, addr)
- return tr
- }
- var _ Client = &apiTransport{}
|