diff --git a/code/DDSCodeTester.cpp b/code/DDSCodeTester.cpp index f0c4a33c0..68067e964 100644 --- a/code/DDSCodeTester.cpp +++ b/code/DDSCodeTester.cpp @@ -903,6 +903,28 @@ void dds_domain_examples() "unicast"); //!-- } + + { + // MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT + DomainParticipantQos pqos; + + // Set maximum number of bytes of the datagram to be sent + pqos.properties().properties().emplace_back( + "fastdds.max_message_size", + "1200"); + //!-- + } + + { + // MAX_MESSAGE_SIZE_PROPERTY_WRITER + DataWriterQos wqos; + + // Set maximum number of bytes of the datagram to be sent + wqos.properties().properties().emplace_back( + "fastdds.max_message_size", + "1200"); + //!-- + } } //DOMAINPARTICIPANTLISTENER-DISCOVERY-CALLBACKS @@ -4986,10 +5008,10 @@ void dynamictypes_examples() sequence_member_descriptor->type(DynamicTypeBuilderFactory::get_instance()->create_type( type_descriptor)->build()); */ - + // Add the sequence member to the struct struct_builder->add_member(sequence_member_descriptor); - + sequence_member_descriptor = traits::make_shared(); sequence_member_descriptor->name("short_sequence"); sequence_member_descriptor->type(DynamicTypeBuilderFactory::get_instance()->create_sequence_type( @@ -5027,7 +5049,7 @@ void dynamictypes_examples() int16_t out_simple_value; sequence_data->set_int16_value(2, in_simple_value); sequence_data->get_int16_value(out_simple_value, 2); - + data->return_loaned_value(sequence_data); //!-- } @@ -5080,7 +5102,7 @@ void dynamictypes_examples() int32_t out_simple_value; array_data->set_int32_value(2, in_simple_value); array_data->get_int32_value(out_simple_value, 2); - + data->return_loaned_value(array_data); //!-- } @@ -5351,7 +5373,7 @@ void dynamictypes_examples() // Get the loan for the bitset member DynamicData::_ref_type bitset_data = data->loan_value(data->get_member_id_by_name("my_bitset")); - // Set and retrieve bitfield values + // Set and retrieve bitfield values int16_t in_value {2}; int16_t out_value; bitset_data->set_int16_value(bitset_data->get_member_id_by_name("d"), in_value); diff --git a/code/XMLTester.xml b/code/XMLTester.xml index 970b93161..cc8c3b8c6 100644 --- a/code/XMLTester.xml +++ b/code/XMLTester.xml @@ -3232,6 +3232,42 @@ --> <--> +MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT<--> + + + + + + + + fastdds.max_message_size + 1200 + + + + + +<--> + +MAX_MESSAGE_SIZE_PROPERTY_WRITER<--> + + + + + + + fastdds.max_message_size + 1200 + + + + +<--> + FASTDDS_STATISTICS_MODULE<--> diff --git a/docs/fastdds/property_policies/non_consolidated_qos.rst b/docs/fastdds/property_policies/non_consolidated_qos.rst index 7b0e14656..17d91f7bb 100644 --- a/docs/fastdds/property_policies/non_consolidated_qos.rst +++ b/docs/fastdds/property_policies/non_consolidated_qos.rst @@ -351,3 +351,82 @@ The behavior regarding this can be configured using the property ``fastdds.shm.e :language: xml :start-after: XML-SHM-ENFORCE-META-TRAFFIC :end-before: <--> + +.. _property_max_message_size: + +Maximum Message Size +^^^^^^^^^^^^^^^^^^^^ + +One common requirement is the differentiation between the maximum size of received and sent datagrams. +This capability is especially important in scenarios where a system might need to handle large incoming +data sizes but should restrict the size of the data it sends to prevent overwhelming network resources +or complying with network traffic policies. +The primary attribute for controlling datagram size is `maxMessageSize`, which sets the upper limit +for both the size of datagrams that can be received and those that can be sent. +Property ``fastdds.max_message_size`` allows restricting the size of outgoing datagrams without +changing the size of incoming ones. +This property allows for the specific configuration of the maximum number of bytes for datagrams that +are sent. +By configuring this property to a value lower than the smallest `maxMessageSize` across all transports, +applications can achieve a lower sending limit while maintaining the ability to receive larger datagrams. + +.. list-table:: + :header-rows: 1 + :align: left + + * - PropertyPolicyQos name + - PropertyPolicyQos value + - Default value + * - ``"fastdds.max_message_size"`` + - ``uint32_t`` + - ``"4294967295"`` + +.. note:: + An invalid value of ``fastdds.max_message_size`` would log an error, + and the default value will be used. + +.. _setting_max_message_size_participant: + +Setting ``fastdds.max_message_size`` At Participant Level +""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +.. tabs:: + + .. tab:: C++ + + .. literalinclude:: /../code/DDSCodeTester.cpp + :language: c++ + :start-after: // MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT + :end-before: //!-- + :dedent: 6 + + .. tab:: XML + + .. literalinclude:: /../code/XMLTester.xml + :language: xml + :start-after: MAX_MESSAGE_SIZE_PROPERTY_PARTICIPANT<--> + :end-before: <--> + :lines: 2,4-16 + +.. _setting_max_message_size_writer: + +Setting ``fastdds.max_message_size`` At Writer Level +"""""""""""""""""""""""""""""""""""""""""""""""""""" + +.. tabs:: + + .. tab:: C++ + + .. literalinclude:: /../code/DDSCodeTester.cpp + :language: c++ + :start-after: // MAX_MESSAGE_SIZE_PROPERTY_WRITER + :end-before: //!-- + :dedent: 6 + + .. tab:: XML + + .. literalinclude:: /../code/XMLTester.xml + :language: xml + :start-after: MAX_MESSAGE_SIZE_PROPERTY_WRITER<--> + :end-before: <--> + :lines: 2,4-14