You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/12/10 10:51:30 UTC

svn commit: r1719047 - /qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java

Author: rgodfrey
Date: Thu Dec 10 09:51:30 2015
New Revision: 1719047

URL: http://svn.apache.org/viewvc?rev=1719047&view=rev
Log:
QPID-6939 : Process all possible bytes in AMQPConnection_1_0.received()

Modified:
    qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java

Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java?rev=1719047&r1=1719046&r2=1719047&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java Thu Dec 10 09:51:30 2015
@@ -337,105 +337,115 @@ public class AMQPConnection_1_0 extends
                 Binary bin = new Binary(data);
                 RAW_LOGGER.debug("RECV[" + getNetwork().getRemoteAddress() + "] : " + bin.toString());
             }
-            switch(_state)
+            ProtocolHandler frameHandler;
+            int remaining;
+
+            do
             {
-                case A:
-                    if (msg.hasRemaining())
-                    {
-                        msg.get();
-                    }
-                    else
-                    {
-                        break;
-                    }
-                case M:
-                    if (msg.hasRemaining())
-                    {
-                        msg.get();
-                    }
-                    else
-                    {
-                        _state = State.M;
-                        break;
-                    }
+                frameHandler = _frameHandler;
+                remaining = msg.remaining();
 
-                case Q:
-                    if (msg.hasRemaining())
-                    {
-                        msg.get();
-                    }
-                    else
-                    {
-                        _state = State.Q;
-                        break;
-                    }
-                case P:
-                    if (msg.hasRemaining())
-                    {
-                        msg.get();
-                    }
-                    else
-                    {
-                        _state = State.P;
-                        break;
-                    }
-                case PROTOCOL:
-                    if (msg.hasRemaining())
-                    {
-                        msg.get();
-                    }
-                    else
-                    {
-                        _state = State.PROTOCOL;
-                        break;
-                    }
-                case MAJOR:
-                    if (msg.hasRemaining())
-                    {
-                        _major = msg.get();
-                    }
-                    else
-                    {
-                        _state = State.MAJOR;
-                        break;
-                    }
-                case MINOR:
-                    if (msg.hasRemaining())
-                    {
-                        _minor = msg.get();
-                    }
-                    else
-                    {
-                        _state = State.MINOR;
-                        break;
-                    }
-                case REVISION:
-                    if (msg.hasRemaining())
-                    {
-                        _revision = msg.get();
+                switch (_state)
+                {
+                    case A:
+                        if (msg.hasRemaining())
+                        {
+                            msg.get();
+                        }
+                        else
+                        {
+                            break;
+                        }
+                    case M:
+                        if (msg.hasRemaining())
+                        {
+                            msg.get();
+                        }
+                        else
+                        {
+                            _state = State.M;
+                            break;
+                        }
+
+                    case Q:
+                        if (msg.hasRemaining())
+                        {
+                            msg.get();
+                        }
+                        else
+                        {
+                            _state = State.Q;
+                            break;
+                        }
+                    case P:
+                        if (msg.hasRemaining())
+                        {
+                            msg.get();
+                        }
+                        else
+                        {
+                            _state = State.P;
+                            break;
+                        }
+                    case PROTOCOL:
+                        if (msg.hasRemaining())
+                        {
+                            msg.get();
+                        }
+                        else
+                        {
+                            _state = State.PROTOCOL;
+                            break;
+                        }
+                    case MAJOR:
+                        if (msg.hasRemaining())
+                        {
+                            _major = msg.get();
+                        }
+                        else
+                        {
+                            _state = State.MAJOR;
+                            break;
+                        }
+                    case MINOR:
+                        if (msg.hasRemaining())
+                        {
+                            _minor = msg.get();
+                        }
+                        else
+                        {
+                            _state = State.MINOR;
+                            break;
+                        }
+                    case REVISION:
+                        if (msg.hasRemaining())
+                        {
+                            _revision = msg.get();
 
-                        _state = State.FRAME;
-                    }
-                    else
-                    {
-                        _state = State.REVISION;
-                        break;
-                    }
-                case FRAME:
-                    if (msg.hasRemaining())
-                    {
-                        AccessController.doPrivileged(new PrivilegedAction<Void>()
+                            _state = State.FRAME;
+                        }
+                        else
+                        {
+                            _state = State.REVISION;
+                            break;
+                        }
+                    case FRAME:
+                        if (msg.hasRemaining())
                         {
-                            @Override
-                            public Void run()
+                            AccessController.doPrivileged(new PrivilegedAction<Void>()
                             {
-                                _frameHandler = _frameHandler.parse(msg);
-                                return null;
-                            }
-                        }, getAccessControllerContext());
+                                @Override
+                                public Void run()
+                                {
+                                    _frameHandler = _frameHandler.parse(msg);
+                                    return null;
+                                }
+                            }, getAccessControllerContext());
 
-                    }
+                        }
+                }
             }
+            while(_frameHandler != frameHandler || msg.remaining() != remaining);
         }
         catch(ConnectionScopedRuntimeException e)
         {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org