public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { ISaslClient saslClient = evt.ProtocolSession.SaslClient; if (saslClient == null) { throw new AMQException("No SASL client set up - cannot proceed with authentication"); } ConnectionSecureBody body = (ConnectionSecureBody)evt.Method; try { // Evaluate server challenge byte[] response = saslClient.EvaluateChallenge(body.Challenge); // AMQP version change: Hardwire the version to 0-8 (major=8, minor=0) // TODO: Connect this to the session version obtained from ProtocolInitiation for this session. // Be aware of possible changes to parameter order as versions change. AMQFrame responseFrame = ConnectionSecureOkBody.CreateAMQFrame( evt.ChannelId, response); evt.ProtocolSession.WriteFrame(responseFrame); } catch (SaslException e) { throw new AMQException("Error processing SASL challenge: " + e, e); } }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { _logger.Debug("ConnectionTune frame received"); ConnectionTuneBody frame = (ConnectionTuneBody)evt.Method; AMQProtocolSession session = evt.ProtocolSession; ConnectionTuneParameters parameters = session.ConnectionTuneParameters; if (parameters == null) { parameters = new ConnectionTuneParameters(); } _logger.Debug(String.Format("ConnectionTune.heartbeat = {0}.", frame.Heartbeat)); parameters.FrameMax = frame.FrameMax; parameters.Heartbeat = frame.Heartbeat; session.ConnectionTuneParameters = parameters; stateManager.ChangeState(AMQState.CONNECTION_NOT_OPENED); session.WriteFrame(ConnectionTuneOkBody.CreateAMQFrame( evt.ChannelId, frame.ChannelMax, frame.FrameMax, frame.Heartbeat)); session.WriteFrame(ConnectionOpenBody.CreateAMQFrame( evt.ChannelId, session.AMQConnection.VirtualHost, null, true)); if (frame.Heartbeat > 0) { evt.ProtocolSession.AMQConnection.StartHeartBeatThread(frame.Heartbeat); } }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { _logger.Debug("ConnectionClose frame received"); ConnectionCloseBody method = (ConnectionCloseBody)evt.Method; int errorCode = method.ReplyCode; String reason = method.ReplyText; // send CloseOK evt.ProtocolSession.WriteFrame(ConnectionCloseOkBody.CreateAMQFrame(evt.ChannelId)); if (errorCode != AMQConstant.REPLY_SUCCESS.Code) { if (errorCode == AMQConstant.NOT_ALLOWED.Code) { _logger.Info("Authentication Error: " + Thread.CurrentThread.Name); evt.ProtocolSession.CloseProtocolSession(); //todo this is a bit of a fudge (could be conssidered such as each new connection needs a new state manager or at least a fresh state. stateManager.ChangeState(AMQState.CONNECTION_NOT_STARTED); throw new AMQAuthenticationException(errorCode, reason); } else { _logger.Info("Connection close received with error code " + errorCode); throw new AMQConnectionClosedException(errorCode, "Error: " + reason); } } // this actually closes the connection in the case where it is not an error. evt.ProtocolSession.CloseProtocolSession(); stateManager.ChangeState(AMQState.CONNECTION_CLOSED); }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { UnprocessedMessage msg = new UnprocessedMessage(); msg.DeliverBody = (BasicDeliverBody)evt.Method; msg.ChannelId = evt.ChannelId; _logger.Debug("New JmsDeliver method received"); evt.ProtocolSession.UnprocessedMessageReceived(msg); }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { QueueDeleteOkBody body = (QueueDeleteOkBody)evt.Method; if (body != null) { _logger.InfoFormat("Received Queue.Delete-Ok message, message count {0}", body.MessageCount); } }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { _logger.Debug("New Basic.Return method received"); UnprocessedMessage msg = new UnprocessedMessage(); msg.DeliverBody = null; msg.BounceBody = (BasicReturnBody)evt.Method; msg.ChannelId = evt.ChannelId; evt.ProtocolSession.UnprocessedMessageReceived(msg); }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { ConnectionStartBody body = (ConnectionStartBody)evt.Method; AMQProtocolSession ps = evt.ProtocolSession; try { if (body.Mechanisms == null) { throw new AMQException("mechanism not specified in ConnectionStart method frame"); } string mechanisms = Encoding.UTF8.GetString(body.Mechanisms); string selectedMechanism = ChooseMechanism(mechanisms); if (selectedMechanism == null) { throw new AMQException("No supported security mechanism found, passed: " + mechanisms); } byte[] saslResponse = DoAuthentication(selectedMechanism, ps); if (body.Locales == null) { throw new AMQException("Locales is not defined in Connection Start method"); } string allLocales = Encoding.ASCII.GetString(body.Locales); string[] locales = allLocales.Split(' '); string selectedLocale; if (locales != null && locales.Length > 0) { selectedLocale = locales[0]; } else { throw new AMQException("No locales sent from server, passed: " + locales); } stateManager.ChangeState(AMQState.CONNECTION_NOT_TUNED); FieldTable clientProperties = new FieldTable(); clientProperties["product"] = "Apache.Qpid.NET"; clientProperties["version"] = "1.0"; clientProperties["platform"] = GetFullSystemInfo(); clientProperties["instance"] = ps.ClientID; AMQFrame frame = ConnectionStartOkBody.CreateAMQFrame( evt.ChannelId, clientProperties, selectedMechanism, saslResponse, selectedLocale); ps.WriteFrame(frame); } catch (Exception e) { throw new AMQException(_log, "Unable to decode data: " + e, e); } }
public bool MethodReceived(AMQMethodEvent evt) { _logger.Debug(String.Format("Finding method handler. currentState={0} type={1}", _currentState, evt.Method.GetType())); //Console.WriteLine(String.Format("Finding method handler. currentState={0} type={1}", _currentState, evt.Method.GetType())); //KHC IStateAwareMethodListener handler = FindStateTransitionHandler(_currentState, evt.Method); if (handler != null) { handler.MethodReceived(this, evt); //Console.WriteLine(" MethodReceived return true, newState={0}", _currentState); return(true); } //Console.WriteLine(" MethodReceived return false, currentState={0}", _currentState); return(false); }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { _logger.Debug("ChannelClose method received"); ChannelCloseBody method = (ChannelCloseBody)evt.Method; int errorCode = method.ReplyCode; string reason = method.ReplyText; if (_logger.IsDebugEnabled) { _logger.Debug("Channel close reply code: " + errorCode + ", reason: " + reason); } AMQFrame frame = ChannelCloseOkBody.CreateAMQFrame(evt.ChannelId); evt.ProtocolSession.WriteFrame(frame); if (errorCode != AMQConstant.REPLY_SUCCESS.Code) { _logger.Debug("Channel close received with errorCode " + errorCode + ", throwing exception"); if (errorCode == AMQConstant.NO_CONSUMERS.Code) { throw new AMQNoConsumersException(reason); } if (errorCode == AMQConstant.NO_ROUTE.Code) { throw new AMQNoRouteException(reason); } if (errorCode == AMQConstant.INVALID_ARGUMENT.Code) { throw new AMQInvalidArgumentException(reason); } if (errorCode == AMQConstant.INVALID_ROUTING_KEY.Code) { throw new AMQInvalidRoutingKeyException(reason); } // any other throw new AMQChannelClosedException(errorCode, "Error: " + reason); } evt.ProtocolSession.ChannelClosed(evt.ChannelId, errorCode, reason); }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { /*_logger.Info("ConnectionRedirect frame received"); * ConnectionRedirectBody method = (ConnectionRedirectBody) evt.Method; * * // the host is in the form hostname:port with the port being optional * int portIndex = method.Host.IndexOf(':'); * String host; * int port; * if (portIndex == -1) * { * host = method.Host; * port = DEFAULT_REDIRECT_PORT; * } * else * { * host = method.Host.Substring(0, portIndex); * port = Int32.Parse(method.Host.Substring(portIndex + 1)); * } * evt.ProtocolSession.Failover(host, port);*/ }
/// <summary> /// This method is called by the MINA dispatching thread. Note that it could /// be called before BlockForFrame() has been called. /// </summary> /// <param name="evt">the frame event</param> /// <returns>true if the listener has dealt with this frame</returns> /// <exception cref="AMQException"></exception> public bool MethodReceived(AMQMethodEvent evt) { AMQMethodBody method = evt.Method; try { bool ready = (evt.ChannelId == _channelId) && ProcessMethod(evt.ChannelId, method); if (ready) { _doneEvt = evt; _resetEvent.Set(); } return(ready); } catch (AMQException e) { Error(e); // we rethrow the error here, and the code in the frame dispatcher will go round // each listener informing them that an exception has been thrown throw e; } }
/// <summary> /// This method is called by the MINA dispatching thread. Note that it could /// be called before BlockForFrame() has been called. /// </summary> /// <param name="evt">the frame event</param> /// <returns>true if the listener has dealt with this frame</returns> /// <exception cref="AMQException"></exception> public bool MethodReceived(AMQMethodEvent evt) { AMQMethodBody method = evt.Method; try { bool ready = (evt.ChannelId == _channelId) && ProcessMethod(evt.ChannelId, method); if (ready) { _doneEvt = evt; _resetEvent.Set(); } return ready; } catch (AMQException e) { Error(e); // we rethrow the error here, and the code in the frame dispatcher will go round // each listener informing them that an exception has been thrown throw e; } }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { _logger.Debug("ConnectionCloseOk frame received"); // ConnectionCloseOkBody method = (ConnectionCloseOkBody)evt.Method; stateManager.ChangeState(AMQState.CONNECTION_CLOSED); }
public void MethodReceived(AMQStateManager stateManager, AMQMethodEvent evt) { stateManager.ChangeState(AMQState.CONNECTION_OPEN); }