Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions rmw_connextdds/src/rmw_api_impl_ndds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include "rmw/event.h"
#include "rmw/get_node_info_and_types.h"
#include "rmw/get_service_endpoint_info.h"
#include "rmw/get_service_names_and_types.h"
#include "rmw/get_topic_endpoint_info.h"
#include "rmw/get_topic_names_and_types.h"
Expand Down Expand Up @@ -323,6 +324,31 @@ rmw_get_subscriptions_info_by_topic(
node, allocator, topic_name, no_mangle, subscriptions_info);
}

rmw_ret_t
rmw_get_clients_info_by_service(
const rmw_node_t * node,
rcutils_allocator_t * allocator,
const char * service_name,
bool no_mangle,
rmw_service_endpoint_info_array_t * clients_info)
{
return rmw_api_connextdds_get_clients_info_by_service(
node, allocator, service_name, no_mangle, clients_info);
}


rmw_ret_t
rmw_get_servers_info_by_service(
const rmw_node_t * node,
rcutils_allocator_t * allocator,
const char * service_name,
bool no_mangle,
rmw_service_endpoint_info_array_t * servers_info)
{
return rmw_api_connextdds_get_servers_info_by_service(
node, allocator, service_name, no_mangle, servers_info);
}

/*****************************************************************************
* Node API
*****************************************************************************/
Expand Down
12 changes: 8 additions & 4 deletions rmw_connextdds_common/include/rmw_connextdds/dds_api.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ rmw_connextdds_get_datawriter_qos(
DDS_Topic * const topic,
DDS_DataWriterQos * const qos,
const rmw_qos_profile_t * const qos_policies,
const rmw_publisher_options_t * const pub_options);
const rmw_publisher_options_t * const pub_options,
const rosidl_type_hash_t * ser_type_hash = nullptr);

rmw_ret_t
rmw_connextdds_get_datareader_qos(
Expand All @@ -117,7 +118,8 @@ rmw_connextdds_get_datareader_qos(
DDS_TopicDescription * const topic_desc,
DDS_DataReaderQos * const qos,
const rmw_qos_profile_t * const qos_policies,
const rmw_subscription_options_t * const sub_options);
const rmw_subscription_options_t * const sub_options,
const rosidl_type_hash_t * ser_type_hash = nullptr);

DDS_DataWriter *
rmw_connextdds_create_datawriter(
Expand All @@ -129,7 +131,8 @@ rmw_connextdds_create_datawriter(
const bool internal,
RMW_Connext_MessageTypeSupport * const type_support,
DDS_Topic * const topic,
DDS_DataWriterQos * const dw_qos);
DDS_DataWriterQos * const dw_qos,
const rosidl_type_hash_t * ser_type_hash = nullptr);

DDS_DataReader *
rmw_connextdds_create_datareader(
Expand All @@ -141,7 +144,8 @@ rmw_connextdds_create_datareader(
const bool internal,
RMW_Connext_MessageTypeSupport * const type_support,
DDS_TopicDescription * const topic_desc,
DDS_DataReaderQos * const dr_qos);
DDS_DataReaderQos * const dr_qos,
const rosidl_type_hash_t * ser_type_hash = nullptr);

rmw_ret_t
rmw_connextdds_write_message(
Expand Down
6 changes: 4 additions & 2 deletions rmw_connextdds_common/include/rmw_connextdds/graph_cache.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ rmw_ret_t
rmw_connextdds_graph_on_service_created(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Service * const svc);
RMW_Connext_Service * const svc,
const rosidl_type_hash_t * ser_type_hash);

rmw_ret_t
rmw_connextdds_graph_on_service_deleted(
Expand All @@ -82,7 +83,8 @@ rmw_ret_t
rmw_connextdds_graph_on_client_created(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Client * const client);
RMW_Connext_Client * const client,
const rosidl_type_hash_t * ser_type_hash);

rmw_ret_t
rmw_connextdds_graph_on_client_deleted(
Expand Down
18 changes: 18 additions & 0 deletions rmw_connextdds_common/include/rmw_connextdds/rmw_api_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,24 @@ rmw_api_connextdds_get_subscriptions_info_by_topic(
bool no_mangle,
rmw_topic_endpoint_info_array_t * subscriptions_info);

RMW_CONNEXTDDS_PUBLIC
rmw_ret_t
rmw_api_connextdds_get_clients_info_by_service(
const rmw_node_t * node,
rcutils_allocator_t * allocator,
const char * service_name,
bool no_mangle,
rmw_service_endpoint_info_array_t * clients_info);

RMW_CONNEXTDDS_PUBLIC
rmw_ret_t
rmw_api_connextdds_get_servers_info_by_service(
const rmw_node_t * node,
rcutils_allocator_t * allocator,
const char * service_name,
bool no_mangle,
rmw_service_endpoint_info_array_t * servers_info);

/*****************************************************************************
* Node API
*****************************************************************************/
Expand Down
9 changes: 6 additions & 3 deletions rmw_connextdds_common/include/rmw_connextdds/rmw_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,8 @@ class RMW_Connext_Publisher
const RMW_Connext_MessageType msg_type = RMW_CONNEXT_MESSAGE_USERDATA,
const void * const intro_members = nullptr,
const bool intro_members_cpp = false,
std::string * const type_name = nullptr);
std::string * const type_name = nullptr,
const rosidl_type_hash_t * ser_type_hash = nullptr);

rmw_ret_t
finalize();
Expand Down Expand Up @@ -417,7 +418,8 @@ class RMW_Connext_Subscriber
std::string * const type_name = nullptr,
const char * const cft_name = nullptr,
const char * const cft_filter = nullptr,
RMW_Connext_Publisher * const related_pub = nullptr);
RMW_Connext_Publisher * const related_pub = nullptr,
const rosidl_type_hash_t * ser_type_hash = nullptr);

rmw_ret_t
finalize();
Expand Down Expand Up @@ -978,7 +980,8 @@ rmw_connextdds_get_readerwriter_qos(
DDS_UserDataQosPolicy * const user_data,
const rmw_qos_profile_t * const qos_policies,
const rmw_publisher_options_t * const pub_options,
const rmw_subscription_options_t * const sub_options);
const rmw_subscription_options_t * const sub_options,
const rosidl_type_hash_t * ser_type_hash = nullptr);

rmw_ret_t
rmw_connextdds_readerwriter_qos_to_ros(
Expand Down
51 changes: 35 additions & 16 deletions rmw_connextdds_common/src/common/rmw_graph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ rmw_connextdds_graph_add_entityEA(
const DDS_LivelinessQosPolicy * const liveliness,
const DDS_LifespanQosPolicy * const lifespan,
const bool is_reader,
const bool local);
const bool local,
const rosidl_type_hash_t * ser_type_hash = nullptr);

static rmw_ret_t
rmw_connextdds_graph_remove_entityEA(
Expand All @@ -53,13 +54,15 @@ static rmw_ret_t
rmw_connextdds_graph_add_local_publisherEA(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Publisher * const pub);
RMW_Connext_Publisher * const pub,
const rosidl_type_hash_t * ser_type_hash = nullptr);

static rmw_ret_t
rmw_connextdds_graph_add_local_subscriberEA(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Subscriber * const sub);
RMW_Connext_Subscriber * const sub,
const rosidl_type_hash_t * ser_type_hash = nullptr);

rmw_ret_t
rmw_connextdds_graph_initialize(rmw_context_impl_t * const ctx)
Expand Down Expand Up @@ -431,7 +434,8 @@ rmw_ret_t
rmw_connextdds_graph_on_service_created(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Service * const svc)
RMW_Connext_Service * const svc,
const rosidl_type_hash_t * ser_type_hash)
{
std::lock_guard<std::mutex> guard(ctx->common_mutex);
const rmw_gid_t pub_gid = *svc->publisher()->gid(),
Expand All @@ -454,14 +458,14 @@ rmw_connextdds_graph_on_service_created(
});

rmw_ret_t rc = rmw_connextdds_graph_add_local_subscriberEA(
ctx, node, svc->subscriber());
ctx, node, svc->subscriber(), ser_type_hash);
if (RMW_RET_OK != rc) {
return rc;
}
// set it so that it can be removed in the `scope_exit_entities_reset`
added_sub = true;

rc = rmw_connextdds_graph_add_local_publisherEA(ctx, node, svc->publisher());
rc = rmw_connextdds_graph_add_local_publisherEA(ctx, node, svc->publisher(), ser_type_hash);
if (RMW_RET_OK != rc) {
return rc;
}
Expand Down Expand Up @@ -509,7 +513,8 @@ rmw_ret_t
rmw_connextdds_graph_on_client_created(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Client * const client)
RMW_Connext_Client * const client,
const rosidl_type_hash_t * ser_type_hash)
{
std::lock_guard<std::mutex> guard(ctx->common_mutex);
const rmw_gid_t pub_gid = *client->publisher()->gid(),
Expand All @@ -532,13 +537,13 @@ rmw_connextdds_graph_on_client_created(
});

rmw_ret_t rc = rmw_connextdds_graph_add_local_subscriberEA(
ctx, node, client->subscriber());
ctx, node, client->subscriber(), ser_type_hash);
if (RMW_RET_OK != rc) {
return rc;
}
added_sub = true;

rc = rmw_connextdds_graph_add_local_publisherEA(ctx, node, client->publisher());
rc = rmw_connextdds_graph_add_local_publisherEA(ctx, node, client->publisher(), ser_type_hash);
if (RMW_RET_OK != rc) {
return rc;
}
Expand Down Expand Up @@ -666,7 +671,8 @@ rmw_connextdds_graph_add_entityEA(
const DDS_LivelinessQosPolicy * const liveliness,
const DDS_LifespanQosPolicy * const lifespan,
const bool is_reader,
const bool local)
const bool local,
const rosidl_type_hash_t * ser_type_hash)
{
UNUSED_ARG(local);
rmw_gid_t gid;
Expand Down Expand Up @@ -723,7 +729,8 @@ rmw_connextdds_graph_add_entityEA(
type_hash,
dp_gid,
qos_profile,
is_reader))
is_reader,
ser_type_hash))
{
// This is downgraded to a debug message because we might
// enter this path when asserting entities from discovery.
Expand Down Expand Up @@ -755,7 +762,8 @@ rmw_ret_t
rmw_connextdds_graph_add_local_publisherEA(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Publisher * const pub)
RMW_Connext_Publisher * const pub,
const rosidl_type_hash_t * ser_type_hash)
{
UNUSED_ARG(node);
RMW_CONNEXT_LOG_DEBUG_A(
Expand Down Expand Up @@ -820,14 +828,16 @@ rmw_connextdds_graph_add_local_publisherEA(
nullptr /* Micro doesn't support LifespanQosPolicy */,
#endif /* RMW_CONNEXT_DDS_API */
false /* is_reader */,
true /* local */);
true /* local */,
ser_type_hash);
}

rmw_ret_t
rmw_connextdds_graph_add_local_subscriberEA(
rmw_context_impl_t * const ctx,
const rmw_node_t * const node,
RMW_Connext_Subscriber * const sub)
RMW_Connext_Subscriber * const sub,
const rosidl_type_hash_t * ser_type_hash)
{
UNUSED_ARG(node);
RMW_CONNEXT_LOG_DEBUG_A(
Expand Down Expand Up @@ -888,7 +898,8 @@ rmw_connextdds_graph_add_local_subscriberEA(
&dr_qos.liveliness,
nullptr /* Lifespan is a writer-only qos policy */,
true /* is_reader */,
true /* local */);
true /* local */,
ser_type_hash);
}

rmw_ret_t
Expand Down Expand Up @@ -932,6 +943,13 @@ rmw_connextdds_graph_add_remote_entity(
// We handled the error, so clear it out
rmw_reset_error();
}
rosidl_type_hash_t ser_type_hash;
rosidl_type_hash_t * ser_type_hash_ptr = nullptr;
if (RMW_RET_OK == rmw_dds_common::parse_sertype_hash_from_user_data(
reinterpret_cast<const uint8_t *>(user_data_data), user_data_size, ser_type_hash))
{
ser_type_hash_ptr = &ser_type_hash;
}

rmw_ret_t rc = rmw_connextdds_graph_add_entityEA(
ctx,
Expand All @@ -947,7 +965,8 @@ rmw_connextdds_graph_add_remote_entity(
liveliness,
lifespan,
is_reader,
false /* local */);
false /* local */,
ser_type_hash_ptr);
if (RMW_RET_OK != rc) {
return rc;
}
Expand Down
Loading