in src/Proton.Client/Client/Implementation/ClientConnection.cs [947:1011]
private void InitializeProtonResources(ReconnectLocation location)
{
if (options.SaslOptions.SaslEnabled)
{
engine = Engine.IEngineFactory.Proton.CreateEngine();
}
else
{
engine = Engine.IEngineFactory.Proton.CreateNonSaslEngine();
}
if (options.TraceFrames)
{
engine.Configuration.TraceFrames = true;
if (!engine.Configuration.TraceFrames)
{
LOG.Warn("Connection {0} frame tracing was enabled but protocol engine does not support it", ConnectionId);
}
}
engine.OutputHandler(HandleEngineOutput)
.ShutdownHandler(HandleEngineShutdown)
.ErrorHandler(HandleEngineFailure);
protonConnection = engine.Connection;
if (client.ContainerId != null)
{
protonConnection.ContainerId = client.ContainerId;
}
else
{
protonConnection.ContainerId = connectionId;
}
if (options.VirtualHost != null)
{
protonConnection.Hostname = options.VirtualHost.Length == 0 ? null : options.VirtualHost;
}
else
{
protonConnection.Hostname = location.Host;
}
protonConnection.LinkedResource = this;
protonConnection.ChannelMax = options.ChannelMax;
protonConnection.MaxFrameSize = options.MaxFrameSize;
protonConnection.IdleTimeout = options.IdleTimeout / 2;
protonConnection.OfferedCapabilities = ClientConversionSupport.ToSymbolArray(options.OfferedCapabilities);
protonConnection.DesiredCapabilities = ClientConversionSupport.ToSymbolArray(options.DesiredCapabilities);
protonConnection.Properties = ClientConversionSupport.ToSymbolKeyedMap(options.Properties);
protonConnection.LocalOpenHandler(HandleLocalOpen)
.LocalCloseHandler(HandleLocalClose)
.OpenHandler(HandleRemoteOpen)
.CloseHandler(HandleRemoteClose);
if (options.SaslOptions.SaslEnabled)
{
SaslMechanismSelector mechSelector = new(
ClientConversionSupport.ToSymbolSet(options.SaslOptions.AllowedMechanisms));
engine.SaslDriver.Client().Authenticator =
new SaslAuthenticator(mechSelector, new ClientSaslCredentialsProvider(this));
}
}