You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/07/02 14:17:23 UTC

svn commit: r1607335 - in /qpid/proton/trunk/proton-j/src: main/java/org/apache/qpid/proton/engine/Transport.java main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java

Author: robbie
Date: Wed Jul  2 12:17:23 2014
New Revision: 1607335

URL: http://svn.apache.org/r1607335
Log:
PROTON-543: document that Transport#sasl() must be called prior to any processing if a sasl layer is desired. Throw ISE from sasl() if process() has been called before the first sasl() invocation.

Modified:
    qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java
    qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
    qpid/proton/trunk/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java

Modified: qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java?rev=1607335&r1=1607334&r2=1607335&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java (original)
+++ qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java Wed Jul  2 12:17:23 2014
@@ -167,7 +167,15 @@ public interface Transport extends Endpo
      */
     void outputConsumed();
 
-    Sasl sasl();
+    /**
+     * Signal the transport to expect SASL frames used to establish a SASL layer prior to
+     * performing the AMQP protocol version negotiation. This must first be performed before
+     * the transport is used for processing. Subsequent invocations will return the same
+     * {@link Sasl} object.
+     *
+     * @throws IllegalStateException if transport processing has already begun prior to initial invocation
+     */
+    Sasl sasl() throws IllegalStateException;
 
     /**
      * Wrap this transport's output and input to apply SSL encryption and decryption respectively.

Modified: qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1607335&r1=1607334&r2=1607335&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java (original)
+++ qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java Wed Jul  2 12:17:23 2014
@@ -101,6 +101,7 @@ public class TransportImpl extends Endpo
     private TransportResult _lastTransportResult = TransportResultFactory.ok();
 
     private boolean _init;
+    private boolean _processingStarted;
 
     private FrameHandler _frameHandler = this;
     private boolean _head_closed = false;
@@ -290,6 +291,11 @@ public class TransportImpl extends Endpo
     {
         if(_sasl == null)
         {
+            if(_processingStarted)
+            {
+                throw new IllegalStateException("Sasl can't be initiated after transport has started processing");
+            }
+
             init();
             _sasl = new SaslImpl(_remoteMaxFrameSize);
             TransportWrapper transportWrapper = _sasl.wrap(_inputProcessor, _outputProcessor);
@@ -1259,6 +1265,8 @@ public class TransportImpl extends Endpo
     @Override
     public void process() throws TransportException
     {
+        _processingStarted = true;
+
         try {
             init();
             _inputProcessor.process();

Modified: qpid/proton/trunk/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java?rev=1607335&r1=1607334&r2=1607335&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java (original)
+++ qpid/proton/trunk/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/TransportImplTest.java Wed Jul  2 12:17:23 2014
@@ -207,4 +207,19 @@ public class TransportImplTest
         assertTrue("Expecting second buffer to have bytes", buf.remaining() > 0);
         assertTrue("Expecting second buffer to not be full", buf.remaining() < Transport.MIN_MAX_FRAME_SIZE);
     }
+
+    @Test
+    public void testAttemptToInitiateSaslAfterProcessingBeginsCausesIllegalStateException()
+    {
+        _transport.process();
+
+        try
+        {
+            _transport.sasl();
+        }
+        catch(IllegalStateException ise)
+        {
+            //expected, sasl must be initiated before processing begins
+        }
+    }
 }



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