@@ -230,6 +230,25 @@ static bool get_unique_flows_parameters(
230
230
return true ;
231
231
}
232
232
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
+
233
252
Locator_t& RTPSParticipantImpl::applyLocatorAdaptRule (
234
253
Locator_t& loc)
235
254
{
@@ -480,6 +499,14 @@ bool RTPSParticipantImpl::setup_transports()
480
499
register_transport = false ;
481
500
}
482
501
}
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
+ }
483
510
484
511
bool transport_registered = register_transport && m_network_Factory.RegisterTransport (
485
512
transportDescriptor.get (), &m_att.properties , m_att.max_msg_size_no_frag );
@@ -495,12 +522,12 @@ bool RTPSParticipantImpl::setup_transports()
495
522
if (transport_registered)
496
523
{
497
524
has_shm_transport_ |=
498
- (dynamic_cast <SharedMemTransportDescriptor*>(transportDescriptor.get ()) != nullptr );
525
+ (nullptr != dynamic_cast <SharedMemTransportDescriptor*>(transportDescriptor.get ()));
499
526
}
500
527
else
501
528
{
502
529
// SHM transport could be disabled
503
- if ((dynamic_cast <SharedMemTransportDescriptor*>(transportDescriptor.get ()) != nullptr ))
530
+ if ((nullptr != dynamic_cast <SharedMemTransportDescriptor*>(transportDescriptor.get ())))
504
531
{
505
532
EPROSIMA_LOG_ERROR (RTPS_PARTICIPANT,
506
533
" Unable to Register SHM Transport. SHM Transport is not supported in"
0 commit comments