You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ra...@apache.org on 2015/08/14 21:08:22 UTC

[49/50] [abbrv] qpid-proton git commit: Build a parrallel transport to plug in the codec + type system with minimum effort. This allows to compare the the new codec with the old impl end-to-end.

Build a parrallel transport to plug in the codec + type system with minimum effort.
This allows to compare the the new codec with the old impl end-to-end.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/0208b9e8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/0208b9e8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/0208b9e8

Branch: refs/heads/rajith-codec
Commit: 0208b9e8d0bcc13ab961c0345bb023a7c67cb151
Parents: 081610d
Author: Rajith Attapattu <ra...@apache.org>
Authored: Fri Aug 14 15:03:17 2015 -0400
Committer: Rajith Attapattu <ra...@apache.org>
Committed: Fri Aug 14 15:03:17 2015 -0400

----------------------------------------------------------------------
 .../qpid/proton/codec2/DiscriptorRegistry.java  |  10 +-
 .../qpid/proton/engine/impl/FrameWriter2.java   |   4 +-
 .../qpid/proton/engine/impl/SaslImpl2.java      | 286 ++++++++++++-------
 .../proton/engine/impl/TransportSession.java    |  71 ++++-
 .../apache/qpid/proton/message2/Received.java   |   4 +-
 .../proton/messenger/impl/MessengerImpl.java    |   2 +-
 .../qpid/proton/security2/SaslChallenge.java    |  20 +-
 .../apache/qpid/proton/security2/SaslInit.java  |  20 +-
 .../qpid/proton/security2/SaslMechanisms.java   |  20 +-
 .../qpid/proton/security2/SaslOutcome.java      |  26 +-
 .../qpid/proton/security2/SaslResponse.java     |  20 +-
 11 files changed, 334 insertions(+), 149 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/codec2/DiscriptorRegistry.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/codec2/DiscriptorRegistry.java b/proton-j/src/main/java/org/apache/qpid/proton/codec2/DiscriptorRegistry.java
index 5720432..6536c6b 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/codec2/DiscriptorRegistry.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/codec2/DiscriptorRegistry.java
@@ -125,11 +125,11 @@ public class DiscriptorRegistry
 
     public static void registerSaslTypes()
     {
-        registerType(SaslMechanisms.DESCRIPTOR_LONG, SaslMechanisms.DESCRIPTOR_STRING, SaslMechanisms.FACTORY);
-        registerType(SaslInit.DESCRIPTOR_LONG, SaslInit.DESCRIPTOR_STRING, SaslInit.FACTORY);
-        registerType(SaslChallenge.DESCRIPTOR_LONG, SaslChallenge.DESCRIPTOR_STRING, SaslChallenge.FACTORY);
-        registerType(SaslResponse.DESCRIPTOR_LONG, SaslResponse.DESCRIPTOR_STRING, SaslResponse.FACTORY);
-        registerType(SaslOutcome.DESCRIPTOR_LONG, SaslOutcome.DESCRIPTOR_STRING, SaslOutcome.FACTORY);
+        registerType(SaslMechanisms.CODE, SaslMechanisms.DESCRIPTOR, SaslMechanisms.FACTORY);
+        registerType(SaslInit.CODE, SaslInit.DESCRIPTOR, SaslInit.FACTORY);
+        registerType(SaslChallenge.CODE, SaslChallenge.DESCRIPTOR, SaslChallenge.FACTORY);
+        registerType(SaslResponse.CODE, SaslResponse.DESCRIPTOR, SaslResponse.FACTORY);
+        registerType(SaslOutcome.CODE, SaslOutcome.DESCRIPTOR, SaslOutcome.FACTORY);
     }
 
     public static DescribedTypeFactory lookup(Object code)

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter2.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter2.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter2.java
index 9d1b432..8feac53 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter2.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameWriter2.java
@@ -146,7 +146,7 @@ class FrameWriter2
         _encoder.putShort((short) channel);
     }
 
-    void writeFrame(int channel, Performative frameBody, ByteBuffer payload, Runnable onPayloadTooLarge)
+    void writeFrame(int channel, Object frameBody, ByteBuffer payload, Runnable onPayloadTooLarge)
     {
         startFrame();
 
@@ -206,7 +206,7 @@ class FrameWriter2
         _framesOutput += 1;
     }
 
-    void writeFrame(Performative frameBody)
+    void writeFrame(Object frameBody)
     {
         writeFrame(0, frameBody, null, null);
     }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl2.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl2.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl2.java
index 3389789..3a27fb8 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl2.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SaslImpl2.java
@@ -17,7 +17,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *
-*/
+ */
 
 package org.apache.qpid.proton.engine.impl;
 
@@ -32,52 +32,69 @@ import java.util.logging.Logger;
 import org.apache.qpid.proton.ProtonUnsupportedOperationException;
 import org.apache.qpid.proton.amqp.Binary;
 import org.apache.qpid.proton.amqp.Symbol;
-import org.apache.qpid.proton.amqp.security.SaslChallenge;
-import org.apache.qpid.proton.amqp.security.SaslCode;
-import org.apache.qpid.proton.amqp.security.SaslFrameBody;
-import org.apache.qpid.proton.amqp.security.SaslInit;
-import org.apache.qpid.proton.amqp.security.SaslMechanisms;
-import org.apache.qpid.proton.amqp.security.SaslResponse;
-import org.apache.qpid.proton.codec.AMQPDefinedTypes;
-import org.apache.qpid.proton.codec.DecoderImpl;
-import org.apache.qpid.proton.codec.EncoderImpl;
+import org.apache.qpid.proton.codec2.ByteArrayDecoder;
+import org.apache.qpid.proton.codec2.ByteArrayEncoder;
 import org.apache.qpid.proton.engine.Sasl;
 import org.apache.qpid.proton.engine.Transport;
 import org.apache.qpid.proton.engine.TransportException;
-
-public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>, SaslFrameHandler
+import org.apache.qpid.proton.engine.impl.SaslImpl.Role;
+import org.apache.qpid.proton.security2.SaslBody;
+import org.apache.qpid.proton.security2.SaslChallenge;
+import org.apache.qpid.proton.security2.SaslCode;
+import org.apache.qpid.proton.security2.SaslInit;
+import org.apache.qpid.proton.security2.SaslMechanisms;
+import org.apache.qpid.proton.security2.SaslResponse;
+import org.apache.qpid.proton.transport2.Outcome;
+
+public class SaslImpl2 implements Sasl
 {
     private static final Logger _logger = Logger.getLogger(SaslImpl2.class.getName());
 
     public static final byte SASL_FRAME_TYPE = (byte) 1;
 
-    private final DecoderImpl _decoder = new DecoderImpl();
-    private final EncoderImpl _encoder = new EncoderImpl(_decoder);
+    private ByteArrayDecoder _decoder = new ByteArrayDecoder();
+
+    private ByteArrayEncoder _encoder = new ByteArrayEncoder();
 
     private final TransportImpl2 _transport;
 
     private boolean _tail_closed = false;
+
     private final ByteBuffer _inputBuffer;
+
     private boolean _head_closed = false;
+
     private final ByteBuffer _outputBuffer;
-    private final FrameWriter _frameWriter;
+
+    private final FrameWriter2 _frameWriter;
 
     private ByteBuffer _pending;
 
     private boolean _headerWritten;
-    private Binary _challengeResponse;
-    private SaslFrameParser _frameParser;
+
+    private byte[] _challengeResponse;
+
+    private SaslFrameParser2 _frameParser;
+
     private boolean _initReceived;
+
     private boolean _mechanismsSent;
+
     private boolean _initSent;
 
-    enum Role { CLIENT, SERVER };
+    enum Role
+    {
+        CLIENT, SERVER
+    };
 
     private SaslOutcome _outcome = SaslOutcome.PN_SASL_NONE;
+
     private SaslState _state = SaslState.PN_SASL_IDLE;
 
     private String _hostname;
+
     private boolean _done;
+
     private Symbol[] _mechanisms;
 
     private Symbol _chosenMechanism;
@@ -85,9 +102,10 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     private Role _role;
 
     /**
-     * @param maxFrameSize the size of the input and output buffers
-     * returned by {@link SaslTransportWrapper#getInputBuffer()} and
-     * {@link SaslTransportWrapper#getOutputBuffer()}.
+     * @param maxFrameSize
+     *            the size of the input and output buffers returned by
+     *            {@link SaslTransportWrapper#getInputBuffer()} and
+     *            {@link SaslTransportWrapper#getOutputBuffer()}.
      */
     SaslImpl2(TransportImpl2 transport, int maxFrameSize)
     {
@@ -95,16 +113,19 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         _inputBuffer = newWriteableBuffer(maxFrameSize);
         _outputBuffer = newWriteableBuffer(maxFrameSize);
 
-        AMQPDefinedTypes.registerAllTypes(_decoder,_encoder);
-        _frameParser = new SaslFrameParser(this, _decoder);
-        _frameWriter = new FrameWriter(_encoder, maxFrameSize, FrameWriter.SASL_FRAME_TYPE, null, _transport);
+        _frameParser = new SaslFrameParser2(this, _decoder);
+        _frameWriter = new FrameWriter2(_encoder, maxFrameSize, FrameWriter.SASL_FRAME_TYPE, null, _transport);
     }
 
-    void fail() {
-        if (_role == null || _role == Role.CLIENT) {
+    void fail()
+    {
+        if (_role == null || _role == Role.CLIENT)
+        {
             _role = Role.CLIENT;
             _initSent = true;
-        } else {
+        }
+        else
+        {
             _initReceived = true;
 
         }
@@ -112,10 +133,9 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         _outcome = SaslOutcome.PN_SASL_SYS;
     }
 
-    @Override
     public boolean isDone()
     {
-        return _done && (_role==Role.CLIENT || _initReceived);
+        return _done && (_role == Role.CLIENT || _initReceived);
     }
 
     private void writeSaslOutput()
@@ -123,7 +143,7 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         process();
         _frameWriter.readBytes(_outputBuffer);
 
-        if(_logger.isLoggable(Level.FINER))
+        if (_logger.isLoggable(Level.FINER))
         {
             _logger.log(Level.FINER, "Finished writing SASL output. Output Buffer : " + _outputBuffer);
         }
@@ -133,19 +153,19 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     {
         processHeader();
 
-        if(_role == Role.SERVER)
+        if (_role == Role.SERVER)
         {
-            if(!_mechanismsSent && _mechanisms != null)
+            if (!_mechanismsSent && _mechanisms != null)
             {
                 SaslMechanisms mechanisms = new SaslMechanisms();
 
-                mechanisms.setSaslServerMechanisms(_mechanisms);
+                mechanisms.setSaslServerMechanisms(LegacyTypeHelper.convertToStringArray(_mechanisms));
                 writeFrame(mechanisms);
                 _mechanismsSent = true;
                 _state = SaslState.PN_SASL_STEP;
             }
 
-            if(getState() == SaslState.PN_SASL_STEP && getChallengeResponse() != null)
+            if (getState() == SaslState.PN_SASL_STEP && getChallengeResponse() != null)
             {
                 SaslChallenge challenge = new SaslChallenge();
                 challenge.setChallenge(getChallengeResponse());
@@ -153,37 +173,36 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
                 setChallengeResponse(null);
             }
 
-            if(_done)
+            if (_done)
             {
-                org.apache.qpid.proton.amqp.security.SaslOutcome outcome =
-                        new org.apache.qpid.proton.amqp.security.SaslOutcome();
-                outcome.setCode(SaslCode.values()[_outcome.getCode()]);
+                org.apache.qpid.proton.security2.SaslOutcome outcome = new org.apache.qpid.proton.security2.SaslOutcome();
+                outcome.setSaslCode(SaslCode.values()[_outcome.getCode()]);
                 writeFrame(outcome);
             }
         }
-        else if(_role == Role.CLIENT)
+        else if (_role == Role.CLIENT)
         {
-            if(getState() == SaslState.PN_SASL_IDLE && _chosenMechanism != null)
+            if (getState() == SaslState.PN_SASL_IDLE && _chosenMechanism != null)
             {
                 processInit();
                 _state = SaslState.PN_SASL_STEP;
 
-                //HACK: if we received an outcome before
-                //we sent our init, change the state now
-                if(_outcome != SaslOutcome.PN_SASL_NONE)
+                // HACK: if we received an outcome before
+                // we sent our init, change the state now
+                if (_outcome != SaslOutcome.PN_SASL_NONE)
                 {
                     _state = classifyStateFromOutcome(_outcome);
                 }
             }
 
-            if(getState() == SaslState.PN_SASL_STEP && getChallengeResponse() != null)
+            if (getState() == SaslState.PN_SASL_STEP && getChallengeResponse() != null)
             {
                 processResponse();
             }
         }
     }
 
-    private void writeFrame(SaslFrameBody frameBody)
+    private void writeFrame(SaslBody frameBody)
     {
         _frameWriter.writeFrame(frameBody);
     }
@@ -191,12 +210,12 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     @Override
     final public int recv(byte[] bytes, int offset, int size)
     {
-        if(_pending == null)
+        if (_pending == null)
         {
             return -1;
         }
         final int written = pourBufferToArray(_pending, bytes, offset, size);
-        if(!_pending.hasRemaining())
+        if (!_pending.hasRemaining())
         {
             _pending = null;
         }
@@ -208,13 +227,13 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     {
         byte[] data = new byte[size];
         System.arraycopy(bytes, offset, data, 0, size);
-        setChallengeResponse(new Binary(data));
+        setChallengeResponse(data);
         return size;
     }
 
     final int processHeader()
     {
-        if(!_headerWritten)
+        if (!_headerWritten)
         {
             _frameWriter.writeHeader(AmqpHeader.SASL_HEADER);
 
@@ -244,12 +263,12 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         return _state;
     }
 
-    final Binary getChallengeResponse()
+    final byte[] getChallengeResponse()
     {
         return _challengeResponse;
     }
 
-    final void setChallengeResponse(Binary challengeResponse)
+    final void setChallengeResponse(byte[] challengeResponse)
     {
         _challengeResponse = challengeResponse;
     }
@@ -257,16 +276,16 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     @Override
     public void setMechanisms(String... mechanisms)
     {
-        if(mechanisms != null)
+        if (mechanisms != null)
         {
             _mechanisms = new Symbol[mechanisms.length];
-            for(int i = 0; i < mechanisms.length; i++)
+            for (int i = 0; i < mechanisms.length; i++)
             {
                 _mechanisms[i] = Symbol.valueOf(mechanisms[i]);
             }
         }
 
-        if(_role == Role.CLIENT)
+        if (_role == Role.CLIENT)
         {
             assert mechanisms != null;
             assert mechanisms.length == 1;
@@ -278,20 +297,20 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     @Override
     public String[] getRemoteMechanisms()
     {
-        if(_role == Role.SERVER)
+        if (_role == Role.SERVER)
         {
             return _chosenMechanism == null ? new String[0] : new String[] { _chosenMechanism.toString() };
         }
-        else if(_role == Role.CLIENT)
+        else if (_role == Role.CLIENT)
         {
-            if(_mechanisms == null)
+            if (_mechanisms == null)
             {
                 return new String[0];
             }
             else
             {
                 String[] remoteMechanisms = new String[_mechanisms.length];
-                for(int i = 0; i < _mechanisms.length; i++)
+                for (int i = 0; i < _mechanisms.length; i++)
                 {
                     remoteMechanisms[i] = _mechanisms[i].toString();
                 }
@@ -319,34 +338,54 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         setPending(initialResponse.asByteBuffer());
     }
 
-    @Override
-    public void handle(SaslFrameBody frameBody, Binary payload)
+    public void handle(SaslBody frameBody, byte[] payload)
     {
-        frameBody.invoke(this, payload, null);
+        if (SaslInit.CODE == frameBody.getCode())
+        {
+            handleInit((SaslInit) frameBody, payload, null);
+        }
+        else if (SaslResponse.CODE == frameBody.getCode())
+        {
+            handleResponse((SaslResponse) frameBody, payload, null);
+        }
+        else if (SaslMechanisms.CODE == frameBody.getCode())
+        {
+            handleMechanisms((SaslMechanisms) frameBody, payload, null);
+        }
+        else if (SaslChallenge.CODE == frameBody.getCode())
+        {
+            handleChallenge((SaslChallenge) frameBody, payload, null);
+        }
+        else if (org.apache.qpid.proton.security2.SaslOutcome.CODE == frameBody.getCode())
+        {
+            handleOutcome((org.apache.qpid.proton.security2.SaslOutcome) frameBody, payload, null);
+        }
+        else
+        {
+            throw new IllegalArgumentException("SASLImpl Invalid code: " + frameBody.getCode());
+        }
     }
 
-    @Override
-    public void handleInit(SaslInit saslInit, Binary payload, Void context)
+    public void handleInit(SaslInit saslInit, byte[] payload, Void context)
     {
-        if(_role == null)
+        if (_role == null)
         {
             server();
         }
         checkRole(Role.SERVER);
         _hostname = saslInit.getHostname();
-        _chosenMechanism = saslInit.getMechanism();
+        _chosenMechanism = Symbol.valueOf(saslInit.getMechanism());
         _initReceived = true;
-        if(saslInit.getInitialResponse() != null)
+        if (saslInit.getInitialResponse() != null)
         {
-            setPending(saslInit.getInitialResponse().asByteBuffer());
+            setPending(ByteBuffer.wrap(saslInit.getInitialResponse()));
         }
     }
 
-    @Override
-    public void handleResponse(SaslResponse saslResponse, Binary payload, Void context)
+    public void handleResponse(SaslResponse saslResponse, byte[] payload, Void context)
     {
         checkRole(Role.SERVER);
-        setPending(saslResponse.getResponse()  == null ? null : saslResponse.getResponse().asByteBuffer());
+        setPending(saslResponse.getResponse() == null ? null : ByteBuffer.wrap(saslResponse.getResponse()));
     }
 
     @Override
@@ -361,39 +400,34 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
 
     private void checkRole(Role role)
     {
-        if(role != _role)
+        if (role != _role)
         {
             throw new IllegalStateException("Role is " + _role + " but should be " + role);
         }
     }
 
-    @Override
-    public void handleMechanisms(SaslMechanisms saslMechanisms, Binary payload, Void context)
+    public void handleMechanisms(SaslMechanisms saslMechanisms, byte[] payload, Void context)
     {
-        if(_role == null)
+        if (_role == null)
         {
             client();
         }
         checkRole(Role.CLIENT);
-        _mechanisms = saslMechanisms.getSaslServerMechanisms();
+        _mechanisms = LegacyTypeHelper.convertToSymbolArray(saslMechanisms.getSaslServerMechanisms());
     }
 
-    @Override
-    public void handleChallenge(SaslChallenge saslChallenge, Binary payload, Void context)
+    public void handleChallenge(SaslChallenge saslChallenge, byte[] payload, Void context)
     {
         checkRole(Role.CLIENT);
-        setPending(saslChallenge.getChallenge()  == null ? null : saslChallenge.getChallenge().asByteBuffer());
+        setPending(saslChallenge.getChallenge() == null ? null : ByteBuffer.wrap(saslChallenge.getChallenge()));
     }
 
-    @Override
-    public void handleOutcome(org.apache.qpid.proton.amqp.security.SaslOutcome saslOutcome,
-                              Binary payload,
-                              Void context)
+    public void handleOutcome(org.apache.qpid.proton.security2.SaslOutcome saslOutcome, byte[] payload, Void context)
     {
         checkRole(Role.CLIENT);
-        for(SaslOutcome outcome : SaslOutcome.values())
+        for (SaslOutcome outcome : SaslOutcome.values())
         {
-            if(outcome.getCode() == saslOutcome.getCode().ordinal())
+            if (outcome.getCode() == saslOutcome.getSaslCode().ordinal())
             {
                 _outcome = outcome;
                 if (_state != SaslState.PN_SASL_IDLE)
@@ -405,7 +439,7 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         }
         _done = true;
 
-        if(_logger.isLoggable(Level.FINE))
+        if (_logger.isLoggable(Level.FINE))
         {
             _logger.fine("Handled outcome: " + this);
         }
@@ -428,8 +462,8 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     {
         SaslInit init = new SaslInit();
         init.setHostname(_hostname);
-        init.setMechanism(_chosenMechanism);
-        if(getChallengeResponse() != null)
+        init.setMechanism(_chosenMechanism.toString());
+        if (getChallengeResponse() != null)
         {
             init.setInitialResponse(getChallengeResponse());
             setChallengeResponse(null);
@@ -445,11 +479,11 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         _chosenMechanism = Symbol.valueOf("PLAIN");
         byte[] usernameBytes = username.getBytes();
         byte[] passwordBytes = password.getBytes();
-        byte[] data = new byte[usernameBytes.length+passwordBytes.length+2];
+        byte[] data = new byte[usernameBytes.length + passwordBytes.length + 2];
         System.arraycopy(usernameBytes, 0, data, 1, usernameBytes.length);
-        System.arraycopy(passwordBytes, 0, data, 2+usernameBytes.length, passwordBytes.length);
+        System.arraycopy(passwordBytes, 0, data, 2 + usernameBytes.length, passwordBytes.length);
 
-        setChallengeResponse(new Binary(data));
+        setChallengeResponse(data);
     }
 
     @Override
@@ -462,7 +496,7 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     public void client()
     {
         _role = Role.CLIENT;
-        if(_mechanisms != null)
+        if (_mechanisms != null)
         {
             assert _mechanisms.length == 1;
 
@@ -479,7 +513,7 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     @Override
     public void allowSkip(boolean allowSkip)
     {
-        //TODO: implement
+        // TODO: implement
         throw new ProtonUnsupportedOperationException();
     }
 
@@ -492,20 +526,19 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
     public String toString()
     {
         StringBuilder builder = new StringBuilder();
-        builder
-            .append("SaslImpl [_outcome=").append(_outcome)
-            .append(", state=").append(_state)
-            .append(", done=").append(_done)
-            .append(", role=").append(_role)
-            .append("]");
+        builder.append("SaslImpl [_outcome=").append(_outcome).append(", state=").append(_state).append(", done=")
+                .append(_done).append(", role=").append(_role).append("]");
         return builder.toString();
     }
 
     private class SaslTransportWrapper implements TransportWrapper
     {
         private final TransportInput _underlyingInput;
+
         private final TransportOutput _underlyingOutput;
+
         private boolean _outputComplete;
+
         private final ByteBuffer _head;
 
         private SaslTransportWrapper(TransportInput input, TransportOutput output)
@@ -518,10 +551,10 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
 
         private void fillOutputBuffer()
         {
-            if(isOutputInSaslMode())
+            if (isOutputInSaslMode())
             {
                 SaslImpl2.this.writeSaslOutput();
-                if(_done)
+                if (_done)
                 {
                     _outputComplete = true;
                 }
@@ -529,23 +562,28 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         }
 
         /**
-         * TODO rationalise this method with respect to the other similar checks of _role/_initReceived etc
+         * TODO rationalise this method with respect to the other similar checks
+         * of _role/_initReceived etc
+         * 
          * @see SaslImpl2#isDone()
          */
         private boolean isInputInSaslMode()
         {
-            return _role == null || (_role == Role.CLIENT && !_done) ||(_role == Role.SERVER && (!_initReceived || !_done));
+            return _role == null || (_role == Role.CLIENT && !_done)
+                    || (_role == Role.SERVER && (!_initReceived || !_done));
         }
 
         private boolean isOutputInSaslMode()
         {
-            return _role == null || (_role == Role.CLIENT && (!_done || !_initSent)) || (_role == Role.SERVER && !_outputComplete);
+            return _role == null || (_role == Role.CLIENT && (!_done || !_initSent))
+                    || (_role == Role.SERVER && !_outputComplete);
         }
 
         @Override
         public int capacity()
         {
-            if (_tail_closed) return Transport.END_OF_STREAM;
+            if (_tail_closed)
+                return Transport.END_OF_STREAM;
             if (isInputInSaslMode())
             {
                 return _inputBuffer.remaining();
@@ -559,7 +597,8 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         @Override
         public int position()
         {
-            if (_tail_closed) return Transport.END_OF_STREAM;
+            if (_tail_closed)
+                return Transport.END_OF_STREAM;
             if (isInputInSaslMode())
             {
                 return _inputBuffer.position();
@@ -600,19 +639,22 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
         public void close_tail()
         {
             _tail_closed = true;
-            if (isInputInSaslMode()) {
+            if (isInputInSaslMode())
+            {
                 _head_closed = true;
                 _underlyingInput.close_tail();
-            } else {
+            }
+            else
+            {
                 _underlyingInput.close_tail();
             }
         }
 
         private void reallyProcessInput() throws TransportException
         {
-            if(isInputInSaslMode())
+            if (isInputInSaslMode())
             {
-                if(_logger.isLoggable(Level.FINER))
+                if (_logger.isLoggable(Level.FINER))
                 {
                     _logger.log(Level.FINER, SaslImpl2.this + " about to call input.");
                 }
@@ -620,9 +662,9 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
                 _frameParser.input(_inputBuffer);
             }
 
-            if(!isInputInSaslMode())
+            if (!isInputInSaslMode())
             {
-                if(_logger.isLoggable(Level.FINER))
+                if (_logger.isLoggable(Level.FINER))
                 {
                     _logger.log(Level.FINER, SaslImpl2.this + " about to call plain input");
                 }
@@ -704,4 +746,26 @@ public class SaslImpl2 implements Sasl, SaslFrameBody.SaslFrameBodyHandler<Void>
             _underlyingOutput.close_head();
         }
     }
+
+    @Override
+    public String getHostname()
+    {
+        if (_role != null)
+        {
+            checkRole(Role.SERVER);
+        }
+
+        return _hostname;
+    }
+
+    @Override
+    public void setRemoteHostname(String hostname)
+    {
+        if (_role != null)
+        {
+            checkRole(Role.CLIENT);
+        }
+
+        _hostname = hostname;
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportSession.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportSession.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportSession.java
index 79d953b..0a510e1 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportSession.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportSession.java
@@ -361,7 +361,7 @@ class TransportSession
         unsetRemoteChannel();
     }
 
-    private void setRemoteIncomingWindow(UnsignedInteger incomingWindow)
+    void setRemoteIncomingWindow(UnsignedInteger incomingWindow)
     {
         _remoteIncomingWindow = incomingWindow;
     }
@@ -371,7 +371,7 @@ class TransportSession
         _remoteIncomingWindow = _remoteIncomingWindow.subtract(UnsignedInteger.ONE);
     }
 
-    private void setRemoteOutgoingWindow(UnsignedInteger outgoingWindow)
+    void setRemoteOutgoingWindow(UnsignedInteger outgoingWindow)
     {
         _remoteOutgoingWindow = outgoingWindow;
     }
@@ -402,12 +402,13 @@ class TransportSession
         }
     }
 
-    private void setRemoteNextOutgoingId(UnsignedInteger nextOutgoingId)
+    //Changing visibility temporarily to bridge the code
+    void setRemoteNextOutgoingId(UnsignedInteger nextOutgoingId)
     {
         _remoteNextOutgoingId = nextOutgoingId;
     }
 
-    private void setRemoteNextIncomingId(UnsignedInteger remoteNextIncomingId)
+    void setRemoteNextIncomingId(UnsignedInteger remoteNextIncomingId)
     {
         _remoteNextIncomingId = remoteNextIncomingId;
     }
@@ -508,4 +509,64 @@ class TransportSession
     {
         _beginSent = true;
     }
-}
+    
+    int getIncomingDeliveryId()
+    {
+        return _incomingDeliveryId == null ? -1 : _incomingDeliveryId.intValue();
+    }
+    
+    UnsignedInteger getIncomingDeliveryIdAsUnsignedInteger()
+    {
+        return _incomingDeliveryId;
+    }
+    
+    DeliveryImpl getUnsettledIncomingDeliveryById(UnsignedInteger id)
+    {
+        return _unsettledIncomingDeliveriesById.get(id);
+    }
+    
+    void putUnsettledIncomingDelivery(UnsignedInteger id, DeliveryImpl delivery)
+    {
+        _unsettledIncomingDeliveriesById.put(id, delivery);
+    }
+
+    void incrementUnsettledIncomingSize()
+    {
+        _unsettledIncomingSize++;
+    }
+
+    void setIncomingWindowSize(UnsignedInteger size)
+    {
+        _incomingWindowSize = size;
+    }
+    
+    void handleDisposition(org.apache.qpid.proton.transport2.Disposition disposition)
+    {
+        UnsignedInteger id = UnsignedInteger.valueOf(disposition.getFirst());
+        UnsignedInteger last = disposition.getLast() == -1 ? id : UnsignedInteger.valueOf(disposition.getLast());
+        final Map<UnsignedInteger, DeliveryImpl> unsettledDeliveries =
+                disposition.getRole() == org.apache.qpid.proton.transport2.Role.RECEIVER ? _unsettledOutgoingDeliveriesById
+                        : _unsettledIncomingDeliveriesById;
+
+        while(id.compareTo(last)<=0)
+        {
+            DeliveryImpl delivery = unsettledDeliveries.get(id);
+            if(delivery != null)
+            {
+                if(disposition.getState() != null)
+                {
+                    delivery.setRemoteDeliveryState(LegacyTypeHelper.convertToLegacyDeliveryState(disposition.getState()));
+                }
+                if(Boolean.TRUE.equals(disposition.getSettled()))
+                {
+                    delivery.setRemoteSettled(true);
+                    unsettledDeliveries.remove(id);
+                }
+                delivery.updateWork();
+
+                getSession().getConnection().put(Event.Type.DELIVERY, delivery);
+            }
+            id = id.add(UnsignedInteger.ONE);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/message2/Received.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/message2/Received.java b/proton-j/src/main/java/org/apache/qpid/proton/message2/Received.java
index 7f7945d..e20e746 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/message2/Received.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/message2/Received.java
@@ -84,9 +84,9 @@ public final class Received implements DeliveryState, Encodable
             {
 
             case 0:
-                received.setSectionOffset((long) l.get(1));
+                received.setSectionOffset((Long) l.get(1));
             case 1:
-                received.setSectionNumber((int) l.get(0));
+                received.setSectionNumber((Integer) l.get(0));
             }
             return received;
         }

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
index 2ce57e9..f0d7119 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/MessengerImpl.java
@@ -461,7 +461,7 @@ public class MessengerImpl implements Messenger
         StoreEntry entry = _incomingStore.get( null );
         if (entry != null)
         {
-            Message message = Proton.message();
+            Message message = Proton.message2();
             message.decode( entry.getEncodedMsg(), 0, entry.getEncodedLength() );
 
             _incomingTracker = new TrackerImpl(TrackerImpl.Type.INCOMING,

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslChallenge.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslChallenge.java b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslChallenge.java
index 7240895..e37a0aa 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslChallenge.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslChallenge.java
@@ -28,11 +28,11 @@ import org.apache.qpid.proton.codec2.DescribedTypeFactory;
 import org.apache.qpid.proton.codec2.Encodable;
 import org.apache.qpid.proton.codec2.Encoder;
 
-public final class SaslChallenge implements Encodable
+public final class SaslChallenge implements Encodable, SaslBody
 {
-    public final static long DESCRIPTOR_LONG = 0x0000000000000042L;
+    public final static long CODE = 0x0000000000000042L;
 
-    public final static String DESCRIPTOR_STRING = "amqp:sasl-challenge:list";
+    public final static String DESCRIPTOR = "amqp:sasl-challenge:list";
 
     public final static Factory FACTORY = new Factory();
 
@@ -57,7 +57,7 @@ public final class SaslChallenge implements Encodable
     public void encode(Encoder encoder)
     {
         encoder.putDescriptor();
-        encoder.putUlong(DESCRIPTOR_LONG);
+        encoder.putUlong(CODE);
         encoder.putList();
         encoder.putBinary(_challenge, 0, _challenge.length);
         encoder.end();
@@ -85,4 +85,16 @@ public final class SaslChallenge implements Encodable
     {
         return "SaslChallenge{" + "challenge=" + _challenge + '}';
     }
+
+    @Override
+    public long getCode()
+    {
+        return CODE;
+    }
+
+    @Override
+    public String getDescriptor()
+    {
+        return DESCRIPTOR;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslInit.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslInit.java b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslInit.java
index b0facf9..5292d12 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslInit.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslInit.java
@@ -28,11 +28,11 @@ import org.apache.qpid.proton.codec2.DescribedTypeFactory;
 import org.apache.qpid.proton.codec2.Encodable;
 import org.apache.qpid.proton.codec2.Encoder;
 
-public final class SaslInit implements Encodable
+public final class SaslInit implements Encodable, SaslBody
 {
-    public final static long DESCRIPTOR_LONG = 0x0000000000000042L;
+    public final static long CODE = 0x0000000000000042L;
 
-    public final static String DESCRIPTOR_STRING = "amqp:sasl-challenge:list";
+    public final static String DESCRIPTOR = "amqp:sasl-challenge:list";
 
     public final static Factory FACTORY = new Factory();
 
@@ -81,7 +81,7 @@ public final class SaslInit implements Encodable
     public void encode(Encoder encoder)
     {
         encoder.putDescriptor();
-        encoder.putUlong(DESCRIPTOR_LONG);
+        encoder.putUlong(CODE);
         encoder.putList();
         encoder.putSymbol(_mechanism);
         encoder.putBinary(_initialResponse, 0, _initialResponse.length);
@@ -121,4 +121,16 @@ public final class SaslInit implements Encodable
                ", hostname='" + _hostname + '\'' +
                '}';
     }
+
+    @Override
+    public long getCode()
+    {
+        return CODE;
+    }
+
+    @Override
+    public String getDescriptor()
+    {
+        return DESCRIPTOR;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslMechanisms.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslMechanisms.java b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslMechanisms.java
index 60451d7..e67e597 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslMechanisms.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslMechanisms.java
@@ -30,11 +30,11 @@ import org.apache.qpid.proton.codec2.Encodable;
 import org.apache.qpid.proton.codec2.Encoder;
 import org.apache.qpid.proton.codec2.Type;
 
-public final class SaslMechanisms implements Encodable
+public final class SaslMechanisms implements Encodable, SaslBody
 {
-    public final static long DESCRIPTOR_LONG = 0x0000000000000040L;
+    public final static long CODE = 0x0000000000000040L;
 
-    public final static String DESCRIPTOR_STRING = "amqp:sasl-mechanisms:list";
+    public final static String DESCRIPTOR = "amqp:sasl-mechanisms:list";
 
     public final static Factory FACTORY = new Factory();
 
@@ -59,7 +59,7 @@ public final class SaslMechanisms implements Encodable
     public void encode(Encoder encoder)
     {
         encoder.putDescriptor();
-        encoder.putUlong(DESCRIPTOR_LONG);
+        encoder.putUlong(CODE);
         encoder.putList();
         encoder.putArray(Type.SYMBOL);
         for (String mech : _saslServerMechanisms)
@@ -102,4 +102,16 @@ public final class SaslMechanisms implements Encodable
         return "SaslMechanisms{" + "saslServerMechanisms="
                 + (_saslServerMechanisms == null ? null : Arrays.asList(_saslServerMechanisms)) + '}';
     }
+
+    @Override
+    public long getCode()
+    {
+        return CODE;
+    }
+
+    @Override
+    public String getDescriptor()
+    {
+        return DESCRIPTOR;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslOutcome.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslOutcome.java b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslOutcome.java
index cebb66c..010ad1f 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslOutcome.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslOutcome.java
@@ -28,11 +28,11 @@ import org.apache.qpid.proton.codec2.DescribedTypeFactory;
 import org.apache.qpid.proton.codec2.Encodable;
 import org.apache.qpid.proton.codec2.Encoder;
 
-public final class SaslOutcome implements Encodable
+public final class SaslOutcome implements Encodable, SaslBody
 {
-    public final static long DESCRIPTOR_LONG = 0x0000000000000044L;
+    public final static long CODE = 0x0000000000000044L;
 
-    public final static String DESCRIPTOR_STRING = "amqp:sasl-saslOutcome:list";
+    public final static String DESCRIPTOR = "amqp:sasl-saslOutcome:list";
 
     public final static Factory FACTORY = new Factory();
 
@@ -40,12 +40,12 @@ public final class SaslOutcome implements Encodable
 
     private byte[] _additionalData;
 
-    public SaslCode getCode()
+    public SaslCode getSaslCode()
     {
         return _code;
     }
 
-    public void setCode(SaslCode code)
+    public void setSaslCode(SaslCode code)
     {
         if (code == null)
         {
@@ -69,7 +69,7 @@ public final class SaslOutcome implements Encodable
     public void encode(Encoder encoder)
     {
         encoder.putDescriptor();
-        encoder.putUlong(DESCRIPTOR_LONG);
+        encoder.putUlong(CODE);
         encoder.putList();
         encoder.putUbyte(_code.getValue());
         if (_additionalData != null)
@@ -98,7 +98,7 @@ public final class SaslOutcome implements Encodable
                 case 0:
                     saslOutcome.setAdditionalData( (byte[]) l.get( 1 ) );
                 case 1:
-                    saslOutcome.setCode(SaslCode.valueOf((Byte)l.get(0)));
+                    saslOutcome.setSaslCode(SaslCode.valueOf((Byte)l.get(0)));
             }
 
 
@@ -114,4 +114,16 @@ public final class SaslOutcome implements Encodable
                ", _additionalData=" + _additionalData +
                '}';
     }
+
+    @Override
+    public long getCode()
+    {
+        return CODE;
+    }
+
+    @Override
+    public String getDescriptor()
+    {
+        return DESCRIPTOR;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/0208b9e8/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslResponse.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslResponse.java b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslResponse.java
index 5d8ff15..0831d65 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslResponse.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/security2/SaslResponse.java
@@ -28,11 +28,11 @@ import org.apache.qpid.proton.codec2.DescribedTypeFactory;
 import org.apache.qpid.proton.codec2.Encodable;
 import org.apache.qpid.proton.codec2.Encoder;
 
-public final class SaslResponse implements Encodable
+public final class SaslResponse implements Encodable, SaslBody
 {
-    public final static long DESCRIPTOR_LONG = 0x0000000000000043L;
+    public final static long CODE = 0x0000000000000043L;
 
-    public final static String DESCRIPTOR_STRING = "amqp:sasl-response:list";
+    public final static String DESCRIPTOR = "amqp:sasl-response:list";
 
     public final static Factory FACTORY = new Factory();
 
@@ -57,7 +57,7 @@ public final class SaslResponse implements Encodable
     public void encode(Encoder encoder)
     {
         encoder.putDescriptor();
-        encoder.putUlong(DESCRIPTOR_LONG);
+        encoder.putUlong(CODE);
         encoder.putList();
         encoder.putBinary(_response, 0, _response.length);
         encoder.end();
@@ -85,4 +85,16 @@ public final class SaslResponse implements Encodable
     {
         return "SaslResponse{response=" + _response + '}';
     }
+
+    @Override
+    public long getCode()
+    {
+        return CODE;
+    }
+
+    @Override
+    public String getDescriptor()
+    {
+        return DESCRIPTOR;
+    }
 }
\ No newline at end of file


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