in src/AmqpConnectionListener.cs [81:130]
static AmqpTransportListener CreateListener(IEnumerable<string> addresses, AmqpSettings settings)
{
List<TransportListener> listeners = new List<TransportListener>();
foreach (string address in addresses)
{
Uri uri = new Uri(address);
bool isAmqps = string.Equals(AmqpConstants.SchemeAmqps, uri.Scheme, StringComparison.OrdinalIgnoreCase);
TcpTransportSettings tcpSettings = new TcpTransportSettings()
{
Host = uri.Host,
Port = uri.Port < 0 ? (isAmqps ? AmqpConstants.DefaultSecurePort : AmqpConstants.DefaultPort) : uri.Port
};
TransportListener tpListener;
if (isAmqps)
{
var tlsProvider = settings.GetTransportProvider<TlsTransportProvider>();
if (tlsProvider == null)
{
throw new InvalidOperationException($"TlsTransportProvider must be in AmqpSettings.TransportProviders for '{address}'.");
}
if (tlsProvider.Settings.Certificate == null)
{
throw new InvalidOperationException($"A server certificate is required in TlsTransportProvider for '{address}'.");
}
TlsTransportSettings tlsSettings = new TlsTransportSettings(tcpSettings, false);
tlsSettings.Certificate = tlsProvider.Settings.Certificate;
tlsSettings.CertificateValidationCallback = tlsProvider.Settings.CertificateValidationCallback;
tlsSettings.CheckCertificateRevocation = tlsProvider.Settings.CheckCertificateRevocation;
tpListener = tlsSettings.CreateListener();
}
else
{
tpListener = tcpSettings.CreateListener();
}
listeners.Add(tpListener);
}
if (settings.GetTransportProvider<AmqpTransportProvider>() == null)
{
var amqpProvider = new AmqpTransportProvider(AmqpVersion.V100);
settings.TransportProviders.Add(amqpProvider);
}
return new AmqpTransportListener(listeners, settings);
}