// Dial opens a connection to a remote server and attempts to negotiate a SPDY // connection. Upon success, it returns the connection and the protocol // selected by the server. func (e *streamExecutor) Dial(protocols ...string) (httpstream.Connection, string, error) { rt := transport.DebugWrappers(e.transport) // TODO the client probably shouldn't be created here, as it doesn't allow // flexibility to allow callers to configure it. client := &http.Client{Transport: rt} req, err := http.NewRequest(e.method, e.url.String(), nil) if err != nil { return nil, "", fmt.Errorf("error creating request: %v", err) } for i := range protocols { req.Header.Add(httpstream.HeaderProtocolVersion, protocols[i]) } resp, err := client.Do(req) if err != nil { return nil, "", fmt.Errorf("error sending request: %v", err) } defer resp.Body.Close() conn, err := e.upgrader.NewConnection(resp) if err != nil { return nil, "", err } return conn, resp.Header.Get(httpstream.HeaderProtocolVersion), nil }
func clientForUser(user string) *http.Client { return &http.Client{ Transport: transport.NewBearerAuthRoundTripper( user, transport.DebugWrappers(http.DefaultTransport), ), } }
// newConnection creates a new connection func newConnection(url url.URL, dialTimeout time.Duration, allowInsecure, enableV2 bool) *connection { var isV2 *bool if !enableV2 { v2 := false isV2 = &v2 } var rt http.RoundTripper if allowInsecure { rt = knet.SetTransportDefaults(&http.Transport{ Dial: (&net.Dialer{ Timeout: dialTimeout, KeepAlive: 30 * time.Second, }).Dial, TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }) } else { rt = knet.SetTransportDefaults(&http.Transport{ Dial: (&net.Dialer{ Timeout: dialTimeout, KeepAlive: 30 * time.Second, }).Dial, }) } rt = transport.DebugWrappers(rt) jar, _ := cookiejar.New(nil) client := &http.Client{Jar: jar, Transport: rt} return &connection{ url: url, client: client, cached: make(map[string]repository), isV2: isV2, allowInsecure: allowInsecure, } }