Repository: qpid-dispatch Updated Branches: refs/heads/master 0138754e5 -> 85d6aad89
DISPATCH-1145 - Added in-link creation for addresses in place when the edge-uplink opens. Added event for anonymous out-link creation. Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/85d6aad8 Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/85d6aad8 Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/85d6aad8 Branch: refs/heads/master Commit: 85d6aad8938becd42fb71fff29c3abda67df0379 Parents: 0138754 Author: Ted Ross <tr...@redhat.com> Authored: Tue Oct 16 15:09:44 2018 -0400 Committer: Ted Ross <tr...@redhat.com> Committed: Tue Oct 16 15:09:44 2018 -0400 ---------------------------------------------------------------------- src/router_core/core_events.h | 4 ++- .../modules/edge_router/addr_proxy.c | 29 ++++++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/85d6aad8/src/router_core/core_events.h ---------------------------------------------------------------------- diff --git a/src/router_core/core_events.h b/src/router_core/core_events.h index 04c50e5..5dd3e11 100644 --- a/src/router_core/core_events.h +++ b/src/router_core/core_events.h @@ -45,6 +45,7 @@ typedef uint32_t qdrc_event_t; * QDRC_EVENT_LINK_IN_DETACHED An inbound link has been detached * QDRC_EVENT_LINK_OUT_ATTACHED An outbound link has been attached * QDRC_EVENT_LINK_OUT_DETACHED An outbound link has been detached + * QDRC_EVENT_LINK_EDGE_OUTLINK On an edge router, the outgoing message link(s) are attached * * QDRC_EVENT_ADDR_ADDED An address has been added * QDRC_EVENT_ADDR_REMOVED An address has been removed @@ -68,7 +69,8 @@ typedef uint32_t qdrc_event_t; #define QDRC_EVENT_LINK_IN_DETACHED 0x00000200 #define QDRC_EVENT_LINK_OUT_ATTACHED 0x00000400 #define QDRC_EVENT_LINK_OUT_DETACHED 0x00000800 -#define _QDRC_EVENT_LINK_RANGE 0x00000F00 +#define QDRC_EVENT_LINK_EDGE_OUTLINK 0x00001000 +#define _QDRC_EVENT_LINK_RANGE 0x00001F00 #define QDRC_EVENT_ADDR_ADDED 0x00010000 #define QDRC_EVENT_ADDR_REMOVED 0x00020000 http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/85d6aad8/src/router_core/modules/edge_router/addr_proxy.c ---------------------------------------------------------------------- diff --git a/src/router_core/modules/edge_router/addr_proxy.c b/src/router_core/modules/edge_router/addr_proxy.c index 34d5697..4cfb7bd 100644 --- a/src/router_core/modules/edge_router/addr_proxy.c +++ b/src/router_core/modules/edge_router/addr_proxy.c @@ -79,28 +79,45 @@ static void on_conn_event(void *context, qdrc_event_t event, qdr_connection_t *c // // Attach an anonymous sending link to the interior router. // - qdr_link_t *link = qdr_create_link_CT(ap->core, conn, - QD_LINK_ENDPOINT, QD_OUTGOING, - qdr_terminus(0), qdr_terminus(0)); + qdr_link_t *out_link = qdr_create_link_CT(ap->core, conn, + QD_LINK_ENDPOINT, QD_OUTGOING, + qdr_terminus(0), qdr_terminus(0)); // // Associate the anonymous sender with the uplink address. This will cause // all deliveries destined off-edge to be sent to the interior via the uplink. // - qdr_core_bind_address_link_CT(ap->core, ap->uplink_addr, link); + qdr_core_bind_address_link_CT(ap->core, ap->uplink_addr, out_link); // // Attach a receiving link for edge summary. This will cause all deliveries // destined for this router to be delivered via the uplink. // - link = qdr_create_link_CT(ap->core, conn, + (void) qdr_create_link_CT(ap->core, conn, QD_LINK_ENDPOINT, QD_INCOMING, qdr_terminus_edge_downlink(ap->core->router_id), qdr_terminus_edge_downlink(0)); // - // TODO - Process eligible local destinations + // Process eligible local destinations // + qdr_address_t *addr = DEQ_HEAD(ap->core->addrs); + while (addr) { + const char *key = (const char*) qd_hash_key_by_handle(addr->hash_handle); + if (*key == QD_ITER_HASH_PREFIX_MOBILE && DEQ_SIZE(addr->rlinks) > 0) { + qdr_link_t *addr_link = + qdr_create_link_CT(ap->core, ap->uplink_conn, QD_LINK_ENDPOINT, QD_INCOMING, + qdr_terminus_normal(key + 2), qdr_terminus_normal(0)); + qdr_core_bind_address_link_CT(ap->core, addr, addr_link); + addr->edge_inlink = addr_link; + } + addr = DEQ_NEXT(addr); + } + + // + // Raise an event for the establishment of the edge out-link + // + qdrc_event_link_raise(ap->core, QDRC_EVENT_LINK_EDGE_OUTLINK, out_link); break; } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org