You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2015/01/16 15:28:18 UTC

qpid-proton git commit: added event attachments

Repository: qpid-proton
Updated Branches:
  refs/heads/master 1420615f5 -> 3b0346fb8


added event attachments


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

Branch: refs/heads/master
Commit: 3b0346fb8314560236cb556ec21c03d10adb4e61
Parents: 1420615
Author: Rafael Schloming <rh...@alum.mit.edu>
Authored: Fri Jan 16 09:28:08 2015 -0500
Committer: Rafael Schloming <rh...@alum.mit.edu>
Committed: Fri Jan 16 09:28:08 2015 -0500

----------------------------------------------------------------------
 proton-c/bindings/python/proton/__init__.py |  5 +++-
 proton-c/include/proton/event.h             |  8 +++++++
 proton-c/src/events/event.c                 | 25 +++++++++++++++-----
 proton-j/src/main/resources/cengine.py      | 29 ++++++++++++++++--------
 4 files changed, 50 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3b0346fb/proton-c/bindings/python/proton/__init__.py
----------------------------------------------------------------------
diff --git a/proton-c/bindings/python/proton/__init__.py b/proton-c/bindings/python/proton/__init__.py
index 22cb500..dd22bcc 100644
--- a/proton-c/bindings/python/proton/__init__.py
+++ b/proton-c/bindings/python/proton/__init__.py
@@ -3363,7 +3363,10 @@ class Event(Wrapper, EventBase):
       return event
 
   def __init__(self, impl):
-    Wrapper.__init__(self, impl)
+    Wrapper.__init__(self, impl, pn_event_attachments)
+
+  def _init(self):
+    pass
 
   @property
   def clazz(self):

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3b0346fb/proton-c/include/proton/event.h
----------------------------------------------------------------------
diff --git a/proton-c/include/proton/event.h b/proton-c/include/proton/event.h
index 9db25dd..34d60c3 100644
--- a/proton-c/include/proton/event.h
+++ b/proton-c/include/proton/event.h
@@ -412,6 +412,14 @@ PN_EXTERN pn_delivery_t *pn_event_delivery(pn_event_t *event);
  */
 PN_EXTERN pn_transport_t *pn_event_transport(pn_event_t *event);
 
+/**
+ * Get any attachments associated with an event.
+ *
+ * @param[in] event an event object
+ * @return the record holding the attachments
+ */
+PN_EXTERN pn_record_t *pn_event_attachments(pn_event_t *event);
+
 #ifdef __cplusplus
 }
 #endif

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3b0346fb/proton-c/src/events/event.c
----------------------------------------------------------------------
diff --git a/proton-c/src/events/event.c b/proton-c/src/events/event.c
index a1d959b..1670704 100644
--- a/proton-c/src/events/event.c
+++ b/proton-c/src/events/event.c
@@ -12,7 +12,8 @@ struct pn_collector_t {
 struct pn_event_t {
   pn_list_t *pool;
   const pn_class_t *clazz;
-  void *context;    // depends on type
+  void *context;    // depends on clazz
+  pn_record_t *attachments;
   pn_event_t *next;
   pn_event_type_t type;
 };
@@ -88,7 +89,6 @@ void pn_collector_free(pn_collector_t *collector)
 }
 
 pn_event_t *pn_event(void);
-static void pn_event_initialize(pn_event_t *event);
 
 pn_event_t *pn_collector_put(pn_collector_t *collector,
                              const pn_class_t *clazz, void *context,
@@ -113,9 +113,7 @@ pn_event_t *pn_collector_put(pn_collector_t *collector,
 
   pn_event_t *event = (pn_event_t *) pn_list_pop(collector->pool);
 
-  if (event) {
-    pn_event_initialize(event);
-  } else {
+  if (!event) {
     event = pn_event();
   }
 
@@ -167,20 +165,27 @@ static void pn_event_initialize(pn_event_t *event)
   event->clazz = NULL;
   event->context = NULL;
   event->next = NULL;
+  event->attachments = pn_record();
 }
 
 static void pn_event_finalize(pn_event_t *event) {
   // decref before adding to the free list
   if (event->clazz && event->context) {
     pn_class_decref(event->clazz, event->context);
-    event->context = NULL;
   }
 
   pn_list_t *pool = event->pool;
 
   if (pool && pn_refcount(pool) > 1) {
     event->pool = NULL;
+    event->type = PN_EVENT_NONE;
+    event->clazz = NULL;
+    event->context = NULL;
+    event->next = NULL;
+    pn_record_clear(event->attachments);
     pn_list_add(pool, event);
+  } else {
+    pn_decref(event->attachments);
   }
 
   pn_decref(pool);
@@ -228,6 +233,14 @@ void *pn_event_context(pn_event_t *event)
   return event->context;
 }
 
+pn_record_t *pn_event_attachments(pn_event_t *event)
+{
+  assert(event);
+  return event->attachments;
+}
+
+
+
 const char *pn_event_type_name(pn_event_type_t type)
 {
   switch (type) {

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/3b0346fb/proton-j/src/main/resources/cengine.py
----------------------------------------------------------------------
diff --git a/proton-j/src/main/resources/cengine.py b/proton-j/src/main/resources/cengine.py
index d9dfde0..ad70587 100644
--- a/proton-j/src/main/resources/cengine.py
+++ b/proton-j/src/main/resources/cengine.py
@@ -991,10 +991,16 @@ def pn_collector():
 def pn_connection_collect(conn, coll):
   conn.impl.collect(coll)
 
+class pn_event:
+
+  def __init__(self, impl):
+    self.impl = impl
+    self.attachments = {}
+
 def pn_collector_peek(coll):
   ev = coll.peek()
   if ev:
-    return ev.copy()
+    return pn_event(ev.copy())
   else:
     return None
 
@@ -1008,19 +1014,19 @@ def pn_event_reactor(event):
   return None
 
 def pn_event_connection(event):
-  return wrap(event.getConnection(), pn_connection_wrapper)
+  return wrap(event.impl.getConnection(), pn_connection_wrapper)
 
 def pn_event_session(event):
-  return wrap(event.getSession(), pn_session_wrapper)
+  return wrap(event.impl.getSession(), pn_session_wrapper)
 
 def pn_event_link(event):
-  return wrap(event.getLink(), pn_link_wrapper)
+  return wrap(event.impl.getLink(), pn_link_wrapper)
 
 def pn_event_delivery(event):
-  return wrap(event.getDelivery(), pn_delivery_wrapper)
+  return wrap(event.impl.getDelivery(), pn_delivery_wrapper)
 
 def pn_event_transport(event):
-  return wrap(event.getTransport(), pn_transport_wrapper)
+  return wrap(event.impl.getTransport(), pn_transport_wrapper)
 
 from org.apache.qpid.proton.engine.impl import ConnectionImpl, SessionImpl, \
   SenderImpl, ReceiverImpl, DeliveryImpl, TransportImpl
@@ -1044,17 +1050,20 @@ wrappers = {
 }
 
 def pn_event_class(event):
-  ctx = event.getContext()
+  ctx = event.impl.getContext()
   return J2C.get(ctx.getClass(), "pn_void")
 
 def pn_event_context(event):
-  return wrappers[pn_event_class(event)](event.getContext())
+  return wrappers[pn_event_class(event)](event.impl.getContext())
 
 def pn_event_type(event):
-  return event.getType()
+  return event.impl.getType()
 
 def pn_event_type_name(etype):
   return str(etype)
 
 def pn_event_category(event):
-  return event.getCategory()
+  return event.impl.getCategory()
+
+def pn_event_attachments(event):
+  return event.attachments


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