From 5d4a8a69accc29071eb7cb19aa00169d40a5ad0b Mon Sep 17 00:00:00 2001 From: CY Chen Date: Fri, 5 Jun 2026 18:35:03 +0000 Subject: [PATCH 1/2] Expose rosidl buffer backend metadata in TopicEndpointInfo Signed-off-by: CY Chen --- .../node_interfaces/node_graph_interface.hpp | 21 +++++++++++++++++++ .../src/rclcpp/node_interfaces/node_graph.cpp | 12 +++++++++++ 2 files changed, 33 insertions(+) diff --git a/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp b/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp index a548579585..397e721447 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp @@ -69,6 +69,16 @@ class TopicEndpointInfo topic_type_ = info.topic_type; std::copy(info.endpoint_gid, info.endpoint_gid + RMW_GID_STORAGE_SIZE, endpoint_gid_.begin()); + + const char * current_key = rcutils_string_map_get_next_key( + &info.buffer_backend_metadata, nullptr); + while (current_key) { + const char * current_value = rcutils_string_map_get( + &info.buffer_backend_metadata, current_key); + buffer_backend_metadata_[current_key] = current_value ? current_value : ""; + current_key = rcutils_string_map_get_next_key( + &info.buffer_backend_metadata, current_key); + } } /// Get a mutable reference to the node name. @@ -141,6 +151,16 @@ class TopicEndpointInfo const rosidl_type_hash_t & topic_type_hash() const; + /// Get a mutable reference to the buffer backend metadata. + RCLCPP_PUBLIC + std::map & + buffer_backend_metadata(); + + /// Get a const reference to the buffer backend metadata. + RCLCPP_PUBLIC + const std::map & + buffer_backend_metadata() const; + private: std::string node_name_; std::string node_namespace_; @@ -149,6 +169,7 @@ class TopicEndpointInfo std::array endpoint_gid_; rclcpp::QoS qos_profile_; rosidl_type_hash_t topic_type_hash_; + std::map buffer_backend_metadata_; }; /** diff --git a/rclcpp/src/rclcpp/node_interfaces/node_graph.cpp b/rclcpp/src/rclcpp/node_interfaces/node_graph.cpp index a7b28733d2..749758241a 100644 --- a/rclcpp/src/rclcpp/node_interfaces/node_graph.cpp +++ b/rclcpp/src/rclcpp/node_interfaces/node_graph.cpp @@ -956,6 +956,18 @@ rclcpp::TopicEndpointInfo::topic_type_hash() const return topic_type_hash_; } +std::map & +rclcpp::TopicEndpointInfo::buffer_backend_metadata() +{ + return buffer_backend_metadata_; +} + +const std::map & +rclcpp::TopicEndpointInfo::buffer_backend_metadata() const +{ + return buffer_backend_metadata_; +} + std::string & rclcpp::ServiceEndpointInfo::node_name() { From d269f4e36907d9f83da63ff5783c8dd3c81881d6 Mon Sep 17 00:00:00 2001 From: CY Chen Date: Wed, 1 Jul 2026 13:58:32 +0000 Subject: [PATCH 2/2] Parse serialized buffer metadata in topic endpoint info Signed-off-by: CY Chen --- .../rclcpp/node_interfaces/node_graph_interface.hpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp b/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp index 397e721447..c1fe5d71c5 100644 --- a/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp +++ b/rclcpp/include/rclcpp/node_interfaces/node_graph_interface.hpp @@ -29,6 +29,8 @@ #include "rcl/graph.h" #include "rcl/guard_condition.h" +#include "rmw/impl/cpp/buffer_backend_metadata.hpp" + #include "rclcpp/event.hpp" #include "rclcpp/macros.hpp" #include "rclcpp/node_interfaces/detail/node_interfaces_helpers.hpp" @@ -70,15 +72,8 @@ class TopicEndpointInfo std::copy(info.endpoint_gid, info.endpoint_gid + RMW_GID_STORAGE_SIZE, endpoint_gid_.begin()); - const char * current_key = rcutils_string_map_get_next_key( - &info.buffer_backend_metadata, nullptr); - while (current_key) { - const char * current_value = rcutils_string_map_get( - &info.buffer_backend_metadata, current_key); - buffer_backend_metadata_[current_key] = current_value ? current_value : ""; - current_key = rcutils_string_map_get_next_key( - &info.buffer_backend_metadata, current_key); - } + buffer_backend_metadata_ = + rmw::impl::cpp::parse_buffer_backend_metadata(info.buffer_backend_metadata); } /// Get a mutable reference to the node name.