Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-c/src/transport/transport.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-c/src/transport/transport.c?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-c/src/transport/transport.c
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-c/src/transport/transport.c
 Sat Apr 26 15:37:34 2014
@@ -284,7 +284,8 @@ int pn_transport_bind(pn_transport_t *tr
   pn_incref(connection);
   if (transport->open_rcvd) {
     PN_SET_REMOTE(connection->endpoint.state, PN_REMOTE_ACTIVE);
-    pn_event_t *event = pn_collector_put(connection->collector, 
PN_CONNECTION_STATE);
+    pn_event_t *event = pn_collector_put(connection->collector,
+                                         PN_CONNECTION_REMOTE_STATE);
     if (event) {
       pn_event_init_connection(event, connection);
     }
@@ -474,7 +475,8 @@ int pn_do_open(pn_dispatcher_t *disp)
   if (conn) {
     PN_SET_REMOTE(conn->endpoint.state, PN_REMOTE_ACTIVE);
 
-    pn_event_t *event = pn_collector_put(conn->collector, PN_CONNECTION_STATE);
+    pn_event_t *event = pn_collector_put(conn->collector,
+                                         PN_CONNECTION_REMOTE_STATE);
     if (event) {
       pn_event_init_connection(event, conn);
     }
@@ -507,7 +509,8 @@ int pn_do_begin(pn_dispatcher_t *disp)
   pn_map_channel(transport, disp->channel, ssn);
   PN_SET_REMOTE(ssn->endpoint.state, PN_REMOTE_ACTIVE);
 
-  pn_event_t *event = pn_collector_put(transport->connection->collector, 
PN_SESSION_STATE);
+  pn_event_t *event = pn_collector_put(transport->connection->collector,
+                                       PN_SESSION_REMOTE_STATE);
   if (event) {
     pn_event_init_session(event, ssn);
   }
@@ -681,7 +684,8 @@ int pn_do_attach(pn_dispatcher_t *disp)
     link->state.delivery_count = idc;
   }
 
-  pn_event_t *event = pn_collector_put(transport->connection->collector, 
PN_LINK_STATE);
+  pn_event_t *event = pn_collector_put(transport->connection->collector,
+                                       PN_LINK_REMOTE_STATE);
   if (event) {
     pn_event_init_link(event, link);
   }
@@ -951,7 +955,8 @@ int pn_do_detach(pn_dispatcher_t *disp)
   if (closed)
   {
     PN_SET_REMOTE(link->endpoint.state, PN_REMOTE_CLOSED);
-    pn_event_t *event = pn_collector_put(transport->connection->collector, 
PN_LINK_STATE);
+    pn_event_t *event = pn_collector_put(transport->connection->collector,
+                                         PN_LINK_REMOTE_STATE);
     if (event) {
       pn_event_init_link(event, link);
     }
@@ -970,7 +975,8 @@ int pn_do_end(pn_dispatcher_t *disp)
   int err = pn_scan_error(disp->args, &ssn->endpoint.remote_condition, 
SCAN_ERROR_DEFAULT);
   if (err) return err;
   PN_SET_REMOTE(ssn->endpoint.state, PN_REMOTE_CLOSED);
-  pn_event_t *event = pn_collector_put(transport->connection->collector, 
PN_SESSION_STATE);
+  pn_event_t *event = pn_collector_put(transport->connection->collector,
+                                       PN_SESSION_REMOTE_STATE);
   if (event) {
     pn_event_init_session(event, ssn);
   }
@@ -986,7 +992,8 @@ int pn_do_close(pn_dispatcher_t *disp)
   if (err) return err;
   transport->close_rcvd = true;
   PN_SET_REMOTE(conn->endpoint.state, PN_REMOTE_CLOSED);
-  pn_event_t *event = pn_collector_put(transport->connection->collector, 
PN_CONNECTION_STATE);
+  pn_event_t *event = pn_collector_put(transport->connection->collector,
+                                       PN_CONNECTION_REMOTE_STATE);
   if (event) {
     pn_event_init_connection(event, conn);
   }

Modified: qpid/proton/branches/fadams-javascript-binding/proton-c/src/util.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-c/src/util.c?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-c/src/util.c 
(original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-c/src/util.c Sat Apr 
26 15:37:34 2014
@@ -23,12 +23,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
-#ifndef __cplusplus
-#include <stdint.h>
-#include <stdbool.h>
-#else
 #include <proton/type_compat.h>
-#endif
 #include <ctype.h>
 #include <string.h>
 #include <proton/error.h>
@@ -106,6 +101,42 @@ void pn_print_data(const char *bytes, si
   pn_fprint_data(stdout, bytes, size);
 }
 
+void pni_urldecode(const char *src, char *dst)
+{
+  const char *in = src;
+  char *out = dst;
+  while (*in != '\0')
+  {
+    if ('%' == *in)
+    {
+      if ((in[1] != '\0') && (in[2] != '\0'))
+      {
+        char esc[3];
+        esc[0] = in[1];
+        esc[1] = in[2];
+        esc[2] = '\0';
+        unsigned long d = strtoul(esc, NULL, 16);
+        *out = (char)d;
+        in += 3;
+        out++;
+      }
+      else
+      {
+        *out = *in;
+        in++;
+        out++;
+      }
+    }
+    else
+    {
+      *out = *in;
+      in++;
+      out++;
+    }
+  }
+  *out = '\0';
+}
+
 // Parse URL syntax:
 // [ <scheme> :// ] [ <user> [ : <password> ] @ ] <host> [ : <port> ] [ / 
<path> ]
 // <user>, <password>, <host>, <port> cannot contain any of '@', ':', '/'
@@ -141,13 +172,24 @@ void pni_parse_url(char *url, char **sch
   }
 
   *host = url;
+  char *open = (*url == '[') ? url : 0;
+  if (open) {
+    char *close = strchr(open, ']');
+    if (close) {
+        *host = open + 1;
+        *close = '\0';
+        url = close + 1;
+    }
+  }
 
-  char *colon = strchr(*host, ':');
+  char *colon = strchr(url, ':');
   if (colon) {
     *colon = '\0';
     *port = colon + 1;
   }
 
+  if (*user) pni_urldecode(*user, *user);
+  if (*pass) pni_urldecode(*pass, *pass);
 }
 
 void pn_vfatal(const char *fmt, va_list ap)

Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/CMakeLists.txt
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/CMakeLists.txt?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/CMakeLists.txt 
(original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/CMakeLists.txt Sat 
Apr 26 15:37:34 2014
@@ -17,8 +17,12 @@
 # under the License.
 #
 
+include(UseJava)
+include(ProtonUseJava)
 set(CMAKE_JAVA_TARGET_VERSION ${PN_VERSION})
 file(GLOB_RECURSE SOURCES_ABS "src/main/java/*.java")
 add_jar(proton-j ${SOURCES_ABS})
 rebuild_jar(proton-j proton-j-${PN_VERSION}.jar)
+set (JAVA_INSTALL_DIR ${SHARE_INSTALL_DIR}/java CACHE PATH "Installation 
directory for all JARs except those using JNI")
+mark_as_advanced (JAVA_INSTALL_DIR)
 install_jar(proton-j ${JAVA_INSTALL_DIR})

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
 Sat Apr 26 15:37:34 2014
@@ -28,16 +28,38 @@ package org.apache.qpid.proton.engine;
 
 public interface Event
 {
+    public enum Category {
+        PROTOCOL;
+    }
 
     public enum Type {
-        CONNECTION_STATE,
-        SESSION_STATE,
-        LINK_STATE,
-        LINK_FLOW,
-        DELIVERY,
-        TRANSPORT
+        CONNECTION_REMOTE_STATE(Category.PROTOCOL, 1),
+        CONNECTION_LOCAL_STATE(Category.PROTOCOL, 2),
+        SESSION_REMOTE_STATE(Category.PROTOCOL, 3),
+        SESSION_LOCAL_STATE(Category.PROTOCOL, 4),
+        LINK_REMOTE_STATE(Category.PROTOCOL, 5),
+        LINK_LOCAL_STATE(Category.PROTOCOL, 6),
+        LINK_FLOW(Category.PROTOCOL, 7),
+        DELIVERY(Category.PROTOCOL, 8),
+        TRANSPORT(Category.PROTOCOL, 9);
+
+        private int _opcode;
+        private Category _category;
+
+        private Type(Category c, int o)
+        {
+            this._category = c;
+            this._opcode = o;
+        }
+
+        public Category getCategory()
+        {
+            return this._category;
+        }
     }
 
+    Category getCategory();
+
     Type getType();
 
     Connection getConnection();

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
 Sat Apr 26 15:37:34 2014
@@ -31,7 +31,7 @@ import org.apache.qpid.proton.amqp.trans
 
 public class ConnectionImpl extends EndpointImpl implements ProtonJConnection
 {
-    public static final int MAX_CHANNELS = 255;
+    public static final int MAX_CHANNELS = 65535;
 
     private List<SessionImpl> _sessions = new ArrayList<SessionImpl>();
     private EndpointImpl _transportTail;
@@ -201,7 +201,7 @@ public class ConnectionImpl extends Endp
         setRemoteDesiredCapabilities(open.getDesiredCapabilities());
         setRemoteOfferedCapabilities(open.getOfferedCapabilities());
         setRemoteProperties(open.getProperties());
-        EventImpl ev = put(Event.Type.CONNECTION_STATE);
+        EventImpl ev = put(Event.Type.CONNECTION_REMOTE_STATE);
         if (ev != null) {
             ev.init(this);
         }
@@ -582,4 +582,12 @@ public class ConnectionImpl extends Endp
         }
     }
 
+    @Override
+    protected void localStateChanged()
+    {
+        EventImpl ev = put(Event.Type.CONNECTION_LOCAL_STATE);
+        if (ev != null) {
+            ev.init(this);
+        }
+    }
 }

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java
 Sat Apr 26 15:37:34 2014
@@ -37,6 +37,8 @@ public abstract class EndpointImpl imple
     private EndpointImpl _transportPrev;
     private Object _context;
 
+    protected abstract void localStateChanged();
+
     public void open()
     {
         switch(_localState)
@@ -47,6 +49,7 @@ public abstract class EndpointImpl imple
                 // TODO
             case UNINITIALIZED:
                 _localState = EndpointState.ACTIVE;
+                localStateChanged();
         }
         modified();
     }
@@ -62,6 +65,7 @@ public abstract class EndpointImpl imple
                 // TODO
             case ACTIVE:
                 _localState = EndpointState.CLOSED;
+                localStateChanged();
         }
         modified();
     }

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
 Sat Apr 26 15:37:34 2014
@@ -47,6 +47,11 @@ class EventImpl implements Event
         this.type = type;
     }
 
+    public Category getCategory()
+    {
+        return type.getCategory();
+    }
+
     public Type getType()
     {
         return type;

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/FrameParser.java
 Sat Apr 26 15:37:34 2014
@@ -338,7 +338,7 @@ class FrameParser implements TransportIn
                     // type
 
                     int type = in.get() & 0xFF;
-                    int channel = in.getShort() & 0xFF;
+                    int channel = in.getShort() & 0xFFFF;
 
                     if(type != 0)
                     {

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
 Sat Apr 26 15:37:34 2014
@@ -27,6 +27,7 @@ import org.apache.qpid.proton.engine.End
 import org.apache.qpid.proton.engine.Link;
 import org.apache.qpid.proton.amqp.transport.Source;
 import org.apache.qpid.proton.amqp.transport.Target;
+import org.apache.qpid.proton.engine.Event;
 
 public abstract class LinkImpl extends EndpointImpl implements Link
 {
@@ -373,4 +374,12 @@ public abstract class LinkImpl extends E
         return _head;
     }
 
+    @Override
+    protected void localStateChanged()
+    {
+        EventImpl ev = getConnectionImpl().put(Event.Type.LINK_LOCAL_STATE);
+        if (ev != null) {
+            ev.init(this);
+        }
+    }
 }

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java
 Sat Apr 26 15:37:34 2014
@@ -119,5 +119,4 @@ public class SenderImpl  extends LinkImp
             advance();
         }*/
     }
-
 }

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
 Sat Apr 26 15:37:34 2014
@@ -24,6 +24,7 @@ import java.util.*;
 import org.apache.qpid.proton.engine.EndpointState;
 import org.apache.qpid.proton.engine.ProtonJSession;
 import org.apache.qpid.proton.engine.Session;
+import org.apache.qpid.proton.engine.Event;
 
 public class SessionImpl extends EndpointImpl implements ProtonJSession
 {
@@ -182,4 +183,12 @@ public class SessionImpl extends Endpoin
         _outgoingDeliveries += delta;
     }
 
+    @Override
+    protected void localStateChanged()
+    {
+        EventImpl ev = getConnectionImpl().put(Event.Type.SESSION_LOCAL_STATE);
+        if (ev != null) {
+            ev.init(this);
+        }
+    }
 }

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
 Sat Apr 26 15:37:34 2014
@@ -76,8 +76,8 @@ public class TransportImpl extends Endpo
     private boolean _isCloseSent;
 
     private boolean _headerWritten;
-    private TransportSession[] _remoteSessions;
-    private TransportSession[] _localSessions;
+    private Map<Integer, TransportSession> _remoteSessions = new 
HashMap<Integer, TransportSession>();
+    private Map<Integer, TransportSession> _localSessions = new 
HashMap<Integer, TransportSession>();
 
     private TransportInput _inputProcessor;
     private TransportOutput _outputProcessor;
@@ -198,10 +198,6 @@ public class TransportImpl extends Endpo
         ((ConnectionImpl) conn).setTransport(this);
         _connectionEndpoint = (ConnectionImpl) conn;
 
-        _localSessions = new 
TransportSession[_connectionEndpoint.getMaxChannels()+1];
-        _remoteSessions = new 
TransportSession[_connectionEndpoint.getMaxChannels()+1];
-
-
         if(getRemoteState() != EndpointState.UNINITIALIZED)
         {
             _connectionEndpoint.handleOpen(_open);
@@ -802,22 +798,23 @@ public class TransportImpl extends Endpo
 
     private int allocateLocalChannel(TransportSession transportSession)
     {
-        for( int i=0; i < _localSessions.length; i++)
+        for (int i = 0; i < _connectionEndpoint.getMaxChannels(); i++)
         {
-            if( _localSessions[i] == null )
+            if (!_localSessions.containsKey(i))
             {
-                _localSessions[i] = transportSession;
+                _localSessions.put(i, transportSession);
                 transportSession.setLocalChannel(i);
                 return i;
             }
         }
+
         return -1;
     }
 
     private int freeLocalChannel(TransportSession transportSession)
     {
         final int channel = transportSession.getLocalChannel();
-        _localSessions[channel] = null;
+        _localSessions.remove(channel);
         transportSession.freeLocalChannel();
         return channel;
     }
@@ -953,7 +950,7 @@ public class TransportImpl extends Endpo
     public void handleBegin(Begin begin, Binary payload, Integer channel)
     {
         // TODO - check channel < max_channel
-        TransportSession transportSession = _remoteSessions[channel];
+        TransportSession transportSession = _remoteSessions.get(channel);
         if(transportSession != null)
         {
             // TODO - fail due to begin on begun session
@@ -969,16 +966,16 @@ public class TransportImpl extends Endpo
             else
             {
                 // TODO check null
-                transportSession = 
_localSessions[begin.getRemoteChannel().intValue()];
+                transportSession = 
_localSessions.get(begin.getRemoteChannel().intValue());
                 session = transportSession.getSession();
 
             }
             transportSession.setRemoteChannel(channel);
             session.setRemoteState(EndpointState.ACTIVE);
             transportSession.setNextIncomingId(begin.getNextOutgoingId());
-            _remoteSessions[channel] = transportSession;
+            _remoteSessions.put(channel, transportSession);
 
-            EventImpl ev = _connectionEndpoint.put(Event.Type.SESSION_STATE);
+            EventImpl ev = 
_connectionEndpoint.put(Event.Type.SESSION_REMOTE_STATE);
             if (ev != null) {
                 ev.init(session);
             }
@@ -989,7 +986,7 @@ public class TransportImpl extends Endpo
     @Override
     public void handleAttach(Attach attach, Binary payload, Integer channel)
     {
-        TransportSession transportSession = _remoteSessions[channel];
+        TransportSession transportSession = _remoteSessions.get(channel);
         if(transportSession == null)
         {
             // TODO - fail due to attach on non-begun session
@@ -1037,7 +1034,7 @@ public class TransportImpl extends Endpo
 
             }
 
-            EventImpl ev = _connectionEndpoint.put(Event.Type.LINK_STATE);
+            EventImpl ev = 
_connectionEndpoint.put(Event.Type.LINK_REMOTE_STATE);
             if (ev != null) {
                 ev.init(link);
             }
@@ -1047,7 +1044,7 @@ public class TransportImpl extends Endpo
     @Override
     public void handleFlow(Flow flow, Binary payload, Integer channel)
     {
-        TransportSession transportSession = _remoteSessions[channel];
+        TransportSession transportSession = _remoteSessions.get(channel);
         if(transportSession == null)
         {
             // TODO - fail due to attach on non-begun session
@@ -1063,7 +1060,7 @@ public class TransportImpl extends Endpo
     public void handleTransfer(Transfer transfer, Binary payload, Integer 
channel)
     {
         // TODO - check channel < max_channel
-        TransportSession transportSession = _remoteSessions[channel];
+        TransportSession transportSession = _remoteSessions.get(channel);
         if(transportSession != null)
         {
             transportSession.handleTransfer(transfer, payload);
@@ -1077,7 +1074,7 @@ public class TransportImpl extends Endpo
     @Override
     public void handleDisposition(Disposition disposition, Binary payload, 
Integer channel)
     {
-        TransportSession transportSession = _remoteSessions[channel];
+        TransportSession transportSession = _remoteSessions.get(channel);
         if(transportSession == null)
         {
             // TODO - fail due to attach on non-begun session
@@ -1091,7 +1088,7 @@ public class TransportImpl extends Endpo
     @Override
     public void handleDetach(Detach detach, Binary payload, Integer channel)
     {
-        TransportSession transportSession = _remoteSessions[channel];
+        TransportSession transportSession = _remoteSessions.get(channel);
         if(transportSession == null)
         {
             // TODO - fail due to attach on non-begun session
@@ -1111,7 +1108,7 @@ public class TransportImpl extends Endpo
                     link.getRemoteCondition().copyFrom(detach.getError());
                 }
 
-                EventImpl ev = _connectionEndpoint.put(Event.Type.LINK_STATE);
+                EventImpl ev = 
_connectionEndpoint.put(Event.Type.LINK_REMOTE_STATE);
                 if (ev != null) {
                     ev.init(link);
                 }
@@ -1126,14 +1123,14 @@ public class TransportImpl extends Endpo
     @Override
     public void handleEnd(End end, Binary payload, Integer channel)
     {
-        TransportSession transportSession = _remoteSessions[channel];
+        TransportSession transportSession = _remoteSessions.get(channel);
         if(transportSession == null)
         {
             // TODO - fail due to attach on non-begun session
         }
         else
         {
-            _remoteSessions[channel] = null;
+            _remoteSessions.remove(channel);
             transportSession.receivedEnd();
             SessionImpl session = transportSession.getSession();
             session.setRemoteState(EndpointState.CLOSED);
@@ -1143,7 +1140,7 @@ public class TransportImpl extends Endpo
                 session.getRemoteCondition().copyFrom(errorCondition);
             }
 
-            EventImpl ev = _connectionEndpoint.put(Event.Type.SESSION_STATE);
+            EventImpl ev = 
_connectionEndpoint.put(Event.Type.SESSION_REMOTE_STATE);
             if (ev != null) {
                 ev.init(session);
             }
@@ -1163,7 +1160,7 @@ public class TransportImpl extends Endpo
                 
_connectionEndpoint.getRemoteCondition().copyFrom(close.getError());
             }
 
-            EventImpl ev = 
_connectionEndpoint.put(Event.Type.CONNECTION_STATE);
+            EventImpl ev = 
_connectionEndpoint.put(Event.Type.CONNECTION_REMOTE_STATE);
             if (ev != null) {
                 ev.init(_connectionEndpoint);
             }
@@ -1368,4 +1365,8 @@ public class TransportImpl extends Endpo
         }
     }
 
+    @Override
+    protected void localStateChanged()
+    {
+    }
 }

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/message/impl/MessageImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/message/impl/MessageImpl.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/message/impl/MessageImpl.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/message/impl/MessageImpl.java
 Sat Apr 26 15:37:34 2014
@@ -44,6 +44,20 @@ public class MessageImpl implements Prot
     private Section _body;
     private Footer _footer;
     private MessageFormat _format = MessageFormat.DATA;
+    
+    private static class EncoderDecoderPair {
+      DecoderImpl decoder = new DecoderImpl();
+      EncoderImpl encoder = new EncoderImpl(decoder);
+      {
+          AMQPDefinedTypes.registerAllTypes(decoder, encoder);
+      }
+    }
+
+    private static final ThreadLocal<EncoderDecoderPair> tlsCodec = new 
ThreadLocal<EncoderDecoderPair>() {
+          @Override protected EncoderDecoderPair initialValue() {
+            return new EncoderDecoderPair();
+          }
+      };
 
     /**
      * @deprecated This constructor's visibility will be reduced to the 
default scope in a future release.
@@ -559,10 +573,7 @@ public class MessageImpl implements Prot
     @Override
     public int decode(byte[] data, int offset, int length)
     {
-        DecoderImpl decoder = new DecoderImpl();
-        EncoderImpl encoder = new EncoderImpl(decoder);
-
-        AMQPDefinedTypes.registerAllTypes(decoder, encoder);
+        DecoderImpl decoder = tlsCodec.get().decoder;
         final ByteBuffer buffer = ByteBuffer.wrap(data, offset, length);
         decoder.setByteBuffer(buffer);
 
@@ -668,6 +679,8 @@ public class MessageImpl implements Prot
 
         }
 
+        decoder.setByteBuffer(null);
+        
         return length-buffer.remaining();
 
     }
@@ -695,9 +708,7 @@ public class MessageImpl implements Prot
     public int encode(WritableBuffer buffer)
     {
         int length = buffer.remaining();
-        DecoderImpl decoder = new DecoderImpl();
-        EncoderImpl encoder = new EncoderImpl(decoder);
-        AMQPDefinedTypes.registerAllTypes(decoder, encoder);
+        EncoderImpl encoder = tlsCodec.get().encoder;
         encoder.setByteBuffer(buffer);
 
         if(getHeader() != null)
@@ -728,6 +739,7 @@ public class MessageImpl implements Prot
         {
             encoder.writeObject(getFooter());
         }
+        encoder.setByteBuffer((WritableBuffer)null);
 
         return length - buffer.remaining();
     }

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java
 Sat Apr 26 15:37:34 2014
@@ -87,12 +87,24 @@ class Address
             hp = uphp;
         }
 
-        int colon = hp.indexOf(':');
-        if (colon >= 0) {
-            _host = hp.substring(0, colon);
-            _port = hp.substring(colon + 1);
-        } else {
-            _host = hp;
+        if (hp.startsWith("[")) {
+            int close = hp.indexOf(']');
+            if (close >= 0) {
+                _host = hp.substring(1, close);
+                if (hp.substring(close + 1).startsWith(":")) {
+                    _port = hp.substring(close + 2);
+                }
+            }
+        }
+
+        if (_host == null) {
+            int colon = hp.indexOf(':');
+            if (colon >= 0) {
+                _host = hp.substring(0, colon);
+                _port = hp.substring(colon + 1);
+            } else {
+                _host = hp;
+            }
         }
 
         if (_host.startsWith("~")) {

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py
 Sat Apr 26 15:37:34 2014
@@ -938,9 +938,14 @@ def pn_transport_error(trans):
 
 from org.apache.qpid.proton.engine import Event
 
-PN_CONNECTION_STATE = Event.Type.CONNECTION_STATE
-PN_SESSION_STATE = Event.Type.SESSION_STATE
-PN_LINK_STATE = Event.Type.LINK_STATE
+PN_EVENT_CATEGORY_PROTOCOL = Event.Category.PROTOCOL
+
+PN_CONNECTION_LOCAL_STATE = Event.Type.CONNECTION_LOCAL_STATE
+PN_CONNECTION_REMOTE_STATE = Event.Type.CONNECTION_REMOTE_STATE
+PN_SESSION_LOCAL_STATE = Event.Type.SESSION_LOCAL_STATE
+PN_SESSION_REMOTE_STATE = Event.Type.SESSION_REMOTE_STATE
+PN_LINK_LOCAL_STATE = Event.Type.LINK_LOCAL_STATE
+PN_LINK_REMOTE_STATE = Event.Type.LINK_REMOTE_STATE
 PN_LINK_FLOW = Event.Type.LINK_FLOW
 PN_DELIVERY = Event.Type.DELIVERY
 PN_TRANSPORT = Event.Type.TRANSPORT
@@ -957,6 +962,9 @@ def pn_collector_peek(coll):
 def pn_collector_pop(coll):
   coll.pop()
 
+def pn_collector_free(coll):
+  pass
+
 def pn_event_connection(event):
   return wrap(event.getConnection(), pn_connection_wrapper)
 
@@ -972,8 +980,14 @@ def pn_event_delivery(event):
 def pn_event_transport(event):
   return wrap(event.getTransport(), pn_transport_wrapper)
 
+def pn_event_class(event):
+  return event.getClass()
+
 def pn_event_type(event):
   return event.getType()
 
 def pn_event_type_name(etype):
   return str(etype)
+
+def pn_event_category(event):
+  return event.getCategory()

Modified: 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java
 Sat Apr 26 15:37:34 2014
@@ -24,7 +24,20 @@ public class AddressTest {
                testParse("user@host", null, "user", null, "host", null, null);
                testParse("user:1243^&^:pw@host:423", null, "user", 
"1243^&^:pw", "host", "423", null);
                testParse("user:1243^&^:pw@host:423/Foo.bar:90087", null, 
"user", "1243^&^:pw", "host", "423", "Foo.bar:90087");
-               testParse("user:1243^&^:pw@host:423/Foo.bar:90087@somewhere", 
null, "user", "1243^&^:pw", "host", "423", "Foo.bar:90087@somewhere");
+        testParse("user:1243^&^:pw@host:423/Foo.bar:90087@somewhere", null, 
"user", "1243^&^:pw", "host", "423", "Foo.bar:90087@somewhere");
+        testParse("[::1]", null, null, null, "::1", null, null);
+        testParse("[::1]:amqp", null, null, null, "::1", "amqp", null);
+        testParse("user@[::1]", null, "user", null, "::1", null, null);
+        testParse("user@[::1]:amqp", null, "user", null, "::1", "amqp", null);
+        testParse("user:1243^&^:pw@[::1]:amqp", null, "user", "1243^&^:pw", 
"::1", "amqp", null);
+        testParse("user:1243^&^:pw@[::1]:amqp/Foo.bar:90087", null, "user", 
"1243^&^:pw", "::1", "amqp", "Foo.bar:90087");
+        testParse("user:1243^&^:pw@[::1:amqp/Foo.bar:90087", null, "user", 
"1243^&^:pw", "[", ":1:amqp", "Foo.bar:90087");
+        testParse("user:1243^&^:pw@::1]:amqp/Foo.bar:90087", null, "user", 
"1243^&^:pw", "", ":1]:amqp", "Foo.bar:90087");
+        testParse("amqp://user@[::1]", "amqp", "user", null, "::1", null, 
null);
+        testParse("amqp://user@[::1]:amqp", "amqp", "user", null, "::1", 
"amqp", null);
+        testParse("amqp://user@[1234:52:0:1260:f2de:f1ff:fe59:8f87]:amqp", 
"amqp", "user", null, "1234:52:0:1260:f2de:f1ff:fe59:8f87", "amqp", null);
+        testParse("amqp://user:1243^&^:pw@[::1]:amqp", "amqp", "user", 
"1243^&^:pw", "::1", "amqp", null);
+        testParse("amqp://user:1243^&^:pw@[::1]:amqp/Foo.bar:90087", "amqp", 
"user", "1243^&^:pw", "::1", "amqp", "Foo.bar:90087");
                testParse("amqp://host", "amqp", null, null, "host", null, 
null);
                testParse("amqp://user@host", "amqp", "user", null, "host", 
null, null);
                testParse("amqp://user@host/path:%", "amqp", "user", null, 
"host", null, "path:%");

Modified: 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/common.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/common.py?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/common.py
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/common.py
 Sat Apr 26 15:37:34 2014
@@ -333,6 +333,7 @@ class MessengerApp(object):
         self.certificate = None
         self.privatekey = None
         self.password = None
+        self._output = None
 
     def start(self, verbose=False):
         """ Begin executing the test """
@@ -363,8 +364,15 @@ class MessengerApp(object):
 
     def stdout(self):
         #self._process.communicate()[0]
+        if not self._output or not self._output[0]:
+            return "*** NO STDOUT ***"
         return self._output[0]
 
+    def stderr(self):
+        if not self._output or not self._output[1]:
+            return "*** NO STDERR ***"
+        return self._output[1]
+
     def cmdline(self):
         if not self._cmdline:
             self._build_command()

Modified: 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py
 Sat Apr 26 15:37:34 2014
@@ -2102,7 +2102,7 @@ class EventTest(Test):
     self.expect(coll)
     c2.open()
     self.pump()
-    self.expect(coll, Event.CONNECTION_STATE)
+    self.expect(coll, Event.CONNECTION_REMOTE_STATE)
     self.pump()
     self.expect(coll)
 
@@ -2113,7 +2113,21 @@ class EventTest(Test):
 
     self.expect(coll)
     self.pump()
-    self.expect(coll, Event.SESSION_STATE, Event.LINK_STATE)
+    self.expect(coll, Event.SESSION_REMOTE_STATE, Event.LINK_REMOTE_STATE)
+
+    c1.open()
+    ssn2 = c1.session()
+    ssn2.open()
+    rcv = ssn2.receiver("receiver")
+    rcv.open()
+    self.pump()
+    self.expect(coll,
+                Event.CONNECTION_LOCAL_STATE,
+                Event.TRANSPORT,
+                Event.SESSION_LOCAL_STATE,
+                Event.TRANSPORT,
+                Event.LINK_LOCAL_STATE,
+                Event.TRANSPORT)
 
   def testFlowEvents(self):
     snd, rcv = self.link("test-link")
@@ -2122,7 +2136,7 @@ class EventTest(Test):
     rcv.open()
     rcv.flow(10)
     self.pump()
-    self.expect(coll, Event.LINK_STATE, Event.LINK_FLOW)
+    self.expect(coll, Event.LINK_REMOTE_STATE, Event.LINK_FLOW)
     rcv.flow(10)
     self.pump()
     self.expect(coll, Event.LINK_FLOW)
@@ -2135,7 +2149,7 @@ class EventTest(Test):
     rcv.open()
     rcv.flow(10)
     self.pump()
-    self.expect(coll, Event.TRANSPORT, Event.TRANSPORT)
+    self.expect(coll, Event.LINK_LOCAL_STATE, Event.TRANSPORT, Event.TRANSPORT)
     snd.delivery("delivery")
     snd.send("Hello World!")
     snd.advance()
@@ -2143,7 +2157,7 @@ class EventTest(Test):
     self.expect(coll)
     snd.open()
     self.pump()
-    self.expect(coll, Event.LINK_STATE, Event.DELIVERY)
+    self.expect(coll, Event.LINK_REMOTE_STATE, Event.DELIVERY)
 
   def testDeliveryEventsDisp(self):
     snd, rcv, coll = self.testFlowEvents()
@@ -2151,7 +2165,11 @@ class EventTest(Test):
     dlv = snd.delivery("delivery")
     snd.send("Hello World!")
     assert snd.advance()
-    self.expect(coll, Event.TRANSPORT, Event.TRANSPORT, Event.TRANSPORT)
+    self.expect(coll,
+                Event.LINK_LOCAL_STATE,
+                Event.TRANSPORT,
+                Event.TRANSPORT,
+                Event.TRANSPORT)
     self.pump()
     self.expect(coll)
     rdlv = rcv.current

Modified: 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/soak.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/soak.py?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/soak.py
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/soak.py
 Sat Apr 26 15:37:34 2014
@@ -44,31 +44,31 @@ class AppTests(Test):
 
     @property
     def iterations(self):
-        return int(self.default("iterations", 2, fast=1, valgrind=1))
+        return int(self.default("iterations", 2, fast=1, valgrind=2))
 
     @property
     def send_count(self):
-        return int(self.default("send_count", 17, fast=1, valgrind=1))
+        return int(self.default("send_count", 17, fast=1, valgrind=2))
 
     @property
     def target_count(self):
-        return int(self.default("target_count", 5, fast=1, valgrind=1))
+        return int(self.default("target_count", 5, fast=1, valgrind=2))
 
     @property
     def send_batch(self):
-        return int(self.default("send_batch", 7, fast=1, valgrind=1))
+        return int(self.default("send_batch", 7, fast=1, valgrind=2))
 
     @property
     def forward_count(self):
-        return int(self.default("forward_count", 5, fast=1, valgrind=1))
+        return int(self.default("forward_count", 5, fast=1, valgrind=2))
 
     @property
     def port_count(self):
-        return int(self.default("port_count", 3, fast=1, valgrind=1))
+        return int(self.default("port_count", 3, fast=1, valgrind=2))
 
     @property
     def sender_count(self):
-        return int(self.default("sender_count", 3, fast=1, valgrind=1))
+        return int(self.default("sender_count", 3, fast=1, valgrind=2))
 
     def valgrind_test(self):
         self.is_valgrind = True
@@ -94,13 +94,21 @@ class AppTests(Test):
                 S.wait()
                 #print("SENDER OUTPUT:")
                 #print( S.stdout() )
-                assert S.status() == 0, "Command '%s' failed" % 
str(S.cmdline())
+                assert S.status() == 0, ("Command '%s' failed status=%d: '%s' 
'%s'"
+                                         % (str(S.cmdline()),
+                                            S.status(),
+                                            S.stdout(),
+                                            S.stderr()))
 
         for R in self.receivers:
             R.wait()
             #print("RECEIVER OUTPUT")
             #print( R.stdout() )
-            assert R.status() == 0, "Command '%s' failed" % str(R.cmdline())
+            assert R.status() == 0, ("Command '%s' failed status=%d: '%s' '%s'"
+                                     % (str(R.cmdline()),
+                                        R.status(),
+                                        R.stdout(),
+                                        R.stderr()))
 
 #
 # Traffic passing tests based on the Messenger apps

Modified: 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py 
(original)
+++ 
qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/ssl.py 
Sat Apr 26 15:37:34 2014
@@ -18,7 +18,10 @@
 #
 
 import os, common
+import random
+import string
 import subprocess
+
 from proton import *
 from common import Skipped, pump
 
@@ -877,7 +880,9 @@ class MessengerSSLTests(common.Test):
 
         msg = Message()
         msg.address = "amqps://127.0.0.1:12345"
-        msg.body = "Hello World!"
+        # make sure a large, uncompressible message body works!
+        msg.body = "".join(random.choice(string.ascii_letters)
+                           for x in range(10099))
         trk = self.client.put(msg)
         self.client.send()
 

Modified: 
qpid/proton/branches/fadams-javascript-binding/tools/cmake/Modules/FindJava.cmake
URL: 
http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tools/cmake/Modules/FindJava.cmake?rev=1590242&r1=1590241&r2=1590242&view=diff
==============================================================================
--- 
qpid/proton/branches/fadams-javascript-binding/tools/cmake/Modules/FindJava.cmake
 (original)
+++ 
qpid/proton/branches/fadams-javascript-binding/tools/cmake/Modules/FindJava.cmake
 Sat Apr 26 15:37:34 2014
@@ -107,7 +107,7 @@ if(Java_JAVA_EXECUTABLE)
       # 2. OpenJDK 1.6
       # 3. GCJ 1.5
       # 4. Kaffe 1.4.2
-      if(var MATCHES "java version \"[0-9]+\\.[0-9]+\\.[0-9_.]+.*\".*")
+      if(var MATCHES "(java|openjdk) version 
\"[0-9]+\\.[0-9]+\\.[0-9_.]+.*\".*")
         # This is most likely Sun / OpenJDK, or maybe GCJ-java compat layer
         string( REGEX REPLACE ".* version \"([0-9]+\\.[0-9]+\\.[0-9_.]+.*)\".*"
                 "\\1" Java_VERSION_STRING "${var}" )



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to