Source File
dial.go
Belonging Package
google.golang.org/api/transport/http
package http
import (
)
const (
mTLSModeAlways = "always"
mTLSModeNever = "never"
mTLSModeAuto = "auto"
)
func ( context.Context, ...option.ClientOption) (*http.Client, string, error) {
, := newSettings()
if != nil {
return nil, "",
}
, := getClientCertificateSource()
if != nil {
return nil, "",
}
, := getEndpoint(, )
if != nil {
return nil, "",
if .HTTPClient != nil {
return .HTTPClient, , nil
}
, := newTransport(, defaultBaseTransport(, ), )
if != nil {
return nil, "",
}
return &http.Client{Transport: }, , nil
}
func ( context.Context, http.RoundTripper, ...option.ClientOption) (http.RoundTripper, error) {
, := newSettings()
if != nil {
return nil,
}
if .HTTPClient != nil {
return nil, errors.New("transport/http: WithHTTPClient passed to NewTransport")
}
return newTransport(, , )
}
func ( context.Context, http.RoundTripper, *internal.DialSettings) (http.RoundTripper, error) {
:= ¶meterTransport{
base: ,
userAgent: .UserAgent,
quotaProject: .QuotaProject,
requestReason: .RequestReason,
}
var http.RoundTripper =
= addOCTransport(, )
switch {
case .APIKey != "":
= &transport.APIKey{
Transport: ,
Key: .APIKey,
}
default:
, := internal.Creds(, )
if != nil {
return nil,
}
if .quotaProject == "" {
.quotaProject = internal.QuotaProjectFromCreds()
}
:= .TokenSource
if .TokenSource != nil {
= .TokenSource
}
= &oauth2.Transport{
Base: ,
Source: ,
}
}
return , nil
}
func ( []option.ClientOption) (*internal.DialSettings, error) {
var internal.DialSettings
for , := range {
.Apply(&)
}
if := .Validate(); != nil {
return nil,
}
if .GRPCConn != nil {
return nil, errors.New("unsupported gRPC connection specified")
}
return &, nil
}
type parameterTransport struct {
userAgent string
quotaProject string
requestReason string
base http.RoundTripper
}
func ( *parameterTransport) ( *http.Request) (*http.Response, error) {
:= .base
if == nil {
return nil, errors.New("transport: no Transport specified")
}
:= *
.Header = make(http.Header)
for , := range .Header {
.Header[] =
}
if .quotaProject != "" {
.Header.Set("X-Goog-User-Project", .quotaProject)
}
if .requestReason != "" {
.Header.Set("X-Goog-Request-Reason", .requestReason)
}
return .RoundTrip(&)
}
var appengineUrlfetchHook func(context.Context) http.RoundTripper
func ( context.Context, cert.Source) http.RoundTripper {
if appengineUrlfetchHook != nil {
return appengineUrlfetchHook()
}
:= clonedTransport(http.DefaultTransport)
if == nil {
= fallbackBaseTransport()
}
.MaxIdleConnsPerHost = 100
if != nil {
.TLSClientConfig = &tls.Config{
GetClientCertificate: ,
}
}
return
}
func () *http.Transport {
return &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext,
MaxIdleConns: 100,
MaxIdleConnsPerHost: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
}
func ( http.RoundTripper, *internal.DialSettings) http.RoundTripper {
if .TelemetryDisabled {
return
}
return &ochttp.Transport{
Base: ,
Propagation: &propagation.HTTPFormat{},
}
}
func ( *internal.DialSettings) (cert.Source, error) {
if .HTTPClient != nil {
return nil, nil // HTTPClient is incompatible with ClientCertificateSource
} else if .ClientCertSource != nil {
return .ClientCertSource, nil
} else {
return cert.DefaultSource()
}
}
func ( *internal.DialSettings, cert.Source) (string, error) {
if .Endpoint == "" {
:= getMTLSMode()
if == mTLSModeAlways || ( != nil && == mTLSModeAuto) {
return .DefaultMTLSEndpoint, nil
}
return .DefaultEndpoint, nil
}
return .Endpoint, nil
}
if .DefaultEndpoint == "" {
return "", errors.New("WithEndpoint requires a full URL path")
}
return mergeEndpoints(.DefaultEndpoint, .Endpoint)
}
func () string {
:= os.Getenv("GOOGLE_API_USE_MTLS")
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |