Author: kgiusti
Date: Tue Apr  8 18:14:33 2014
New Revision: 1585803

URL: http://svn.apache.org/r1585803
Log:
PROTON-557: add events for local endpoint state changes, add event categories.

Modified:
    qpid/proton/trunk/proton-c/bindings/python/proton.py
    qpid/proton/trunk/proton-c/include/proton/event.h
    qpid/proton/trunk/proton-c/src/engine/engine.c
    qpid/proton/trunk/proton-c/src/engine/event.c
    qpid/proton/trunk/proton-c/src/messenger/messenger.c
    qpid/proton/trunk/proton-c/src/transport/transport.c
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
    
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
    qpid/proton/trunk/proton-j/src/main/resources/cengine.py
    qpid/proton/trunk/tests/python/proton_tests/engine.py

Modified: qpid/proton/trunk/proton-c/bindings/python/proton.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/python/proton.py?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/python/proton.py (original)
+++ qpid/proton/trunk/proton-c/bindings/python/proton.py Tue Apr  8 18:14:33 
2014
@@ -3277,6 +3277,7 @@ class Collector:
     else:
       tp = None
     return Event(type=pn_event_type(event),
+                 category=pn_event_category(event),
                  
connection=Connection._wrap_connection(pn_event_connection(event)),
                  session=Session._wrap_session(pn_event_session(event)),
                  link=Link._wrap_link(pn_event_link(event)),
@@ -3291,15 +3292,22 @@ class Collector:
 
 class Event:
 
-  CONNECTION_STATE = PN_CONNECTION_STATE
-  SESSION_STATE = PN_SESSION_STATE
-  LINK_STATE = PN_LINK_STATE
+  CATEGORY_PROTOCOL = PN_EVENT_CATEGORY_PROTOCOL
+
+  CONNECTION_LOCAL_STATE = PN_CONNECTION_LOCAL_STATE
+  CONNECTION_REMOTE_STATE = PN_CONNECTION_REMOTE_STATE
+  SESSION_LOCAL_STATE = PN_SESSION_LOCAL_STATE
+  SESSION_REMOTE_STATE = PN_SESSION_REMOTE_STATE
+  LINK_LOCAL_STATE = PN_LINK_LOCAL_STATE
+  LINK_REMOTE_STATE = PN_LINK_REMOTE_STATE
   LINK_FLOW = PN_LINK_FLOW
   DELIVERY = PN_DELIVERY
   TRANSPORT = PN_TRANSPORT
 
-  def __init__(self, type, connection, session, link, delivery, transport):
+  def __init__(self, type, category,
+               connection, session, link, delivery, transport):
     self.type = type
+    self.category = category
     self.connection = connection
     self.session = session
     self.link = link

Modified: qpid/proton/trunk/proton-c/include/proton/event.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/event.h?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/event.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/event.h Tue Apr  8 18:14:33 2014
@@ -77,6 +77,15 @@ extern "C" {
 typedef struct pn_event_t pn_event_t;
 
 /**
+ * Related events are grouped into categories
+ */
+typedef enum {
+    PN_EVENT_CATEGORY_NONE   = 0,
+    PN_EVENT_CATEGORY_PROTOCOL = 0x00010000,
+    PN_EVENT_CATEGORY_COUNT = 2
+} pn_event_category_t;
+
+/**
  * An event type.
  */
 typedef enum {
@@ -90,37 +99,40 @@ typedef enum {
    * this type point to the relevant connection as well as its
    * associated transport.
    */
-  PN_CONNECTION_STATE = 1,
+  PN_CONNECTION_REMOTE_STATE = PN_EVENT_CATEGORY_PROTOCOL+1,
+  PN_CONNECTION_LOCAL_STATE = PN_EVENT_CATEGORY_PROTOCOL+2,
   /**
    * The endpoint state flags for a session have changed. Events of
    * this type point to the relevant session as well as its associated
    * connection and transport.
    */
-  PN_SESSION_STATE = 2,
+  PN_SESSION_REMOTE_STATE = PN_EVENT_CATEGORY_PROTOCOL+3,
+  PN_SESSION_LOCAL_STATE = PN_EVENT_CATEGORY_PROTOCOL+4,
   /**
    * The endpoint state flags for a link have changed. Events of this
    * type point to the relevant link as well as its associated
    * session, connection, and transport.
    */
-  PN_LINK_STATE = 4,
+  PN_LINK_REMOTE_STATE = PN_EVENT_CATEGORY_PROTOCOL+5,
+  PN_LINK_LOCAL_STATE = PN_EVENT_CATEGORY_PROTOCOL+6,
   /**
    * The flow control state for a link has changed. Events of this
    * type point to the relevant link along with its associated
    * session, connection, and transport.
    */
-  PN_LINK_FLOW = 8,
+  PN_LINK_FLOW = PN_EVENT_CATEGORY_PROTOCOL+7,
   /**
    * A delivery has been created or updated. Events of this type point
    * to the relevant delivery as well as its associated link, session,
    * connection, and transport.
    */
-  PN_DELIVERY = 16,
+  PN_DELIVERY = PN_EVENT_CATEGORY_PROTOCOL+8,
   /**
    * The transport has new data to read and/or write. Events of this
    * type point to the relevant transport as well as its associated
    * connection.
    */
-  PN_TRANSPORT = 32
+  PN_TRANSPORT = PN_EVENT_CATEGORY_PROTOCOL+9
 } pn_event_type_t;
 
 /**
@@ -178,6 +190,14 @@ PN_EXTERN bool pn_collector_pop(pn_colle
 PN_EXTERN pn_event_type_t pn_event_type(pn_event_t *event);
 
 /**
+ * Get the category an event belongs to.
+ *
+ * @param[in] event an event object
+ * @return the category the event belongs to
+ */
+PN_EXTERN pn_event_category_t pn_event_category(pn_event_t *event);
+
+/**
  * Get the connection associated with an event.
  *
  * @param[in] event an event object

Modified: qpid/proton/trunk/proton-c/src/engine/engine.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine.c?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Tue Apr  8 18:14:33 2014
@@ -33,6 +33,7 @@
 #include "../platform.h"
 #include "../platform_fmt.h"
 #include "../transport/transport.h"
+#include "../engine/event.h"
 
 // endpoints
 
@@ -51,18 +52,61 @@ pn_connection_t *pn_ep_get_connection(pn
   return NULL;
 }
 
+/* map the endpoint type to its local event type */
+static const pn_event_type_t endpoint_event_map[] = {
+  PN_CONNECTION_LOCAL_STATE,  /* CONNECTION */
+  PN_SESSION_LOCAL_STATE,     /* SESSION */
+  PN_LINK_LOCAL_STATE,        /* SENDER */
+  PN_LINK_LOCAL_STATE};       /* RECEIVER */
+
+/* setup the event given the endpoint that generated the event */
+static void endpoint_init_event(pn_event_t *event,
+                                pn_endpoint_t *endpoint)
+{
+  switch (endpoint->type) {
+  case CONNECTION: {
+      pn_connection_t *conn = (pn_connection_t *) endpoint;
+      pn_event_init_connection(event, conn);
+    }
+    break;
+  case SESSION: {
+      pn_session_t *ssn = (pn_session_t *) endpoint;
+      pn_event_init_session(event, ssn);
+    }
+    break;
+  case SENDER:
+  case RECEIVER: {
+      pn_link_t *link = (pn_link_t*) endpoint;
+      pn_event_init_link(event, link);
+    }
+    break;
+  }
+}
+
 static void pn_endpoint_open(pn_endpoint_t *endpoint)
 {
   // TODO: do we care about the current state?
   PN_SET_LOCAL(endpoint->state, PN_LOCAL_ACTIVE);
-  pn_modified(pn_ep_get_connection(endpoint), endpoint, true);
+  pn_connection_t *conn = pn_ep_get_connection(endpoint);
+  pn_event_t *event = pn_collector_put(conn->collector,
+                                       endpoint_event_map[endpoint->type]);
+  if (event) {
+    endpoint_init_event(event, endpoint);
+  }
+  pn_modified(conn, endpoint, true);
 }
 
-void pn_endpoint_close(pn_endpoint_t *endpoint)
+static void pn_endpoint_close(pn_endpoint_t *endpoint)
 {
   // TODO: do we care about the current state?
   PN_SET_LOCAL(endpoint->state, PN_LOCAL_CLOSED);
-  pn_modified(pn_ep_get_connection(endpoint), endpoint, true);
+  pn_connection_t *conn = pn_ep_get_connection(endpoint);
+  pn_event_t *event = pn_collector_put(conn->collector,
+                                       endpoint_event_map[endpoint->type]);
+  if (event) {
+    endpoint_init_event(event, endpoint);
+  }
+  pn_modified(conn, endpoint, true);
 }
 
 void pn_connection_reset(pn_connection_t *connection)
@@ -74,12 +118,14 @@ void pn_connection_reset(pn_connection_t
 
 void pn_connection_open(pn_connection_t *connection)
 {
-  if (connection) pn_endpoint_open((pn_endpoint_t *) connection);
+  assert(connection);
+  pn_endpoint_open(&connection->endpoint);
 }
 
 void pn_connection_close(pn_connection_t *connection)
 {
-  if (connection) pn_endpoint_close((pn_endpoint_t *) connection);
+  assert(connection);
+  pn_endpoint_close(&connection->endpoint);
 }
 
 void pn_endpoint_tini(pn_endpoint_t *endpoint);
@@ -185,12 +231,14 @@ pn_connection_t *pn_session_connection(p
 
 void pn_session_open(pn_session_t *session)
 {
-  if (session) pn_endpoint_open((pn_endpoint_t *) session);
+  assert(session);
+  pn_endpoint_open(&session->endpoint);
 }
 
 void pn_session_close(pn_session_t *session)
 {
-  if (session) pn_endpoint_close((pn_endpoint_t *) session);
+  assert(session);
+  pn_endpoint_close(&session->endpoint);
 }
 
 void pn_session_free(pn_session_t *session)
@@ -234,12 +282,14 @@ void pn_remove_link(pn_session_t *ssn, p
 
 void pn_link_open(pn_link_t *link)
 {
-  if (link) pn_endpoint_open((pn_endpoint_t *) link);
+  assert(link);
+  pn_endpoint_open(&link->endpoint);
 }
 
 void pn_link_close(pn_link_t *link)
 {
-  if (link) pn_endpoint_close((pn_endpoint_t *) link);
+  assert(link);
+  pn_endpoint_close(&link->endpoint);
 }
 
 void pn_terminus_free(pn_terminus_t *terminus)

Modified: qpid/proton/trunk/proton-c/src/engine/event.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/event.c?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/event.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/event.c Tue Apr  8 18:14:33 2014
@@ -242,6 +242,11 @@ pn_event_type_t pn_event_type(pn_event_t
   return event->type;
 }
 
+pn_event_category_t pn_event_category(pn_event_t *event)
+{
+  return (pn_event_category_t)(event->type & 0xFFFF0000);
+}
+
 pn_connection_t *pn_event_connection(pn_event_t *event)
 {
   return event->connection;
@@ -272,12 +277,18 @@ const char *pn_event_type_name(pn_event_
   switch (type) {
   case PN_EVENT_NONE:
     return "PN_EVENT_NONE";
-  case PN_CONNECTION_STATE:
-    return "PN_CONNECTION_STATE";
-  case PN_SESSION_STATE:
-    return "PN_SESSION_STATE";
-  case PN_LINK_STATE:
-    return "PN_LINK_STATE";
+  case PN_CONNECTION_REMOTE_STATE:
+    return "PN_CONNECTION_REMOTE_STATE";
+  case PN_CONNECTION_LOCAL_STATE:
+    return "PN_CONNECTION_LOCAL_STATE";
+  case PN_SESSION_REMOTE_STATE:
+    return "PN_SESSION_REMOTE_STATE";
+  case PN_SESSION_LOCAL_STATE:
+    return "PN_SESSION_LOCAL_STATE";
+  case PN_LINK_REMOTE_STATE:
+    return "PN_LINK_REMOTE_STATE";
+  case PN_LINK_LOCAL_STATE:
+    return "PN_LINK_LOCAL_STATE";
   case PN_LINK_FLOW:
     return "PN_LINK_FLOW";
   case PN_DELIVERY:

Modified: qpid/proton/trunk/proton-c/src/messenger/messenger.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/messenger.c?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Tue Apr  8 18:14:33 
2014
@@ -1217,13 +1217,16 @@ int pn_messenger_process_events(pn_messe
   while ((event = pn_collector_peek(messenger->collector))) {
     processed++;
     switch (pn_event_type(event)) {
-    case PN_CONNECTION_STATE:
+    case PN_CONNECTION_REMOTE_STATE:
+    case PN_CONNECTION_LOCAL_STATE:
       pn_messenger_process_connection(messenger, event);
       break;
-    case PN_SESSION_STATE:
+    case PN_SESSION_REMOTE_STATE:
+    case PN_SESSION_LOCAL_STATE:
       pn_messenger_process_session(messenger, event);
       break;
-    case PN_LINK_STATE:
+    case PN_LINK_REMOTE_STATE:
+    case PN_LINK_LOCAL_STATE:
       pn_messenger_process_link(messenger, event);
       break;
     case PN_LINK_FLOW:

Modified: qpid/proton/trunk/proton-c/src/transport/transport.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/transport/transport.c?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/transport/transport.c (original)
+++ qpid/proton/trunk/proton-c/src/transport/transport.c Tue Apr  8 18:14:33 
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/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
 Tue Apr  8 18:14:33 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/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/ConnectionImpl.java
 Tue Apr  8 18:14:33 2014
@@ -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/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EndpointImpl.java
 Tue Apr  8 18:14:33 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/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
 Tue Apr  8 18:14:33 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/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
 Tue Apr  8 18:14:33 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/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SenderImpl.java
 Tue Apr  8 18:14:33 2014
@@ -119,5 +119,4 @@ public class SenderImpl  extends LinkImp
             advance();
         }*/
     }
-
 }

Modified: 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
 (original)
+++ 
qpid/proton/trunk/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
 Tue Apr  8 18:14:33 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/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=1585803&r1=1585802&r2=1585803&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
 Tue Apr  8 18:14:33 2014
@@ -975,7 +975,7 @@ public class TransportImpl extends Endpo
             transportSession.setNextIncomingId(begin.getNextOutgoingId());
             _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);
             }
@@ -1034,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);
             }
@@ -1108,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);
                 }
@@ -1140,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);
             }
@@ -1160,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);
             }
@@ -1365,4 +1365,8 @@ public class TransportImpl extends Endpo
         }
     }
 
+    @Override
+    protected void localStateChanged()
+    {
+    }
 }

Modified: qpid/proton/trunk/proton-j/src/main/resources/cengine.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/resources/cengine.py?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/src/main/resources/cengine.py (original)
+++ qpid/proton/trunk/proton-j/src/main/resources/cengine.py Tue Apr  8 
18:14:33 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/trunk/tests/python/proton_tests/engine.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/python/proton_tests/engine.py?rev=1585803&r1=1585802&r2=1585803&view=diff
==============================================================================
--- qpid/proton/trunk/tests/python/proton_tests/engine.py (original)
+++ qpid/proton/trunk/tests/python/proton_tests/engine.py Tue Apr  8 18:14:33 
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



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

Reply via email to