diff --git a/rmw_connextdds/src/rmw_api_impl_ndds.cpp b/rmw_connextdds/src/rmw_api_impl_ndds.cpp index 81af9ee7..98e0931e 100644 --- a/rmw_connextdds/src/rmw_api_impl_ndds.cpp +++ b/rmw_connextdds/src/rmw_api_impl_ndds.cpp @@ -820,3 +820,30 @@ rmw_qos_profile_check_compatible( reason, reason_size); } + +/***************************************************************************** + * Network Flow Endpoints API + *****************************************************************************/ +rmw_ret_t +rmw_publisher_get_network_flow_endpoints( + const rmw_publisher_t * publisher, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array) +{ + return rmw_api_connextdds_publisher_get_network_flow_endpoints( + publisher, + allocator, + network_flow_endpoint_array); +} + +rmw_ret_t +rmw_subscription_get_network_flow_endpoints( + const rmw_subscription_t * subscription, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array) +{ + return rmw_api_connextdds_subscription_get_network_flow_endpoints( + subscription, + allocator, + network_flow_endpoint_array); +} diff --git a/rmw_connextdds_common/CMakeLists.txt b/rmw_connextdds_common/CMakeLists.txt index 574712b8..3edbb724 100644 --- a/rmw_connextdds_common/CMakeLists.txt +++ b/rmw_connextdds_common/CMakeLists.txt @@ -135,6 +135,7 @@ set(RMW_CONNEXT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(RMW_CONNEXT_COMMON_SOURCE_CPP src/common/rmw_context.cpp src/common/rmw_discovery.cpp + src/common/rmw_network_flow_endpoints.cpp src/common/rmw_graph.cpp src/common/rmw_event.cpp src/common/rmw_impl.cpp diff --git a/rmw_connextdds_common/include/rmw_connextdds/context.hpp b/rmw_connextdds_common/include/rmw_connextdds/context.hpp index 03bc0285..86a3caef 100644 --- a/rmw_connextdds_common/include/rmw_connextdds/context.hpp +++ b/rmw_connextdds_common/include/rmw_connextdds/context.hpp @@ -45,6 +45,10 @@ #include "rcpputils/scope_exit.hpp" +#include "rmw/get_network_flow_endpoints.h" +#include "rmw/rmw.h" +#include "rmw/types.h" + extern DDS_DomainParticipantFactory * RMW_Connext_gv_DomainParticipantFactory; extern size_t RMW_Connext_gv_ContextCount; diff --git a/rmw_connextdds_common/include/rmw_connextdds/rmw_api_impl.hpp b/rmw_connextdds_common/include/rmw_connextdds/rmw_api_impl.hpp index e70dd802..187eba40 100644 --- a/rmw_connextdds_common/include/rmw_connextdds/rmw_api_impl.hpp +++ b/rmw_connextdds_common/include/rmw_connextdds/rmw_api_impl.hpp @@ -561,4 +561,21 @@ rmw_api_connextdds_qos_profile_check_compatible( char * reason, size_t reason_size); +/***************************************************************************** + * Network Flow Endpoints API + *****************************************************************************/ +RMW_CONNEXTDDS_PUBLIC +rmw_ret_t +rmw_api_connextdds_publisher_get_network_flow_endpoints( + const rmw_publisher_t * publisher, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array); + +RMW_CONNEXTDDS_PUBLIC +rmw_ret_t +rmw_api_connextdds_subscription_get_network_flow_endpoints( + const rmw_subscription_t * subscription, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array); + #endif // RMW_CONNEXTDDS__RMW_API_IMPL_HPP_ diff --git a/rmw_connextdds_common/src/common/rmw_network_flow_endpoints.cpp b/rmw_connextdds_common/src/common/rmw_network_flow_endpoints.cpp new file mode 100644 index 00000000..b60bda6f --- /dev/null +++ b/rmw_connextdds_common/src/common/rmw_network_flow_endpoints.cpp @@ -0,0 +1,41 @@ +// Copyright 2021 Ericsson AB +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "rmw_connextdds/rmw_impl.hpp" + +rmw_ret_t +rmw_api_connextdds_publisher_get_network_flow_endpoints( + const rmw_publisher_t * publisher, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array) +{ + UNUSED_ARG(publisher); + UNUSED_ARG(allocator); + UNUSED_ARG(network_flow_endpoint_array); + RMW_CONNEXT_LOG_NOT_IMPLEMENTED + return RMW_RET_UNSUPPORTED; +} + +rmw_ret_t +rmw_api_connextdds_subscription_get_network_flow_endpoints( + const rmw_subscription_t * subscription, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array) +{ + UNUSED_ARG(subscription); + UNUSED_ARG(allocator); + UNUSED_ARG(network_flow_endpoint_array); + RMW_CONNEXT_LOG_NOT_IMPLEMENTED + return RMW_RET_UNSUPPORTED; +} diff --git a/rmw_connextdds_common/src/common/rmw_publication.cpp b/rmw_connextdds_common/src/common/rmw_publication.cpp index 35dd991c..1802e2d7 100644 --- a/rmw_connextdds_common/src/common/rmw_publication.cpp +++ b/rmw_connextdds_common/src/common/rmw_publication.cpp @@ -132,6 +132,13 @@ rmw_api_connextdds_create_publisher( RMW_CHECK_ARGUMENT_FOR_NULL(topic_name, nullptr); RMW_CHECK_ARGUMENT_FOR_NULL(qos_policies, nullptr); RMW_CHECK_ARGUMENT_FOR_NULL(publisher_options, nullptr); + if (publisher_options->require_unique_network_flow_endpoints == + RMW_UNIQUE_NETWORK_FLOW_ENDPOINTS_STRICTLY_REQUIRED) + { + RMW_CONNEXT_LOG_ERROR_SET( + "Strict requirement on unique network flow endpoints for publishers not supported"); + return nullptr; + } RMW_CONNEXT_LOG_DEBUG_A( "creating new publisher: topic=%s", diff --git a/rmw_connextdds_common/src/common/rmw_subscription.cpp b/rmw_connextdds_common/src/common/rmw_subscription.cpp index 378322e9..97f6a779 100644 --- a/rmw_connextdds_common/src/common/rmw_subscription.cpp +++ b/rmw_connextdds_common/src/common/rmw_subscription.cpp @@ -64,6 +64,13 @@ rmw_api_connextdds_create_subscription( RMW_CHECK_ARGUMENT_FOR_NULL(topic_name, nullptr); RMW_CHECK_ARGUMENT_FOR_NULL(qos_policies, nullptr); RMW_CHECK_ARGUMENT_FOR_NULL(subscription_options, nullptr); + if (subscription_options->require_unique_network_flow_endpoints == + RMW_UNIQUE_NETWORK_FLOW_ENDPOINTS_STRICTLY_REQUIRED) + { + RMW_CONNEXT_LOG_ERROR_SET( + "Strict requirement on unique network flow endpoints for subscriptions not supported"); + return nullptr; + } RMW_CONNEXT_LOG_DEBUG_A( "creating new subscription: topic=%s", diff --git a/rmw_connextddsmicro/src/rmw_api_impl_rtime.cpp b/rmw_connextddsmicro/src/rmw_api_impl_rtime.cpp index 9760208b..42853c4e 100644 --- a/rmw_connextddsmicro/src/rmw_api_impl_rtime.cpp +++ b/rmw_connextddsmicro/src/rmw_api_impl_rtime.cpp @@ -819,3 +819,30 @@ rmw_qos_profile_check_compatible( reason, reason_size); } + +/***************************************************************************** + * Network Flow Endpoints API + *****************************************************************************/ +rmw_ret_t +rmw_publisher_get_network_flow_endpoints( + const rmw_publisher_t * publisher, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array) +{ + return rmw_api_connextdds_publisher_get_network_flow_endpoints( + publisher, + allocator, + network_flow_endpoint_array); +} + +rmw_ret_t +rmw_subscription_get_network_flow_endpoints( + const rmw_subscription_t * subscription, + rcutils_allocator_t * allocator, + rmw_network_flow_endpoint_array_t * network_flow_endpoint_array) +{ + return rmw_api_connextdds_subscription_get_network_flow_endpoints( + subscription, + allocator, + network_flow_endpoint_array); +}