/// <summary>
        /// Finds the state transition handler.
        /// </summary>
        /// <param name="currentState">State of the current.</param>
        /// <param name="frame">The frame.</param>
        /// <returns></returns>
        /// <exception cref="IllegalStateTransitionException">if the state transition if not allowed</exception>
        private IStateAwareMethodListener FindStateTransitionHandler(AMQState currentState,
                                                                     AMQMethodBody frame)
        {
            Type clazz = frame.GetType();

            if (_logger.IsDebugEnabled)
            {
                _logger.Debug("Looking for state transition handler for frame " + clazz);
            }
            IDictionary classToHandlerMap = (IDictionary)_state2HandlersMap[currentState];

            if (classToHandlerMap == null)
            {
                // if no specialised per state handler is registered look for a
                // handler registered for "all" states
                return(FindStateTransitionHandler(AMQState.ALL, frame));
            }
            IStateAwareMethodListener handler = (IStateAwareMethodListener)classToHandlerMap[clazz];

            if (handler == null)
            {
                if (currentState == AMQState.ALL)
                {
                    _logger.Debug("No state transition handler defined for receiving frame " + frame);
                    Console.WriteLine(" *** No state transition handler defined for receiving frame " + frame);   //KHC
                    return(null);
                }
                else
                {
                    // if no specialised per state handler is registered look for a
                    // handler registered for "all" states
                    return(FindStateTransitionHandler(AMQState.ALL, frame));
                }
            }
            else
            {
                return(handler);
            }
        }