private AmqpTransportListener CreateTransportListener() { TransportListener transportListener; TcpTransportSettings tcpTransportSetting = new TcpTransportSettings(); int port = this.ListenUri.Port; if (port <= 0) { port = 5672; } tcpTransportSetting.Host = this.ListenUri.Host; tcpTransportSetting.Port = port; if (!this.ListenUri.Scheme.Equals("amqps", StringComparison.OrdinalIgnoreCase)) { transportListener = tcpTransportSetting.CreateListener(); } else { TlsTransportProvider transportProvider = this.amqpSettings.GetTransportProvider <TlsTransportProvider>(); if (transportProvider == null) { throw Fx.Exception.Argument("TlsSecurityProvider", "Tls provider must be set."); } TlsTransportSettings tlsTransportSetting = new TlsTransportSettings(tcpTransportSetting, false) { Certificate = transportProvider.Settings.Certificate }; transportListener = tlsTransportSetting.CreateListener(); } return(new AmqpTransportListener(new TransportListener[] { transportListener }, this.amqpSettings)); }
public static AmqpSettings CreateAmqpSettings( Version amqpVersion, bool useSslStreamSecurity, bool hasTokenProvider, string sslHostName = null, bool useWebSockets = false, bool sslStreamUpgrade = false, System.Net.NetworkCredential networkCredential = null, System.Net.Security.RemoteCertificateValidationCallback certificateValidationCallback = null, bool forceTokenProvider = true) { AmqpSettings settings = new AmqpSettings(); if (useSslStreamSecurity && !useWebSockets && sslStreamUpgrade) { var tlsSettings = new TlsTransportSettings { CertificateValidationCallback = certificateValidationCallback, TargetHost = sslHostName }; var tlsProvider = new TlsTransportProvider(tlsSettings); tlsProvider.Versions.Add(new AmqpVersion(amqpVersion)); settings.TransportProviders.Add(tlsProvider); } if (hasTokenProvider || networkCredential != null) { SaslTransportProvider saslProvider = new SaslTransportProvider(); saslProvider.Versions.Add(new AmqpVersion(amqpVersion)); settings.TransportProviders.Add(saslProvider); if (forceTokenProvider) { saslProvider.AddHandler(new SaslAnonymousHandler(CbsSaslMechanismName)); } else if (networkCredential != null) { var plainHandler = new SaslPlainHandler { AuthenticationIdentity = networkCredential.UserName, Password = networkCredential.Password }; saslProvider.AddHandler(plainHandler); } else { // old client behavior: keep it for validation only saslProvider.AddHandler(new SaslExternalHandler()); } } AmqpTransportProvider amqpProvider = new AmqpTransportProvider(); amqpProvider.Versions.Add(new AmqpVersion(amqpVersion)); settings.TransportProviders.Add(amqpProvider); return(settings); }
public static AmqpSettings CreateAmqpSettings( Version amqpVersion, bool useSslStreamSecurity, string sslHostName = null, bool useWebSockets = false, bool sslStreamUpgrade = false, System.Net.NetworkCredential networkCredential = null) { var amqpSettings = new AmqpSettings(); if (useSslStreamSecurity && !useWebSockets && sslStreamUpgrade) { var tlsSettings = new TlsTransportSettings { TargetHost = sslHostName }; var tlsProvider = new TlsTransportProvider(tlsSettings); tlsProvider.Versions.Add(new AmqpVersion(amqpVersion)); amqpSettings.TransportProviders.Add(tlsProvider); } if (networkCredential != null) { var saslTransportProvider = new SaslTransportProvider(); saslTransportProvider.Versions.Add(new AmqpVersion(amqpVersion)); amqpSettings.TransportProviders.Add(saslTransportProvider); if (networkCredential != null) { var plainHandler = new SaslPlainHandler { AuthenticationIdentity = networkCredential.UserName, Password = networkCredential.Password }; saslTransportProvider.AddHandler(plainHandler); } } var amqpTransportProvider = new AmqpTransportProvider(); amqpTransportProvider.Versions.Add(new AmqpVersion(amqpVersion)); amqpSettings.TransportProviders.Add(amqpTransportProvider); return(amqpSettings); }
public static AmqpSettings GetAmqpSettings(bool client, string sslValue, bool doSslUpgrade, params SaslHandler[] saslHandlers) { AmqpSettings settings = new AmqpSettings(); #if !WINDOWS_UWP if ((client && doSslUpgrade) || (!client && sslValue != null)) { TlsTransportSettings tlsSettings = new TlsTransportSettings(); if (client) { tlsSettings.TargetHost = sslValue; tlsSettings.CertificateValidationCallback = (s, c, h, e) => { return(true); }; } else { tlsSettings.IsInitiator = false; tlsSettings.Certificate = GetCertificate(sslValue);; } TlsTransportProvider tlsProvider = new TlsTransportProvider(tlsSettings); tlsProvider.Versions.Add(new AmqpVersion(1, 0, 0)); settings.TransportProviders.Add(tlsProvider); } #endif if (saslHandlers != null && saslHandlers.Length >= 1 && saslHandlers[0] != null) { SaslTransportProvider saslProvider = new SaslTransportProvider(); saslProvider.Versions.Add(new AmqpVersion(1, 0, 0)); foreach (SaslHandler handler in saslHandlers) { saslProvider.AddHandler(handler); } settings.TransportProviders.Add(saslProvider); } AmqpTransportProvider amqpProvider = new AmqpTransportProvider(); amqpProvider.Versions.Add(new AmqpVersion(1, 0, 0)); settings.TransportProviders.Add(amqpProvider); return(settings); }
public static AmqpSettings GetAmqpSettings(bool client, string sslValue, bool doSslUpgrade, params SaslHandler[] saslHandlers) { AmqpSettings settings = new AmqpSettings(); if ((client && doSslUpgrade) || (!client && sslValue != null)) { TlsTransportSettings tlsSettings = new TlsTransportSettings(); if (client) { tlsSettings.TargetHost = sslValue; tlsSettings.CertificateValidationCallback = (s, c, h, e) => { return true; }; } else { tlsSettings.IsInitiator = false; tlsSettings.Certificate = GetCertificate(sslValue); ; } TlsTransportProvider tlsProvider = new TlsTransportProvider(tlsSettings); tlsProvider.Versions.Add(new AmqpVersion(1, 0, 0)); settings.TransportProviders.Add(tlsProvider); } if (saslHandlers != null && saslHandlers.Length >= 1 && saslHandlers[0] != null) { SaslTransportProvider saslProvider = new SaslTransportProvider(); saslProvider.Versions.Add(new AmqpVersion(1, 0, 0)); foreach (SaslHandler handler in saslHandlers) { saslProvider.AddHandler(handler); } settings.TransportProviders.Add(saslProvider); } AmqpTransportProvider amqpProvider = new AmqpTransportProvider(); amqpProvider.Versions.Add(new AmqpVersion(1, 0, 0)); settings.TransportProviders.Add(amqpProvider); return settings; }
internal AmqpSettings CreateAmqpSettings(string sslHostName) { AmqpSettings amqpSetting = new AmqpSettings(); if (this.SslStreamUpgrade) { TlsTransportSettings tlsTransportSetting = new TlsTransportSettings() { CertificateValidationCallback = this.CertificateValidationCallback, TargetHost = sslHostName }; TlsTransportProvider tlsTransportProvider = new TlsTransportProvider(tlsTransportSetting); tlsTransportProvider.Versions.Add(new Microsoft.ServiceBus.Messaging.Amqp.AmqpVersion(1, 0, 0)); amqpSetting.TransportProviders.Add(tlsTransportProvider); } if (this.TokenProvider != null || this.NetworkCredential != null) { SaslTransportProvider saslTransportProvider = new SaslTransportProvider(); saslTransportProvider.Versions.Add(new Microsoft.ServiceBus.Messaging.Amqp.AmqpVersion(1, 0, 0)); amqpSetting.TransportProviders.Add(saslTransportProvider); if (this.NetworkCredential == null) { saslTransportProvider.AddHandler(new SaslExternalHandler()); } else { SaslPlainHandler saslPlainHandler = new SaslPlainHandler() { AuthenticationIdentity = this.NetworkCredential.UserName, Password = this.NetworkCredential.Password }; saslTransportProvider.AddHandler(saslPlainHandler); } } AmqpTransportProvider amqpTransportProvider = new AmqpTransportProvider(); amqpTransportProvider.Versions.Add(new Microsoft.ServiceBus.Messaging.Amqp.AmqpVersion(this.AmqpVersion)); amqpSetting.TransportProviders.Add(amqpTransportProvider); return(amqpSetting); }
protected ConnectionListener( Uri addressUri, AmqpSettings amqpSettings, AmqpConnectionSettings connectionSettings) { amqpSettings.ValidateListenerSettings(); this.listenAddress = addressUri; this.amqpSettings = amqpSettings; this.connectionSettings = connectionSettings; this.onAcceptTransport = this.OnAcceptTransport; TcpTransportSettings tcpSettings = new TcpTransportSettings(); tcpSettings.SetEndPoint(addressUri.Host, addressUri.Port, true); TransportListener tpListener = null; if (addressUri.Scheme.Equals(AmqpConstants.SchemeAmqps, StringComparison.OrdinalIgnoreCase)) { TlsTransportProvider tlsProvider = this.amqpSettings.GetTransportProvider <TlsTransportProvider>(); if (tlsProvider == null) { throw Fx.Exception.ArgumentNull("TlsSecurityProvider"); } Fx.Assert(tlsProvider.Settings.Certificate != null, "Must have a valid certificate."); TlsTransportSettings tlsSettings = new TlsTransportSettings(tcpSettings, false); tlsSettings.Certificate = tlsProvider.Settings.Certificate; tpListener = tlsSettings.CreateListener(); } else { tpListener = tcpSettings.CreateListener(); } this.transportListener = new AmqpTransportListener(new TransportListener[] { tpListener }, this.amqpSettings); this.onConnectionOpenComplete = new AsyncCallback(this.OnConnectionOpenComplete); }
/// <summary> /// Opens a connection to the specified address. /// </summary> /// <param name="addressUri">The address Uri. User info is ignored.</param> /// <param name="saslHandler">The SASL handler which determines the SASL mechanism. Null means no SASL handshake.</param> /// <param name="timeout">The operation timeout.</param> /// <returns>An AMQP connection.</returns> public async Task <AmqpConnection> OpenConnectionAsync(Uri addressUri, SaslHandler saslHandler, TimeSpan timeout) { 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 }; 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; } 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); } AmqpSettings settings = this.settings.Clone(); settings.TransportProviders.Clear(); if (saslHandler != null) { // Provider for "AMQP3100" SaslTransportProvider saslProvider = new SaslTransportProvider(AmqpVersion.V100); saslProvider.AddHandler(saslHandler); settings.TransportProviders.Add(saslProvider); } // Provider for "AMQP0100" AmqpTransportProvider amqpProvider = new AmqpTransportProvider(AmqpVersion.V100); settings.TransportProviders.Add(amqpProvider); AmqpTransportInitiator initiator = new AmqpTransportInitiator(settings, transportSettings); TransportBase transport = await Task.Factory.FromAsync( (c, s) => initiator.BeginConnect(timeout, c, s), (r) => initiator.EndConnect(r), null).ConfigureAwait(false); try { AmqpConnectionSettings connectionSettings = new AmqpConnectionSettings() { ContainerId = Guid.NewGuid().ToString(), HostName = addressUri.Host }; AmqpConnection connection = new AmqpConnection(transport, settings, connectionSettings); await connection.OpenAsync(timeout).ConfigureAwait(false); return(connection); } catch { transport.Abort(); throw; } }