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);
}