You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2016/03/19 00:06:57 UTC

[39/50] [abbrv] qpid-dispatch git commit: DISPATCH-179 - Added proper lookup for treatment of addresses advertised by other routers.

DISPATCH-179 - Added proper lookup for treatment of addresses advertised by other routers.


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/6dfb3dc1
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/6dfb3dc1
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/6dfb3dc1

Branch: refs/heads/master
Commit: 6dfb3dc18913668915eedcf50aeade3ceeb1ec75
Parents: 17ebf68
Author: Ted Ross <tr...@redhat.com>
Authored: Thu Mar 17 14:28:28 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Thu Mar 17 14:28:28 2016 -0400

----------------------------------------------------------------------
 src/router_core/connections.c         | 44 ++++++++++++++++++++++++++++++
 src/router_core/route_tables.c        |  2 +-
 src/router_core/router_core_private.h |  1 +
 3 files changed, 46 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6dfb3dc1/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 4f38dcb..d014bf3 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -548,6 +548,50 @@ qd_address_treatment_t qdr_treatment_for_address_CT(qdr_core_t *core, qd_field_i
 }
 
 
+qd_address_treatment_t qdr_treatment_for_address_hash_CT(qdr_core_t *core, qd_field_iterator_t *iter)
+{
+#define HASH_STORAGE_SIZE 1000
+    char  storage[HASH_STORAGE_SIZE + 1];
+    char *copy    = storage;
+    bool  on_heap = false;
+    int   length  = qd_field_iterator_length(iter);
+    qd_address_treatment_t trt = QD_TREATMENT_ANYCAST_CLOSEST;
+
+    if (length > HASH_STORAGE_SIZE) {
+        copy    = (char*) malloc(length + 1);
+        on_heap = true;
+    }
+
+    qd_field_iterator_strncpy(iter, copy, length + 1);
+
+    if (copy[0] == 'C' || copy[0] == 'D')
+        //
+        // Handle the link-route address case
+        // TODO - put link-routes into the config table with a different prefix from 'Z'
+        //
+        trt = QD_TREATMENT_LINK_BALANCED;
+
+    else if (copy[0] == 'M') {
+        //
+        // Handle the mobile address case
+        //
+        copy[1] = 'Z';
+        qd_field_iterator_t  *config_iter = qd_field_iterator_string(&copy[1]);
+        qdr_address_config_t *addr = 0;
+
+        qd_hash_retrieve_prefix(core->addr_hash, config_iter, (void**) &addr);
+        if (addr)
+            trt = addr->treatment;
+        qd_field_iterator_free(config_iter);
+    }
+
+    if (on_heap)
+        free(copy);
+
+    return trt;
+}
+
+
 /**
  * Check an address to see if it no longer has any associated destinations.
  * Depending on its policy, the address may be eligible for being closed out

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6dfb3dc1/src/router_core/route_tables.c
----------------------------------------------------------------------
diff --git a/src/router_core/route_tables.c b/src/router_core/route_tables.c
index 0529a84..7f715a5 100644
--- a/src/router_core/route_tables.c
+++ b/src/router_core/route_tables.c
@@ -501,7 +501,7 @@ static void qdr_map_destination_CT(qdr_core_t *core, qdr_action_t *action, bool
 
         qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
         if (!addr) {
-            addr = qdr_address_CT(core, 0); // FIXME - Treatment
+            addr = qdr_address_CT(core, qdr_treatment_for_address_hash_CT(core, iter));
             qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
             DEQ_ITEM_INIT(addr);
             DEQ_INSERT_TAIL(core->addrs, addr);

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/6dfb3dc1/src/router_core/router_core_private.h
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h
index 1e5eb44..dadebc9 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -563,6 +563,7 @@ qdr_delivery_t *qdr_forward_new_delivery_CT(qdr_core_t *core, qdr_delivery_t *pe
 void qdr_forward_deliver_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_t *dlv);
 void qdr_connection_activate_CT(qdr_core_t *core, qdr_connection_t *conn);
 qd_address_treatment_t qdr_treatment_for_address_CT(qdr_core_t *core, qd_field_iterator_t *iter, int *in_phase, int *out_phase);
+qd_address_treatment_t qdr_treatment_for_address_hash_CT(qdr_core_t *core, qd_field_iterator_t *iter);
 
 void qdr_connection_enqueue_work_CT(qdr_core_t            *core,
                                     qdr_connection_t      *conn,


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