func()

in transport/httpcommon/httpcommon.go [206:260]


func (settings *HTTPTransportSettings) RoundTripper(opts ...TransportOption) (http.RoundTripper, error) {
	var dialer transport.Dialer

	var extra extraSettings
	for _, opt := range opts {
		if opt, ok := opt.(extraOption); ok {
			opt.applyExtra(&extra)
		}
	}

	for _, opt := range opts {
		if dialOpt, ok := opt.(dialerOption); ok {
			dialer = dialOpt.baseDialer()
		}
	}

	if dialer == nil {
		dialer = transport.NetDialer(settings.Timeout)
	}

	tls, err := tlscommon.LoadTLSConfig(settings.TLS)
	if err != nil {
		return nil, err
	}

	tlsDialer := transport.TLSDialer(dialer, tls, settings.Timeout)
	for _, opt := range opts {
		if dialOpt, ok := opt.(dialerModOption); ok {
			dialer = dialOpt.applyDialer(settings, dialer)
			tlsDialer = dialOpt.applyDialer(settings, tlsDialer)
		}
	}

	if logger := extra.logger; logger != nil {
		dialer = transport.LoggingDialer(dialer, logger)
		tlsDialer = transport.LoggingDialer(tlsDialer, logger)
	}

	var rt http.RoundTripper
	if extra.http2 {
		rt, err = settings.http2RoundTripper(tls, dialer, tlsDialer, opts...)
		if err != nil {
			return nil, err
		}
	} else {
		rt = settings.httpRoundTripper(tls, dialer, tlsDialer, opts...)
	}

	for _, opt := range opts {
		if rtOpt, ok := opt.(roundTripperOption); ok {
			rt = rtOpt.applyRoundTripper(settings, rt)
		}
	}
	return rt, nil
}