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 2012/10/11 20:14:14 UTC

svn commit: r1397215 - in /qpid/proton/trunk: proton-c/bindings/python/proton.py proton-c/include/proton/engine.h proton-c/src/engine/engine-internal.h proton-c/src/engine/engine.c proton-j/src/main/scripts/proton.py tests/proton_tests/engine.py

Author: rhs
Date: Thu Oct 11 18:14:14 2012
New Revision: 1397215

URL: http://svn.apache.org/viewvc?rev=1397215&view=rev
Log:
added support for connection capabilities

Modified:
    qpid/proton/trunk/proton-c/bindings/python/proton.py
    qpid/proton/trunk/proton-c/include/proton/engine.h
    qpid/proton/trunk/proton-c/src/engine/engine-internal.h
    qpid/proton/trunk/proton-c/src/engine/engine.c
    qpid/proton/trunk/proton-j/src/main/scripts/proton.py
    qpid/proton/trunk/tests/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=1397215&r1=1397214&r2=1397215&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/python/proton.py (original)
+++ qpid/proton/trunk/proton-c/bindings/python/proton.py Thu Oct 11 18:14:14 2012
@@ -1344,6 +1344,22 @@ class Connection(Endpoint):
   def remote_hostname(self):
     return pn_connection_remote_hostname(self._conn)
 
+  @property
+  def offered_capabilities(self):
+    return Data(_data=pn_connection_offered_capabilities(self._conn))
+
+  @property
+  def desired_capabilities(self):
+    return Data(_data=pn_connection_desired_capabilities(self._conn))
+
+  @property
+  def remote_offered_capabilities(self):
+    return Data(_data=pn_connection_remote_offered_capabilities(self._conn))
+
+  @property
+  def remote_desired_capabilities(self):
+    return Data(_data=pn_connection_remote_desired_capabilities(self._conn))
+
   def open(self):
     pn_connection_open(self._conn)
 

Modified: qpid/proton/trunk/proton-c/include/proton/engine.h
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/engine.h?rev=1397215&r1=1397214&r2=1397215&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/engine.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/engine.h Thu Oct 11 18:14:14 2012
@@ -129,6 +129,11 @@ const char *pn_connection_get_hostname(p
 void pn_connection_set_hostname(pn_connection_t *connection, const char *hostname);
 const char *pn_connection_remote_container(pn_connection_t *connection);
 const char *pn_connection_remote_hostname(pn_connection_t *connection);
+pn_data_t *pn_connection_offered_capabilities(pn_connection_t *connection);
+pn_data_t *pn_connection_desired_capabilities(pn_connection_t *connection);
+pn_data_t *pn_connection_remote_offered_capabilities(pn_connection_t *connection);
+pn_data_t *pn_connection_remote_desired_capabilities(pn_connection_t *connection);
+
 
 /** Extracts the first delivery on the connection that has pending
  *  operations.

Modified: qpid/proton/trunk/proton-c/src/engine/engine-internal.h
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine-internal.h?rev=1397215&r1=1397214&r2=1397215&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine-internal.h (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine-internal.h Thu Oct 11 18:14:14 2012
@@ -103,6 +103,8 @@ struct pn_transport_t {
   bool close_rcvd;
   char *remote_container;
   char *remote_hostname;
+  pn_data_t *remote_offered_capabilities;
+  pn_data_t *remote_desired_capabilities;
   pn_error_t *error;
   pn_session_state_t *sessions;
   size_t session_capacity;
@@ -128,6 +130,8 @@ struct pn_connection_t {
   pn_delivery_t *tpwork_tail;
   char *container;
   char *hostname;
+  pn_data_t *offered_capabilities;
+  pn_data_t *desired_capabilities;
   void *context;
 };
 

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=1397215&r1=1397214&r2=1397215&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Thu Oct 11 18:14:14 2012
@@ -201,6 +201,8 @@ void pn_connection_free(pn_connection_t 
   free(connection->sessions);
   free(connection->container);
   free(connection->hostname);
+  pn_data_free(connection->offered_capabilities);
+  pn_data_free(connection->desired_capabilities);
   pn_endpoint_tini(&connection->endpoint);
   free(connection);
 }
@@ -241,6 +243,8 @@ void pn_transport_free(pn_transport_t *t
   }
   free(transport->remote_container);
   free(transport->remote_hostname);
+  pn_data_free(transport->remote_offered_capabilities);
+  pn_data_free(transport->remote_desired_capabilities);
   pn_error_free(transport->error);
   free(transport->sessions);
   free(transport->channels);
@@ -434,6 +438,8 @@ pn_connection_t *pn_connection()
   conn->tpwork_tail = NULL;
   conn->container = NULL;
   conn->hostname = NULL;
+  conn->offered_capabilities = pn_data(16);
+  conn->desired_capabilities = pn_data(16);
 
   return conn;
 }
@@ -472,6 +478,28 @@ void pn_connection_set_hostname(pn_conne
   connection->hostname = pn_strdup(hostname);
 }
 
+pn_data_t *pn_connection_offered_capabilities(pn_connection_t *connection)
+{
+  return connection->offered_capabilities;
+}
+
+pn_data_t *pn_connection_desired_capabilities(pn_connection_t *connection)
+{
+  return connection->desired_capabilities;
+}
+
+pn_data_t *pn_connection_remote_offered_capabilities(pn_connection_t *connection)
+{
+  if (!connection) return NULL;
+  return connection->transport ? connection->transport->remote_offered_capabilities : NULL;
+}
+
+pn_data_t *pn_connection_remote_desired_capabilities(pn_connection_t *connection)
+{
+  if (!connection) return NULL;
+  return connection->transport ? connection->transport->remote_desired_capabilities : NULL;
+}
+
 const char *pn_connection_remote_container(pn_connection_t *connection)
 {
   if (!connection) return NULL;
@@ -752,6 +780,8 @@ void pn_transport_init(pn_transport_t *t
   transport->close_rcvd = false;
   transport->remote_container = NULL;
   transport->remote_hostname = NULL;
+  transport->remote_offered_capabilities = pn_data(16);
+  transport->remote_desired_capabilities = pn_data(16);
   transport->error = pn_error();
 
   transport->sessions = NULL;
@@ -1308,8 +1338,12 @@ int pn_do_open(pn_dispatcher_t *disp)
   pn_connection_t *conn = transport->connection;
   bool container_q, hostname_q;
   pn_bytes_t remote_container, remote_hostname;
-  int err = pn_scan_args(disp, "D.[?S?S]", &container_q, &remote_container,
-                         &hostname_q, &remote_hostname);
+  pn_data_clear(transport->remote_offered_capabilities);
+  pn_data_clear(transport->remote_desired_capabilities);
+  int err = pn_scan_args(disp, "D.[?S?S.....CC]", &container_q,
+                         &remote_container, &hostname_q, &remote_hostname,
+                         transport->remote_offered_capabilities,
+                         transport->remote_desired_capabilities);
   if (err) return err;
   if (container_q) {
     transport->remote_container = pn_bytes_strdup(remote_container);
@@ -1823,7 +1857,11 @@ int pn_process_conn_setup(pn_transport_t
     if (!(endpoint->state & PN_LOCAL_UNINIT) && !transport->open_sent)
     {
       pn_connection_t *connection = (pn_connection_t *) endpoint;
-      int err = pn_post_frame(transport->disp, 0, "DL[SS]", OPEN, connection->container, connection->hostname);
+      int err = pn_post_frame(transport->disp, 0, "DL[SSnnnnnCC]", OPEN,
+                              connection->container,
+                              connection->hostname,
+                              connection->offered_capabilities,
+                              connection->desired_capabilities);
       if (err) return err;
       transport->open_sent = true;
     }

Modified: qpid/proton/trunk/proton-j/src/main/scripts/proton.py
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-j/src/main/scripts/proton.py?rev=1397215&r1=1397214&r2=1397215&view=diff
==============================================================================
--- qpid/proton/trunk/proton-j/src/main/scripts/proton.py (original)
+++ qpid/proton/trunk/proton-j/src/main/scripts/proton.py Thu Oct 11 18:14:14 2012
@@ -139,6 +139,9 @@ class Connection(Endpoint):
       self.impl.setRemoteHostname(hostname)
   remote_hostname = property(_get_remote_hostname, _set_remote_hostname)
 
+  @property
+  def offered_capabilities(self):
+    return DataDummy()
 
 
 def wrap_session(impl):

Modified: qpid/proton/trunk/tests/proton_tests/engine.py
URL: http://svn.apache.org/viewvc/qpid/proton/trunk/tests/proton_tests/engine.py?rev=1397215&r1=1397214&r2=1397215&view=diff
==============================================================================
--- qpid/proton/trunk/tests/proton_tests/engine.py (original)
+++ qpid/proton/trunk/tests/proton_tests/engine.py Thu Oct 11 18:14:14 2012
@@ -142,6 +142,31 @@ class ConnectionTest(Test):
     assert self.c1.state == Endpoint.LOCAL_CLOSED | Endpoint.REMOTE_CLOSED
     assert self.c2.state == Endpoint.LOCAL_CLOSED | Endpoint.REMOTE_CLOSED
 
+  def test_capabilities(self):
+    self.c1.offered_capabilities.put_array(False, Data.SYMBOL)
+    self.c1.offered_capabilities.enter()
+    self.c1.offered_capabilities.put_symbol("O_one")
+    self.c1.offered_capabilities.put_symbol("O_two")
+    self.c1.offered_capabilities.put_symbol("O_three")
+    self.c1.offered_capabilities.exit()
+
+    self.c1.desired_capabilities.put_array(False, Data.SYMBOL)
+    self.c1.desired_capabilities.enter()
+    self.c1.desired_capabilities.put_symbol("D_one")
+    self.c1.desired_capabilities.put_symbol("D_two")
+    self.c1.desired_capabilities.put_symbol("D_three")
+    self.c1.desired_capabilities.exit()
+
+    self.c1.open()
+
+    assert self.c2.remote_offered_capabilities.format() == ""
+    assert self.c2.remote_desired_capabilities.format() == ""
+
+    self.pump()
+
+    assert self.c2.remote_offered_capabilities.format() == self.c1.offered_capabilities.format()
+    assert self.c2.remote_desired_capabilities.format() == self.c1.desired_capabilities.format()
+
 class SessionTest(Test):
 
   def setup(self):



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