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