internal Task GetTransportAsync()

in src/AmqpConnectionFactory.cs [273:326]


        internal Task<TransportBase> GetTransportAsync(Uri addressUri, AmqpSettings settings, TimeSpan timeout, CancellationToken cancellationToken)
        {
            TransportSettings transportSettings;

            if (addressUri.Scheme.Equals(AmqpConstants.SchemeAmqp, StringComparison.OrdinalIgnoreCase))
            {
                transportSettings = new TcpTransportSettings()
                {
                    Host = addressUri.Host,
                    Port = addressUri.Port > -1 ? addressUri.Port : AmqpConstants.DefaultPort
                };
            }
            else if (addressUri.Scheme.Equals(AmqpConstants.SchemeAmqps, StringComparison.OrdinalIgnoreCase))
            {
                TcpTransportSettings tcpSettings = new TcpTransportSettings()
                {
                    Host = addressUri.Host,
                    Port = addressUri.Port > -1 ? addressUri.Port : AmqpConstants.DefaultSecurePort
                };

                // Provider first, then TLS settings
                var tls = new TlsTransportSettings(tcpSettings) { TargetHost = addressUri.Host };
                TlsTransportProvider tlsProvider = this.settings.GetTransportProvider<TlsTransportProvider>();
                if (tlsProvider != null)
                {
                    tls.CertificateValidationCallback = tlsProvider.Settings.CertificateValidationCallback;
                    tls.CheckCertificateRevocation = tlsProvider.Settings.CheckCertificateRevocation;
                    tls.Certificate = tlsProvider.Settings.Certificate;
                    tls.Protocols = tlsProvider.Settings.Protocols;
                }

                if (this.tlsSettings != null)
                {
                    tls.CertificateValidationCallback = this.tlsSettings.CertificateValidationCallback;
                    tls.CheckCertificateRevocation = this.tlsSettings.CheckCertificateRevocation;
                    tls.Certificate = this.tlsSettings.Certificate;
                    tls.Protocols = this.tlsSettings.Protocols;
                }

                transportSettings = tls;
            }
            else if (addressUri.Scheme.Equals(WebSocketTransportSettings.WebSockets, StringComparison.OrdinalIgnoreCase) ||
                addressUri.Scheme.Equals(WebSocketTransportSettings.SecureWebSockets, StringComparison.OrdinalIgnoreCase))
            {
                transportSettings = new WebSocketTransportSettings() { Uri = addressUri };
            }
            else
            {
                throw new NotSupportedException(addressUri.Scheme);
            }

            AmqpTransportInitiator initiator = new AmqpTransportInitiator(settings, transportSettings);
            return initiator.ConnectAsync(timeout, cancellationToken);
        }