You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2019/09/30 23:12:05 UTC
[qpid-dispatch] 03/03: DISPATCH-1430: handle array of capabilities
as well as single symbol for qd.waypoint
This is an automated email from the ASF dual-hosted git repository.
gsim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
commit 2b849f2e17e657026bc2201e0ab396d1314d1c2d
Author: Gordon Sim <gs...@redhat.com>
AuthorDate: Fri Sep 20 17:11:28 2019 +0100
DISPATCH-1430: handle array of capabilities as well as single symbol for qd.waypoint
---
src/router_core/terminus.c | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/src/router_core/terminus.c b/src/router_core/terminus.c
index 2a23dd3..1f4c61f 100644
--- a/src/router_core/terminus.c
+++ b/src/router_core/terminus.c
@@ -249,13 +249,9 @@ bool qdr_terminus_has_capability(qdr_terminus_t *term, const char *capability)
return false;
}
-
-int qdr_terminus_waypoint_capability(qdr_terminus_t *term)
+static int get_waypoint_ordinal(pn_data_t* cap)
{
- pn_data_t *cap = term->capabilities;
- pn_data_rewind(cap);
- pn_data_next(cap);
- if (cap && pn_data_type(cap) == PN_SYMBOL) {
+ if (pn_data_type(cap) == PN_SYMBOL) {
pn_bytes_t sym = pn_data_get_symbol(cap);
size_t len = strlen(QD_CAPABILITY_WAYPOINT_DEFAULT);
if (sym.size >= len && strncmp(sym.start, QD_CAPABILITY_WAYPOINT_DEFAULT, len) == 0) {
@@ -265,6 +261,28 @@ int qdr_terminus_waypoint_capability(qdr_terminus_t *term)
return (int) (sym.start[len + 1] - '0');
}
}
+ return 0;
+}
+
+
+int qdr_terminus_waypoint_capability(qdr_terminus_t *term)
+{
+ pn_data_t *cap = term->capabilities;
+ pn_data_rewind(cap);
+ pn_data_next(cap);
+ if (cap) {
+ int ordinal = get_waypoint_ordinal(cap);
+ if (ordinal) {
+ return ordinal;
+ } else if (pn_data_type(cap) == PN_ARRAY && pn_data_enter(cap)) {
+ while (pn_data_next(cap)) {
+ ordinal = get_waypoint_ordinal(cap);
+ if (ordinal) {
+ return ordinal;
+ }
+ }
+ }
+ }
return 0;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org