Hi Gordon, Sorry about the late comment on the review. I think you want PN_VOID, not PN_WEAKREF. I thought I had replied promptly, but apparently I had forgotten to click "publish" and so my comment lingered in reviewboard for quite a while.
--Rafael On Thu, May 14, 2015 at 8:34 AM, <[email protected]> wrote: > Repository: qpid-proton > Updated Branches: > refs/heads/master d5bd60d9a -> 995e00d70 > > > PROTON-860: allow acceptor to be configured for ssl > > > Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo > Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/995e00d7 > Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/995e00d7 > Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/995e00d7 > > Branch: refs/heads/master > Commit: 995e00d70b6f9005e116e352507127d9c930a4db > Parents: d5bd60d > Author: Gordon Sim <[email protected]> > Authored: Wed May 6 12:50:11 2015 +0100 > Committer: Gordon Sim <[email protected]> > Committed: Thu May 14 13:24:55 2015 +0100 > > ---------------------------------------------------------------------- > proton-c/bindings/python/proton/reactor.py | 12 +++++++++--- > proton-c/include/proton/reactor.h | 2 ++ > proton-c/src/reactor/acceptor.c | 15 +++++++++++++++ > 3 files changed, 26 insertions(+), 3 deletions(-) > ---------------------------------------------------------------------- > > > > http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/995e00d7/proton-c/bindings/python/proton/reactor.py > ---------------------------------------------------------------------- > diff --git a/proton-c/bindings/python/proton/reactor.py > b/proton-c/bindings/python/proton/reactor.py > index 09cbc23..0145a25 100644 > --- a/proton-c/bindings/python/proton/reactor.py > +++ b/proton-c/bindings/python/proton/reactor.py > @@ -51,6 +51,9 @@ class Acceptor(Wrapper): > def __init__(self, impl): > Wrapper.__init__(self, impl) > > + def set_ssl_domain(self, ssl_domain): > + pn_acceptor_set_ssl_domain(self._impl, ssl_domain._domain) > + > def close(self): > pn_acceptor_close(self._impl) > > @@ -742,10 +745,13 @@ class Container(Reactor): > on the interface and port specified. > """ > url = Url(url) > + acceptor = self.acceptor(url.host, url.port) > ssl_config = ssl_domain > - if not ssl_config and url.scheme == 'amqps': > - ssl_config = self.ssl_domain > - return self.acceptor(url.host, url.port) > + if not ssl_config and url.scheme == 'amqps' and self.ssl: > + ssl_config = self.ssl.server > + if ssl_config: > + acceptor.set_ssl_domain(ssl_config) > + return acceptor > > def do_work(self, timeout=None): > if timeout: > > > http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/995e00d7/proton-c/include/proton/reactor.h > ---------------------------------------------------------------------- > diff --git a/proton-c/include/proton/reactor.h > b/proton-c/include/proton/reactor.h > index 36ee336..59b2282 100644 > --- a/proton-c/include/proton/reactor.h > +++ b/proton-c/include/proton/reactor.h > @@ -26,6 +26,7 @@ > #include <proton/type_compat.h> > #include <proton/event.h> > #include <proton/selectable.h> > +#include <proton/ssl.h> > > #ifdef __cplusplus > extern "C" { > @@ -85,6 +86,7 @@ PN_EXTERN void pn_reactor_run(pn_reactor_t *reactor); > PN_EXTERN pn_task_t *pn_reactor_schedule(pn_reactor_t *reactor, int > delay, pn_handler_t *handler); > > > +PN_EXTERN void pn_acceptor_set_ssl_domain(pn_acceptor_t *acceptor, > pn_ssl_domain_t *domain); > PN_EXTERN void pn_acceptor_close(pn_acceptor_t *acceptor); > > PN_EXTERN pn_timer_t *pn_timer(pn_collector_t *collector); > > > http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/995e00d7/proton-c/src/reactor/acceptor.c > ---------------------------------------------------------------------- > diff --git a/proton-c/src/reactor/acceptor.c > b/proton-c/src/reactor/acceptor.c > index f7202d4..31fa0cc 100644 > --- a/proton-c/src/reactor/acceptor.c > +++ b/proton-c/src/reactor/acceptor.c > @@ -29,6 +29,7 @@ > pn_selectable_t *pn_reactor_selectable_transport(pn_reactor_t *reactor, > pn_socket_t sock, pn_transport_t *transport); > > PN_HANDLE(PNI_ACCEPTOR_HANDLER) > +PN_HANDLE(PNI_ACCEPTOR_SSL_DOMAIN) > > void pni_acceptor_readable(pn_selectable_t *sel) { > pn_reactor_t *reactor = (pn_reactor_t *) > pni_selectable_get_context(sel); > @@ -36,9 +37,15 @@ void pni_acceptor_readable(pn_selectable_t *sel) { > pn_socket_t sock = pn_accept(pn_reactor_io(reactor), > pn_selectable_get_fd(sel), name, 1024); > pn_handler_t *handler = (pn_handler_t *) > pn_record_get(pn_selectable_attachments(sel), PNI_ACCEPTOR_HANDLER); > if (!handler) { handler = pn_reactor_get_handler(reactor); } > + pn_record_t *record = pn_selectable_attachments(sel); > + pn_ssl_domain_t *ssl_domain = (pn_ssl_domain_t *) pn_record_get(record, > PNI_ACCEPTOR_SSL_DOMAIN); > pn_connection_t *conn = pn_reactor_connection(reactor, handler); > pn_transport_t *trans = pn_transport(); > pn_transport_set_server(trans); > + if (ssl_domain) { > + pn_ssl_t *ssl = pn_ssl(trans); > + pn_ssl_init(ssl, ssl_domain, 0); > + } > pn_transport_bind(trans, conn); > pn_decref(trans); > pn_reactor_selectable_transport(reactor, sock, trans); > @@ -80,3 +87,11 @@ void pn_acceptor_close(pn_acceptor_t *acceptor) { > pn_reactor_update(reactor, sel); > } > } > + > +void pn_acceptor_set_ssl_domain(pn_acceptor_t *acceptor, pn_ssl_domain_t > *domain) > +{ > + pn_selectable_t *sel = (pn_selectable_t *) acceptor; > + pn_record_t *record = pn_selectable_attachments(sel); > + pn_record_def(record, PNI_ACCEPTOR_SSL_DOMAIN, PN_WEAKREF); > + pn_record_set(record, PNI_ACCEPTOR_SSL_DOMAIN, domain); > +} > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
