Skip to content

Commit d960799

Browse files
Check max message big enough for registering transport
Signed-off-by: Eugenio Collado <[email protected]>
1 parent 1b90f21 commit d960799

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed

src/cpp/rtps/participant/RTPSParticipantImpl.cpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,25 @@ static bool get_unique_flows_parameters(
230230
return true;
231231
}
232232

233+
/**
234+
* @brief This method checks if the maximum message size is equal or higher than the PDP package size.
235+
* @return true if the maximum message size is equal or higher than the PDP package size, false otherwise.
236+
*/
237+
static bool is_max_message_size_big_enough(
238+
const uint32_t max_message_size)
239+
{
240+
constexpr uint32_t info_dst_message_length = 16;
241+
constexpr uint32_t info_ts_message_length = 12;
242+
uint32_t statistics_message_length = 0;
243+
#ifdef FASTDDS_STATISTICS
244+
statistics_message_length = eprosima::fastdds::statistics::rtps::statistics_submessage_length;
245+
#endif // FASTDDS_STATISTICS
246+
247+
return max_message_size >=
248+
(RTPSMESSAGE_HEADER_SIZE + BUILTIN_DATA_MAX_SIZE + info_dst_message_length +
249+
info_ts_message_length + statistics_message_length);
250+
}
251+
233252
Locator_t& RTPSParticipantImpl::applyLocatorAdaptRule(
234253
Locator_t& loc)
235254
{
@@ -480,6 +499,14 @@ bool RTPSParticipantImpl::setup_transports()
480499
register_transport = false;
481500
}
482501
}
502+
auto max_message_size = transportDescriptor->max_message_size();
503+
if (!is_max_message_size_big_enough(max_message_size))
504+
{
505+
EPROSIMA_LOG_ERROR(RTPS_PARTICIPANT,
506+
"User transport failed to register. Maximum message size needs to be equal or higher than "
507+
"the PDP package size.");
508+
register_transport = false;
509+
}
483510

484511
bool transport_registered = register_transport && m_network_Factory.RegisterTransport(
485512
transportDescriptor.get(), &m_att.properties, m_att.max_msg_size_no_frag);
@@ -495,12 +522,12 @@ bool RTPSParticipantImpl::setup_transports()
495522
if (transport_registered)
496523
{
497524
has_shm_transport_ |=
498-
(dynamic_cast<SharedMemTransportDescriptor*>(transportDescriptor.get()) != nullptr);
525+
(nullptr != dynamic_cast<SharedMemTransportDescriptor*>(transportDescriptor.get()));
499526
}
500527
else
501528
{
502529
// SHM transport could be disabled
503-
if ((dynamic_cast<SharedMemTransportDescriptor*>(transportDescriptor.get()) != nullptr))
530+
if ((nullptr != dynamic_cast<SharedMemTransportDescriptor*>(transportDescriptor.get())))
504531
{
505532
EPROSIMA_LOG_ERROR(RTPS_PARTICIPANT,
506533
"Unable to Register SHM Transport. SHM Transport is not supported in"

0 commit comments

Comments
 (0)