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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to