/// <summary> /// Server receives the client init that may contain the initial response message. /// </summary> void OnSaslInit(SaslInit init) { if (this.state != SaslState.WaitingForInit) { throw new AmqpException(AmqpErrorCode.IllegalState, AmqpResources.GetString(AmqpResources.AmqpIllegalOperationState, "R:SASL-INIT", this.state)); } this.state = SaslState.Negotiating; this.saslHandler = this.provider.GetHandler(init.Mechanism.Value, true); this.saslHandler.Start(this, init, false); }
/// <summary> /// Client receives the announced server mechanisms. /// </summary> void OnSaslServerMechanisms(SaslMechanisms mechanisms) { if (this.state != SaslState.WaitingForServerMechanisms) { throw new AmqpException(AmqpErrorCode.IllegalState, AmqpResources.GetString(AmqpResources.AmqpIllegalOperationState, "R:SASL-MECH", this.state)); } string mechanismToUse = null; foreach (string mechanism in this.provider.Mechanisms) { if (mechanisms.SaslServerMechanisms.Contains(new AmqpSymbol(mechanism))) { mechanismToUse = mechanism; break; } if (mechanismToUse != null) { break; } } if (mechanismToUse == null) { throw new AmqpException( AmqpErrorCode.NotFound, AmqpResources.GetString(AmqpResources.AmqpNotSupportMechanism, mechanisms.SaslServerMechanisms.ToString(), string.Join(",", this.provider.Mechanisms))); } this.state = SaslState.Negotiating; this.saslHandler = this.provider.GetHandler(mechanismToUse, true); SaslInit init = new SaslInit(); init.Mechanism = mechanismToUse; this.saslHandler.Start(this, init, true); }
public void AddHandler(SaslHandler handler) { AmqpTrace.Provider.AmqpLogOperationInformational(this, TraceOperation.Add, handler); this.handlers.Add(handler.Mechanism, handler); }