You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ch...@apache.org on 2017/07/07 20:39:46 UTC

[09/14] qpid-dispatch git commit: DISPATCH-760: Fix inbound annotation stripping

DISPATCH-760: Fix inbound annotation stripping


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

Branch: refs/heads/master
Commit: cd7d5128ea9ece90ce1236ad027f5c4f448656df
Parents: 95a0556
Author: Chuck Rolke <cr...@redhat.com>
Authored: Mon Jul 3 12:05:36 2017 -0400
Committer: Chuck Rolke <cr...@redhat.com>
Committed: Fri Jul 7 10:38:55 2017 -0400

----------------------------------------------------------------------
 src/parse.c                       | 114 +++++++++++++++++----------------
 tests/system_tests_two_routers.py |   8 +--
 2 files changed, 62 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/cd7d5128/src/parse.c
----------------------------------------------------------------------
diff --git a/src/parse.c b/src/parse.c
index d601f89..6072e15 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -587,6 +587,7 @@ qd_parsed_field_t *qd_parse_value_by_key(qd_parsed_field_t *field, const char *k
 
 
 const char *qd_parse_annotations_v1(
+    bool                   strip_anno_in,
     qd_iterator_t         *ma_iter_in,
     qd_parsed_field_t    **ma_ingress,
     qd_parsed_field_t    **ma_phase,
@@ -606,59 +607,62 @@ const char *qd_parse_annotations_v1(
         return parse_error;
     }
 
-    qd_parsed_turbo_t *anno = DEQ_HEAD(annos);
-    while (anno) {
-        qd_iterator_t *key_iter =
-            qd_iterator_buffer(anno->bufptr.buffer,
-                               anno->bufptr.cursor - qd_buffer_base(anno->bufptr.buffer),
-                               anno->size,
-                               ITER_VIEW_ALL);
-        assert(key_iter);
-
-        qd_parsed_field_t *key_field = qd_parse(key_iter);
-        assert(key_field);
-
-        qd_iterator_t *iter = qd_parse_raw(key_field);
-        assert(iter);
-
-        qd_parsed_turbo_t *anno_val = DEQ_NEXT(anno);
-        assert(anno_val);
-
-        qd_iterator_t *val_iter =
-            qd_iterator_buffer(anno_val->bufptr.buffer,
-                               anno_val->bufptr.cursor - qd_buffer_base(anno_val->bufptr.buffer),
-                               anno_val->size,
-                               ITER_VIEW_ALL);
-        assert(val_iter);
-
-        qd_parsed_field_t *val_field = qd_parse(val_iter);
-        assert(val_field);
-
-        // Hoist the key name out of the buffers into a normal char array
-        char key_name[QD_MA_MAX_KEY + 1];
-        (void)qd_iterator_strncpy(iter, key_name, QD_MA_MAX_KEY + 1);
-
-        // transfer ownership of the extracted value to the message
-        if        (!strcmp(key_name, QD_MA_TRACE)) {
-            *ma_trace = val_field;
-        } else if (!strcmp(key_name, QD_MA_INGRESS)) {
-            *ma_ingress = val_field;
-        } else if (!strcmp(key_name, QD_MA_TO)) {
-            *ma_to_override = val_field;
-        } else if (!strcmp(key_name, QD_MA_PHASE)) {
-            *ma_phase = val_field;
-        } else {
-            // TODO: this key had the QD_MA_PREFIX but it does not match
-            //       one of the actual fields. 
-            qd_parse_free(val_field);
-        }
+    qd_parsed_turbo_t *anno;
+    if (!strip_anno_in) {
+        anno = DEQ_HEAD(annos);
+        while (anno) {
+            qd_iterator_t *key_iter =
+                qd_iterator_buffer(anno->bufptr.buffer,
+                                anno->bufptr.cursor - qd_buffer_base(anno->bufptr.buffer),
+                                anno->size,
+                                ITER_VIEW_ALL);
+            assert(key_iter);
+
+            qd_parsed_field_t *key_field = qd_parse(key_iter);
+            assert(key_field);
+
+            qd_iterator_t *iter = qd_parse_raw(key_field);
+            assert(iter);
+
+            qd_parsed_turbo_t *anno_val = DEQ_NEXT(anno);
+            assert(anno_val);
+
+            qd_iterator_t *val_iter =
+                qd_iterator_buffer(anno_val->bufptr.buffer,
+                                anno_val->bufptr.cursor - qd_buffer_base(anno_val->bufptr.buffer),
+                                anno_val->size,
+                                ITER_VIEW_ALL);
+            assert(val_iter);
+
+            qd_parsed_field_t *val_field = qd_parse(val_iter);
+            assert(val_field);
+
+            // Hoist the key name out of the buffers into a normal char array
+            char key_name[QD_MA_MAX_KEY + 1];
+            (void)qd_iterator_strncpy(iter, key_name, QD_MA_MAX_KEY + 1);
+
+            // transfer ownership of the extracted value to the message
+            if        (!strcmp(key_name, QD_MA_TRACE)) {
+                *ma_trace = val_field;
+            } else if (!strcmp(key_name, QD_MA_INGRESS)) {
+                *ma_ingress = val_field;
+            } else if (!strcmp(key_name, QD_MA_TO)) {
+                *ma_to_override = val_field;
+            } else if (!strcmp(key_name, QD_MA_PHASE)) {
+                *ma_phase = val_field;
+            } else {
+                // TODO: this key had the QD_MA_PREFIX but it does not match
+                //       one of the actual fields. 
+                qd_parse_free(val_field);
+            }
 
-        qd_iterator_free(key_iter);
-        qd_parse_free(key_field);
-        qd_iterator_free(val_iter);
-        // val_field is usually handed over to message_private and is freed 
+            qd_iterator_free(key_iter);
+            qd_parse_free(key_field);
+            qd_iterator_free(val_iter);
+            // val_field is usually handed over to message_private and is freed 
 
-        anno = DEQ_NEXT(anno_val);
+            anno = DEQ_NEXT(anno_val);
+        }
     }
 
     anno = DEQ_HEAD(annos);
@@ -723,11 +727,9 @@ void qd_parse_annotations(
 
     qd_iterator_free(raw_iter);
 
-    if (!strip_annotations_in) {
-        (void) qd_parse_annotations_v1(ma_iter_in, ma_ingress, ma_phase,
-                                       ma_to_override, ma_trace,
-                                       blob_pointer, blob_item_count);
-    }
+    (void) qd_parse_annotations_v1(strip_annotations_in, ma_iter_in, ma_ingress, ma_phase,
+                                    ma_to_override, ma_trace,
+                                    blob_pointer, blob_item_count);
 
     return;
 }

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/cd7d5128/tests/system_tests_two_routers.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_two_routers.py b/tests/system_tests_two_routers.py
index 9e9a2bd..db2b20b 100644
--- a/tests/system_tests_two_routers.py
+++ b/tests/system_tests_two_routers.py
@@ -560,10 +560,10 @@ class RouterTest(TestCase):
         # of the first router. If the inbound annotations were not stripped, the router would drop this message
         # since it would consider this message as being looped.
         #
-        ingress_message_annotations = {'x-opt-qd.ingress': 'ingress-router',
-                                       'x-opt-qd.trace': ['0/QDR.A'],
-                                       'work': 'hard',
-                                       'x-opt-qd': 'humble'}
+        ingress_message_annotations = {'work': 'hard',
+                                       'x-opt-qd': 'humble',
+                                       'x-opt-qd.ingress': 'ingress-router',
+                                       'x-opt-qd.trace': ['0/QDR.A']}
         ingress_message.annotations = ingress_message_annotations
 
         #Put and send the message


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