Source File
dial.go
Belonging Package
google.golang.org/api/transport/grpc
package grpc
import (
grpcgoogle
_
)
var appengineDialerHook func(context.Context) grpc.DialOption
func ( context.Context, ...option.ClientOption) (*grpc.ClientConn, error) {
, := processAndValidateOpts()
if != nil {
return nil,
}
if .GRPCConnPool != nil {
return .GRPCConnPool.Conn(), nil
func ( context.Context, ...option.ClientOption) (*grpc.ClientConn, error) {
, := processAndValidateOpts()
if != nil {
return nil,
}
return dial(, true, )
}
func ( context.Context, ...option.ClientOption) (ConnPool, error) {
, := processAndValidateOpts()
if != nil {
return nil,
}
if .GRPCConnPool != nil {
return .GRPCConnPool, nil
}
:= .GRPCConnPoolSize
= 1
}
.GRPCConnPoolSize = 0 // we don't *need* to set this to zero, but it's safe to.
, := dial(, false, )
if != nil {
return nil,
}
return &singleConnPool{}, nil
}
:= &roundRobinConnPool{}
for := 0; < ; ++ {
, := dial(, false, )
if != nil {
defer .Close() // NOTE: error from Close is ignored.
return nil,
}
.conns = append(.conns, )
}
return , nil
}
func ( context.Context, bool, *internal.DialSettings) (*grpc.ClientConn, error) {
if .HTTPClient != nil {
return nil, errors.New("unsupported HTTP client specified")
}
if .GRPCConn != nil {
return .GRPCConn, nil
}
var []grpc.DialOption
if {
= []grpc.DialOption{grpc.WithInsecure()}
} else if !.NoAuth {
if .APIKey != "" {
log.Print("API keys are not supported for gRPC APIs. Remove the WithAPIKey option from your client-creating call.")
}
, := internal.Creds(, )
if != nil {
return nil,
}
if .QuotaProject == "" {
.QuotaProject = internal.QuotaProjectFromCreds()
}
if isDirectPathEnabled(.Endpoint) && isTokenSourceDirectPathCompatible(.TokenSource) {
if !strings.HasPrefix(.Endpoint, "dns:///") {
.Endpoint = "dns:///" + .Endpoint
}
= []grpc.DialOption{
grpc.WithCredentialsBundle(
grpcgoogle.NewComputeEngineCredentials(),
grpc.WithDisableServiceConfig(),
grpc.WithDefaultServiceConfig(`{"loadBalancingConfig":[{"grpclb":{"childPolicy":[{"pick_first":{}}]}}]}`),
} else {
= []grpc.DialOption{
grpc.WithPerRPCCredentials(grpcTokenSource{
TokenSource: oauth.TokenSource{.TokenSource},
quotaProject: .QuotaProject,
requestReason: .RequestReason,
}),
grpc.WithTransportCredentials(credentials.NewClientTLSFromCert(nil, "")),
}
}
}
= append(, appengineDialerHook())
}
= addOCStatsHandler(, )
= append(, .GRPCDialOpts...)
if .UserAgent != "" {
= append(, grpc.WithUserAgent(.UserAgent))
}
if timeoutDialerOption != nil && isDirectPathEnabled(.Endpoint) {
= append(, timeoutDialerOption)
}
return grpc.DialContext(, .Endpoint, ...)
}
func ( string) string {
var = []string{
".sandbox.googleapis.com", // must come first because .googleapis.com is a substring
".googleapis.com",
}
for , := range {
if strings.Contains(, ) {
return strings.Replace(, , ".mtls"+, -1)
}
}
return
}
func ( []grpc.DialOption, *internal.DialSettings) []grpc.DialOption {
if .TelemetryDisabled {
return
}
return append(, grpc.WithStatsHandler(&ocgrpc.ClientHandler{}))
}
type grpcTokenSource struct {
oauth.TokenSource
func ( grpcTokenSource) ( context.Context, ...string) (
map[string]string, error) {
, := .TokenSource.GetRequestMetadata(, ...)
if != nil {
return nil,
}
if .quotaProject != "" {
["X-goog-user-project"] = .quotaProject
}
if .requestReason != "" {
["X-goog-request-reason"] = .requestReason
}
return , nil
}
func ( oauth2.TokenSource) bool {
if == nil {
return false
}
, := .Token()
if != nil {
return false
}
if == nil {
return false
}
if , := .Extra("oauth2.google.tokenSource").(string); != "compute-metadata" {
return false
}
if , := .Extra("oauth2.google.serviceAccount").(string); != "default" {
return false
}
return true
}
if != "" && strings.Contains(, ) {
return true
}
}
return false
}
func ( []option.ClientOption) (*internal.DialSettings, error) {
var internal.DialSettings
for , := range {
.Apply(&)
}
if := .Validate(); != nil {
return nil,
}
if os.Getenv("GOOGLE_API_USE_MTLS") == "always" {
.Endpoint = generateDefaultMtlsEndpoint(.Endpoint)
}
return &, nil
}
type connPoolOption struct{ ConnPool }
func ( ConnPool) option.ClientOption {
return connPoolOption{}
}
func ( connPoolOption) ( *internal.DialSettings) {
.GRPCConnPool = .ConnPool
![]() |
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. |