Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ rmw_connextdds_graph_add_remote_entity(
const DDS_GUID_t * const dp_guid,
const char * const topic_name,
const char * const type_name,
const DDS_UserDataQosPolicy * const user_data,
const DDS_ReliabilityQosPolicy * const reliability,
const DDS_DurabilityQosPolicy * const durability,
const DDS_DeadlineQosPolicy * const deadline,
Expand Down
1 change: 1 addition & 0 deletions rmw_connextdds_common/include/rmw_connextdds/rmw_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -811,6 +811,7 @@ rmw_connextdds_get_readerwriter_qos(
DDS_ResourceLimitsQosPolicy * const resource_limits,
DDS_PublishModeQosPolicy * const publish_mode,
DDS_LifespanQosPolicy * const lifespan,
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);
Expand Down
7 changes: 7 additions & 0 deletions rmw_connextdds_common/include/rmw_connextdds/type_support.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

#include "rmw_connextdds/context.hpp"

#include "rosidl_runtime_c/type_hash.h"

#include "rosidl_typesupport_fastrtps_c/identifier.h"
#include "rosidl_typesupport_fastrtps_cpp/identifier.hpp"
#include "rosidl_typesupport_fastrtps_cpp/message_type_support.h"
Expand Down Expand Up @@ -82,6 +84,11 @@ class RMW_Connext_MessageTypeSupport
return this->_type_name.c_str();
}

const rosidl_type_hash_t & type_hash() const
{
return *_type_support_fastrtps->type_hash;
}

uint32_t type_serialized_size_max() const
{
return this->_serialized_size_max;
Expand Down
22 changes: 22 additions & 0 deletions rmw_connextdds_common/src/common/rmw_graph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#include "rmw_connextdds/discovery.hpp"
#include "rmw_connextdds/graph_cache.hpp"

#include "rosidl_runtime_c/type_hash.h"

// Aliases for rmw.h functions referenced by rmw_dds_common inline functions
#define rmw_publish rmw_api_connextdds_publish

Expand All @@ -27,6 +29,7 @@ rmw_connextdds_graph_add_entityEA(
const DDS_GUID_t * const dp_guid,
const char * const topic_name,
const char * const type_name,
const rosidl_type_hash_t & type_hash,
const DDS_HistoryQosPolicy * const history,
const DDS_ReliabilityQosPolicy * const reliability,
const DDS_DurabilityQosPolicy * const durability,
Expand Down Expand Up @@ -727,6 +730,7 @@ rmw_connextdds_graph_add_entityEA(
const DDS_GUID_t * const dp_guid,
const char * const topic_name,
const char * const type_name,
const rosidl_type_hash_t & type_hash,
const DDS_HistoryQosPolicy * const history,
const DDS_ReliabilityQosPolicy * const reliability,
const DDS_DurabilityQosPolicy * const durability,
Expand Down Expand Up @@ -788,6 +792,7 @@ rmw_connextdds_graph_add_entityEA(
gid,
std::string(topic_name),
std::string(type_name),
type_hash,
dp_gid,
qos_profile,
is_reader))
Expand Down Expand Up @@ -875,6 +880,7 @@ rmw_connextdds_graph_add_local_publisherEA(
&dp_guid,
topic_name,
pub->message_type_support()->type_name(),
pub->message_type_support()->type_hash(),
&dw_qos.history,
&dw_qos.reliability,
&dw_qos.durability,
Expand Down Expand Up @@ -946,6 +952,7 @@ rmw_connextdds_graph_add_local_subscriberEA(
&dp_guid,
topic_name,
sub->message_type_support()->type_name(),
sub->message_type_support()->type_hash(),
&dr_qos.history,
&dr_qos.reliability,
&dr_qos.durability,
Expand All @@ -963,6 +970,7 @@ rmw_connextdds_graph_add_remote_entity(
const DDS_GUID_t * const dp_guid,
const char * const topic_name,
const char * const type_name,
const DDS_UserDataQosPolicy * const user_data,
const DDS_ReliabilityQosPolicy * const reliability,
const DDS_DurabilityQosPolicy * const durability,
const DDS_DeadlineQosPolicy * const deadline,
Expand All @@ -982,12 +990,26 @@ rmw_connextdds_graph_add_remote_entity(
return RMW_RET_OK;
}

const uint8_t * user_data_data = DDS_OctetSeq_get_contiguous_buffer(&user_data->value);
const size_t user_data_size = DDS_OctetSeq_get_length(&user_data->value);
rosidl_type_hash_t type_hash;
if (RMW_RET_OK != rmw_dds_common::parse_type_hash_from_user_data(
user_data_data, user_data_size, type_hash))
{
RMW_CONNEXT_LOG_WARNING_A(
"Failed to parse type hash for topic '%s' with type '%s' from USER_DATA '%*s'.",
topic_name, type_name,
static_cast<int>(user_data_size), reinterpret_cast<const char *>(user_data_data));
type_hash = rosidl_get_zero_initialized_type_hash();
}

rmw_ret_t rc = rmw_connextdds_graph_add_entityEA(
ctx,
endp_guid,
dp_guid,
topic_name,
type_name,
type_hash,
nullptr /* history (not propagated via discovery) */,
reliability,
durability,
Expand Down
16 changes: 15 additions & 1 deletion rmw_connextdds_common/src/common/rmw_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <stdexcept>

#include "rmw_dds_common/time_utils.hpp"
#include "rmw_dds_common/qos.hpp"

#include "rmw_connextdds/graph_cache.hpp"

Expand Down Expand Up @@ -303,12 +304,12 @@ rmw_connextdds_get_readerwriter_qos(
DDS_ResourceLimitsQosPolicy * const resource_limits,
DDS_PublishModeQosPolicy * const publish_mode,
DDS_LifespanQosPolicy * const lifespan,
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)
{
UNUSED_ARG(writer_qos);
UNUSED_ARG(type_support);
UNUSED_ARG(publish_mode);
UNUSED_ARG(resource_limits);
UNUSED_ARG(pub_options);
Expand Down Expand Up @@ -454,6 +455,19 @@ rmw_connextdds_get_readerwriter_qos(
}
#endif /* RMW_CONNEXT_DDS_API == RMW_CONNEXT_DDS_API_PRO */

std::string user_data_str;
if (RMW_RET_OK != rmw_dds_common::encode_type_hash_for_user_data_qos(
type_support->type_hash(), user_data_str))
{
RMW_CONNEXT_LOG_WARNING(
"Failed to encode type hash for topic, will not distribute it in USER_DATA.");
user_data_str.clear();
}
DDS_OctetSeq_from_array(
&user_data->value,
reinterpret_cast<const uint8_t *>(user_data_str.c_str()),
static_cast<DDS_Long>(user_data_str.size()));

return RMW_RET_OK;
}

Expand Down
4 changes: 4 additions & 0 deletions rmw_connextdds_common/src/ndds/dds_api_ndds.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,7 @@ rmw_connextdds_get_datawriter_qos(
// TODO(asorbini) this value is not actually used, remove it
&qos->publish_mode,
&qos->lifespan,
&qos->user_data,
qos_policies,
pub_options,
nullptr /* sub_options */))
Expand Down Expand Up @@ -593,6 +594,7 @@ rmw_connextdds_get_datareader_qos(
&qos->resource_limits,
nullptr /* publish_mode */,
nullptr /* Lifespan is a writer-only qos policy */,
&qos->user_data,
qos_policies,
nullptr /* pub_options */,
sub_options))
Expand Down Expand Up @@ -1219,6 +1221,7 @@ rmw_connextdds_dcps_publication_on_data(rmw_context_impl_t * const ctx)
&dp_guid,
data->topic_name,
data->type_name,
&data->user_data,
&data->reliability,
&data->durability,
&data->deadline,
Expand Down Expand Up @@ -1302,6 +1305,7 @@ rmw_connextdds_dcps_subscription_on_data(rmw_context_impl_t * const ctx)
&dp_guid,
data->topic_name,
data->type_name,
&data->user_data,
&data->reliability,
&data->durability,
&data->deadline,
Expand Down
4 changes: 4 additions & 0 deletions rmw_connextdds_common/src/rtime/dds_api_rtime.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1015,6 +1015,7 @@ rmw_connextdds_get_datawriter_qos(
&qos->resource_limits,
&qos->publish_mode,
nullptr /* Micro doesn't support DDS_LifespanQosPolicy */,
&qos->user_data,
qos_policies,
pub_options,
nullptr /* sub_options */))
Expand Down Expand Up @@ -1064,6 +1065,7 @@ rmw_connextdds_get_datareader_qos(
&qos->resource_limits,
nullptr /* publish_mode */,
nullptr /* Lifespan is a writer-only qos policy */,
&qos->user_data,
qos_policies,
nullptr /* pub_options */,
sub_options))
Expand Down Expand Up @@ -1766,6 +1768,7 @@ rmw_connextdds_dcps_publication_on_data(rmw_context_impl_t * const ctx)
&dp_guid,
qdata.data.topic_name,
qdata.data.type_name,
&data->user_data,
&qdata.data.reliability,
&qdata.data.durability,
&qdata.data.deadline,
Expand Down Expand Up @@ -1824,6 +1827,7 @@ rmw_connextdds_dcps_subscription_on_data(rmw_context_impl_t * const ctx)
&dp_guid,
qdata.data.topic_name,
qdata.data.type_name,
&data->user_data,
&qdata.data.reliability,
&qdata.data.durability,
&qdata.data.deadline,
Expand Down