Author: rhs
Date: Wed May 16 22:21:36 2012
New Revision: 1339401

URL: http://svn.apache.org/viewvc?rev=1339401&view=rev
Log:
added accessors for hostname and container; made connection construction 
external to the connector

Modified:
    qpid/proton/trunk/proton-c/bindings/php/examples/client.php
    qpid/proton/trunk/proton-c/bindings/php/examples/server.php
    qpid/proton/trunk/proton-c/include/proton/driver.h
    qpid/proton/trunk/proton-c/include/proton/engine.h
    qpid/proton/trunk/proton-c/src/driver.c
    qpid/proton/trunk/proton-c/src/engine/engine.c
    qpid/proton/trunk/proton-c/src/proton.c

Modified: qpid/proton/trunk/proton-c/bindings/php/examples/client.php
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/php/examples/client.php?rev=1339401&r1=1339400&r2=1339401&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/php/examples/client.php (original)
+++ qpid/proton/trunk/proton-c/bindings/php/examples/client.php Wed May 16 
22:21:36 2012
@@ -118,7 +118,8 @@ if ($user) {
 }
 
 // set up a session with a sender and receiver
-$conn = pn_connector_connection($c);
+$conn = pn_connection();
+pn_connector_set_connection($c, $conn);
 pn_connection_set_hostname($conn, "rschloming.servicebus.appfabriclabs.com");
 pn_connection_set_container($conn, "asdf");
 $ssn = pn_session($conn);
@@ -152,6 +153,7 @@ while (!$done) {
     $h = pn_connector_context($c);
     $h($c);
     if (pn_connector_closed($c)) {
+      pn_connection_destroy(pn_connector_connection($c));
       pn_connector_destroy($c);
       unset($c);
       $done = true;

Modified: qpid/proton/trunk/proton-c/bindings/php/examples/server.php
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/php/examples/server.php?rev=1339401&r1=1339400&r2=1339401&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/php/examples/server.php (original)
+++ qpid/proton/trunk/proton-c/bindings/php/examples/server.php Wed May 16 
22:21:36 2012
@@ -32,6 +32,7 @@ $handler = function($c) {
       $mech = pn_sasl_remote_mechanisms($sasl);
       if ($mech == "ANONYMOUS") {
         pn_sasl_done($sasl, PN_SASL_OK);
+        pn_connector_set_connection($c, pn_connection());
       } else {
         pn_sasl_done($sasl, PN_SASL_AUTH);
       }
@@ -183,6 +184,7 @@ while (TRUE) {
     $h($c);
     if (pn_connector_closed($c)) {
       // destroy the connector if closed
+      pn_connection_destroy(pn_connector_connection($c));
       pn_connector_destroy($c);
       unset($c);
     } else {

Modified: qpid/proton/trunk/proton-c/include/proton/driver.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/driver.h?rev=1339401&r1=1339400&r2=1339401&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/driver.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/driver.h Wed May 16 22:21:36 2012
@@ -55,6 +55,7 @@ void pn_connector_process(pn_connector_t
 pn_listener_t *pn_connector_listener(pn_connector_t *connector);
 pn_sasl_t *pn_connector_sasl(pn_connector_t *connector);
 pn_connection_t *pn_connector_connection(pn_connector_t *connector);
+void pn_connector_set_connection(pn_connector_t *ctor, pn_connection_t 
*connection);
 void *pn_connector_context(pn_connector_t *connector);
 void pn_connector_set_context(pn_connector_t *connector, void *context);
 void pn_connector_close(pn_connector_t *connector);

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=1339401&r1=1339400&r2=1339401&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/engine.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/engine.h Wed May 16 22:21:36 2012
@@ -72,7 +72,9 @@ pn_connection_t *pn_connection();
 
 pn_state_t pn_connection_state(pn_connection_t *connection);
 pn_error_t *pn_connection_error(pn_connection_t *connection);
+char *pn_connection_container(pn_connection_t *connection);
 void pn_connection_set_container(pn_connection_t *connection, const char 
*container);
+char *pn_connection_hostname(pn_connection_t *connection);
 void pn_connection_set_hostname(pn_connection_t *connection, const char 
*hostname);
 
 pn_delivery_t *pn_work_head(pn_connection_t *connection);

Modified: qpid/proton/trunk/proton-c/src/driver.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/driver.c?rev=1339401&r1=1339400&r2=1339401&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/driver.c (original)
+++ qpid/proton/trunk/proton-c/src/driver.c Wed May 16 22:21:36 2012
@@ -78,6 +78,7 @@ struct pn_connector_t {
   bool pending_write;
   int fd;
   int status;
+  pn_trace_t trace;
   bool closed;
   time_t wakeup;
   void (*read)(pn_connector_t *);
@@ -322,6 +323,7 @@ pn_connector_t *pn_connector_fd(pn_drive
   c->idx = 0;
   c->fd = fd;
   c->status = PN_SEL_RD | PN_SEL_WR;
+  c->trace = driver->trace;
   c->closed = false;
   c->wakeup = 0;
   c->read = pn_connector_read;
@@ -331,8 +333,8 @@ pn_connector_t *pn_connector_fd(pn_drive
   c->input_eos = false;
   c->output_size = 0;
   c->sasl = pn_sasl();
-  c->connection = pn_connection();
-  c->transport = pn_transport(c->connection);
+  c->connection = NULL;
+  c->transport = NULL;
   c->process_input = pn_connector_read_sasl_header;
   c->process_output = pn_connector_write_sasl_header;
   c->input_done = false;
@@ -340,16 +342,16 @@ pn_connector_t *pn_connector_fd(pn_drive
   c->context = context;
   c->listener = NULL;
 
-  pn_connector_trace(c, driver->trace);
-
   pn_driver_add_connector(driver, c);
   return c;
 }
 
 void pn_connector_trace(pn_connector_t *ctor, pn_trace_t trace)
 {
-  pn_sasl_trace(ctor->sasl, trace);
-  pn_trace(ctor->transport, trace);
+  if (!ctor) return;
+  ctor->trace = trace;
+  if (ctor->sasl) pn_sasl_trace(ctor->sasl, trace);
+  if (ctor->transport) pn_trace(ctor->transport, trace);
 }
 
 pn_sasl_t *pn_connector_sasl(pn_connector_t *ctor)
@@ -357,6 +359,14 @@ pn_sasl_t *pn_connector_sasl(pn_connecto
   return ctor ? ctor->sasl : NULL;
 }
 
+void pn_connector_set_connection(pn_connector_t *ctor, pn_connection_t 
*connection)
+{
+  if (!ctor) return;
+  ctor->connection = connection;
+  ctor->transport = pn_transport(connection);
+  if (ctor->transport) pn_trace(ctor->transport, ctor->trace);
+}
+
 pn_connection_t *pn_connector_connection(pn_connector_t *ctor)
 {
   return ctor ? ctor->connection : NULL;
@@ -399,7 +409,8 @@ void pn_connector_destroy(pn_connector_t
   if (!ctor) return;
 
   if (ctor->driver) pn_driver_remove_connector(ctor->driver, ctor);
-  pn_connection_destroy(ctor->connection);
+  ctor->connection = NULL;
+  ctor->transport = NULL;
   pn_sasl_destroy(ctor->sasl);
   free(ctor);
 }
@@ -506,6 +517,7 @@ static ssize_t pn_connector_read_amqp_he
 
 static ssize_t pn_connector_read_amqp(pn_connector_t *ctor)
 {
+  if (!ctor->transport) return 0;
   pn_transport_t *transport = ctor->transport;
   return pn_input(transport, ctor->input, ctor->input_size);
 }
@@ -591,12 +603,14 @@ static ssize_t pn_connector_write_amqp_h
 
 static ssize_t pn_connector_write_amqp(pn_connector_t *ctor)
 {
+  if (!ctor->transport) return 0;
   pn_transport_t *transport = ctor->transport;
   return pn_output(transport, pn_connector_output(ctor), 
pn_connector_available(ctor));
 }
 
 static time_t pn_connector_tick(pn_connector_t *ctor, time_t now)
 {
+  if (!ctor->transport) return 0;
   // XXX: should probably have a function pointer for this and switch it with 
different layers
   time_t result = pn_tick(ctor->transport, now);
   pn_connector_process_input(ctor);

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=1339401&r1=1339400&r2=1339401&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/engine/engine.c (original)
+++ qpid/proton/trunk/proton-c/src/engine/engine.c Wed May 16 22:21:36 2012
@@ -408,12 +408,17 @@ pn_connection_t *pn_connection()
 
 pn_state_t pn_connection_state(pn_connection_t *connection)
 {
-  return connection->endpoint.state;
+  return connection ? connection->endpoint.state : 0;
 }
 
 pn_error_t *pn_connection_error(pn_connection_t *connection)
 {
-  return &connection->endpoint.error;
+  return connection ? &connection->endpoint.error : NULL;
+}
+
+char *pn_connection_container(pn_connection_t *connection)
+{
+  return connection ? connection->container : NULL;
 }
 
 void pn_connection_set_container(pn_connection_t *connection, const char 
*container)
@@ -423,6 +428,11 @@ void pn_connection_set_container(pn_conn
   connection->container = strdup(container);
 }
 
+char *pn_connection_hostname(pn_connection_t *connection)
+{
+  return connection ? connection->hostname : NULL;
+}
+
 void pn_connection_set_hostname(pn_connection_t *connection, const char 
*hostname)
 {
   if (!connection) return;
@@ -561,16 +571,24 @@ pn_endpoint_t *pn_find(pn_endpoint_t *en
 
 pn_session_t *pn_session_head(pn_connection_t *conn, pn_state_t state)
 {
-  return (pn_session_t *) pn_find(conn->endpoint_head, SESSION, state);
+  if (conn)
+    return (pn_session_t *) pn_find(conn->endpoint_head, SESSION, state);
+  else
+    return NULL;
 }
 
 pn_session_t *pn_session_next(pn_session_t *ssn, pn_state_t state)
 {
-  return (pn_session_t *) pn_find(ssn->endpoint.endpoint_next, SESSION, state);
+  if (ssn)
+    return (pn_session_t *) pn_find(ssn->endpoint.endpoint_next, SESSION, 
state);
+  else
+    return NULL;
 }
 
 pn_link_t *pn_link_head(pn_connection_t *conn, pn_state_t state)
 {
+  if (!conn) return NULL;
+
   pn_endpoint_t *endpoint = conn->endpoint_head;
 
   while (endpoint)
@@ -583,9 +601,11 @@ pn_link_t *pn_link_head(pn_connection_t 
   return NULL;
 }
 
-pn_link_t *pn_link_next(pn_link_t *ssn, pn_state_t state)
+pn_link_t *pn_link_next(pn_link_t *link, pn_state_t state)
 {
-  pn_endpoint_t *endpoint = ssn->endpoint.endpoint_next;
+  if (!link) return NULL;
+
+  pn_endpoint_t *endpoint = link->endpoint.endpoint_next;
 
   while (endpoint)
   {

Modified: qpid/proton/trunk/proton-c/src/proton.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/proton.c?rev=1339401&r1=1339400&r2=1339401&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/proton.c (original)
+++ qpid/proton/trunk/proton-c/src/proton.c Wed May 16 22:21:36 2012
@@ -101,6 +101,7 @@ void server_callback(pn_connector_t *cto
         pn_print_data(iresp, n);
         printf("\n");
         pn_sasl_done(sasl, PN_SASL_OK);
+        pn_connector_set_connection(ctor, pn_connection());
       }
       break;
     case PN_SASL_PASS:
@@ -397,7 +398,9 @@ int main(int argc, char **argv)
     ctx.mechanism = mechanism;
     ctx.hostname = host;
     ctx.address = address;
-    if (!pn_connector(drv, host, port, &ctx)) pn_fatal("connector failed\n");
+    pn_connector_t *ctor = pn_connector(drv, host, port, &ctx);
+    if (!ctor) pn_fatal("connector failed\n");
+    pn_connector_set_connection(ctor, pn_connection());
     while (!ctx.done) {
       pn_driver_wait(drv, -1);
       pn_connector_t *c;
@@ -405,6 +408,7 @@ int main(int argc, char **argv)
         pn_connector_process(c);
         client_callback(c);
         if (pn_connector_closed(c)) {
+         pn_connection_destroy(pn_connector_connection(c));
           pn_connector_destroy(c);
         } else {
           pn_connector_process(c);
@@ -428,6 +432,7 @@ int main(int argc, char **argv)
         pn_connector_process(c);
         server_callback(c);
         if (pn_connector_closed(c)) {
+         pn_connection_destroy(pn_connector_connection(c));
           pn_connector_destroy(c);
         } else {
           pn_connector_process(c);



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

Reply via email to