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) { 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("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.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) { QueuePurgeOkBody body = (QueuePurgeOkBody)evt.Method; if (body != null) { _logger.InfoFormat("Received Queue.Purge-Ok message, message count {0}", body.MessageCount); } }
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) { _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 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);*/ }
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); }
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 OnMessage(IDataBlock message) { // Handle incorrect protocol version. if (message is ProtocolInitiation) { string error = String.Format("Protocol mismatch - {0}", message.ToString()); AMQException e = new AMQProtocolHeaderException(error); _log.Error("Closing connection because of protocol mismatch", e); //_protocolSession.CloseProtocolSession(); _stateManager.Error(e); return; } AMQFrame frame = (AMQFrame)message; // Console.WriteLine(">>> AMQFrame frame received: " + frame); //KHC if (frame.BodyFrame is AMQMethodBody) { if (_log.IsDebugEnabled) { _log.Debug("Method frame received: " + frame); } AMQMethodEvent evt = new AMQMethodEvent(frame.Channel, (AMQMethodBody)frame.BodyFrame, _protocolSession); try { bool wasAnyoneInterested = false; lock (_frameListeners.SyncRoot) { foreach (IAMQMethodListener listener in _frameListeners) { wasAnyoneInterested = listener.MethodReceived(evt) || wasAnyoneInterested; } } if (!wasAnyoneInterested) { throw new AMQException("AMQMethodEvent " + evt + " was not processed by any listener."); } } catch (Exception e) { foreach (IAMQMethodListener listener in _frameListeners) { listener.Error(e); } } } else if (frame.BodyFrame is ContentHeaderBody) { _protocolSession.MessageContentHeaderReceived(frame.Channel, (ContentHeaderBody)frame.BodyFrame); } else if (frame.BodyFrame is ContentBody) { _protocolSession.MessageContentBodyReceived(frame.Channel, (ContentBody)frame.BodyFrame); } else if (frame.BodyFrame is HeartbeatBody) { _log.Debug("HeartBeat received"); } else { Console.WriteLine("***** UNHANDLED FRAME ******"); } }