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