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

Reply via email to