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