diff --git a/examples/cpp/rtps/WriterApp.cpp b/examples/cpp/rtps/WriterApp.cpp index cc99a6d7d0..f80dc2bb25 100644 --- a/examples/cpp/rtps/WriterApp.cpp +++ b/examples/cpp/rtps/WriterApp.cpp @@ -108,13 +108,11 @@ WriterApp::WriterApp( PublicationBuiltinTopicData pub_builtin_data; pub_builtin_data.type_name = "HelloWorld"; pub_builtin_data.topic_name = topic_name; - - eprosima::fastdds::dds::WriterQos writer_qos; - writer_qos.m_durability.kind = eprosima::fastdds::dds::TRANSIENT_LOCAL_DURABILITY_QOS; - writer_qos.m_reliability.kind = eprosima::fastdds::dds::RELIABLE_RELIABILITY_QOS; + pub_builtin_data.durability.kind = eprosima::fastdds::dds::TRANSIENT_LOCAL_DURABILITY_QOS; + pub_builtin_data.reliability.kind = eprosima::fastdds::dds::RELIABLE_RELIABILITY_QOS; // Register entity - if (!rtps_participant_->register_writer(rtps_writer_, pub_builtin_data, writer_qos)) + if (!rtps_participant_->register_writer(rtps_writer_, pub_builtin_data)) { throw std::runtime_error("Entity registration failed"); } diff --git a/include/fastdds/rtps/participant/RTPSParticipant.hpp b/include/fastdds/rtps/participant/RTPSParticipant.hpp index 0f05f37c0b..91de38df48 100644 --- a/include/fastdds/rtps/participant/RTPSParticipant.hpp +++ b/include/fastdds/rtps/participant/RTPSParticipant.hpp @@ -142,13 +142,11 @@ class FASTDDS_EXPORTED_API RTPSParticipant * Register a Writer in the BuiltinProtocols. * @param rtps_writer Pointer to the RTPSWriter. * @param pub_builtin_data Contains the discovery information of the writer. - * @param wqos WriterQos. * @return True if correctly registered. */ bool register_writer( RTPSWriter* rtps_writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos); + const PublicationBuiltinTopicData& pub_builtin_data); /** * Register a Reader in the BuiltinProtocols. diff --git a/src/cpp/fastdds/publisher/DataWriterImpl.cpp b/src/cpp/fastdds/publisher/DataWriterImpl.cpp index fa2ee5e421..0f1d6b4b85 100644 --- a/src/cpp/fastdds/publisher/DataWriterImpl.cpp +++ b/src/cpp/fastdds/publisher/DataWriterImpl.cpp @@ -457,23 +457,23 @@ ReturnCode_t DataWriterImpl::enable() } // REGISTER THE WRITER - WriterQos wqos = qos_.get_writerqos(get_publisher()->get_qos(), topic_->get_qos()); + auto builtin_topic_data = get_publication_builtin_topic_data(); if (!is_data_sharing_compatible_) { - wqos.data_sharing.off(); + builtin_topic_data.data_sharing.off(); } if (endpoint_partitions) { std::istringstream partition_string(*endpoint_partitions); std::string partition_name; - wqos.m_partition.clear(); + builtin_topic_data.partition.clear(); while (std::getline(partition_string, partition_name, ';')) { - wqos.m_partition.push_back(partition_name.c_str()); + builtin_topic_data.partition.push_back(partition_name.c_str()); } } - publisher_->rtps_participant()->register_writer(writer_, get_publication_builtin_topic_data(), wqos); + publisher_->rtps_participant()->register_writer(writer_, builtin_topic_data); return RETCODE_OK; } @@ -1700,6 +1700,7 @@ PublicationBuiltinTopicData DataWriterImpl::get_publication_builtin_topic_data() { pub_builtin_data.topic_name = topic_->get_name(); pub_builtin_data.type_name = topic_->get_type_name(); + pub_builtin_data.topic_data = topic_->get_qos().topic_data(); } // DataWriter qos @@ -1765,6 +1766,17 @@ PublicationBuiltinTopicData DataWriterImpl::get_publication_builtin_topic_data() } pub_builtin_data.representation = qos_.representation(); + // eProsima extensions + + pub_builtin_data.disable_positive_acks = qos_.reliable_writer_qos().disable_positive_acks; + pub_builtin_data.data_sharing = qos_.data_sharing(); + + if (pub_builtin_data.data_sharing.kind() != OFF && + pub_builtin_data.data_sharing.domain_ids().empty()) + { + pub_builtin_data.data_sharing.add_domain_id(utils::default_domain_id()); + } + pub_builtin_data.guid = guid(); if (publisher_is_valid) { diff --git a/src/cpp/rtps/builtin/BuiltinProtocols.cpp b/src/cpp/rtps/builtin/BuiltinProtocols.cpp index b406022c89..4548c29a90 100644 --- a/src/cpp/rtps/builtin/BuiltinProtocols.cpp +++ b/src/cpp/rtps/builtin/BuiltinProtocols.cpp @@ -196,14 +196,13 @@ void BuiltinProtocols::filter_server_remote_locators( bool BuiltinProtocols::add_writer( RTPSWriter* rtps_writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos) + const PublicationBuiltinTopicData& pub_builtin_data) { bool ok = true; if (nullptr != mp_PDP) { - ok = mp_PDP->get_edp()->new_writer_proxy_data(rtps_writer, pub_builtin_data, wqos); + ok = mp_PDP->get_edp()->new_writer_proxy_data(rtps_writer, pub_builtin_data); if (!ok) { @@ -218,7 +217,7 @@ bool BuiltinProtocols::add_writer( if (nullptr != mp_WLP) { - ok &= mp_WLP->add_local_writer(rtps_writer, wqos); + ok &= mp_WLP->add_local_writer(rtps_writer, pub_builtin_data.liveliness); } else { diff --git a/src/cpp/rtps/builtin/BuiltinProtocols.h b/src/cpp/rtps/builtin/BuiltinProtocols.h index 18ca318816..acf2ee0f63 100644 --- a/src/cpp/rtps/builtin/BuiltinProtocols.h +++ b/src/cpp/rtps/builtin/BuiltinProtocols.h @@ -129,15 +129,13 @@ class BuiltinProtocols /** * Add a local writer to the BuiltinProtocols. - * @param writer Pointer to the RTPSWriter - * @param topicAtt Attributes of the associated topic - * @param wqos QoS policies dictated by the publisher + * @param writer Pointer to the RTPSWriter + * @param pub_builtin_data QoS policies dictated by the publisher * @return True if correct. */ bool add_writer( RTPSWriter* rtps_writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos); + const PublicationBuiltinTopicData& pub_builtin_data); /** * Add a local reader to the BuiltinProtocols. * @param rtps_reader Pointer to the RTPSReader. diff --git a/src/cpp/rtps/builtin/discovery/endpoint/EDP.cpp b/src/cpp/rtps/builtin/discovery/endpoint/EDP.cpp index 6fa1c10e74..7ea6c7906a 100644 --- a/src/cpp/rtps/builtin/discovery/endpoint/EDP.cpp +++ b/src/cpp/rtps/builtin/discovery/endpoint/EDP.cpp @@ -240,14 +240,13 @@ bool EDP::new_reader_proxy_data( bool EDP::new_writer_proxy_data( RTPSWriter* rtps_writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos) + const PublicationBuiltinTopicData& pub_builtin_data) { EPROSIMA_LOG_INFO(RTPS_EDP, "Adding " << rtps_writer->getGuid().entityId << " in topic " << pub_builtin_data.topic_name.to_string()); - auto init_fun = [this, rtps_writer, &pub_builtin_data, &wqos]( + auto init_fun = [this, rtps_writer, &pub_builtin_data]( WriterProxyData* wpd, bool updating, const ParticipantProxyData& participant_data) @@ -260,6 +259,8 @@ bool EDP::new_writer_proxy_data( return false; } + from_builtin_to_proxy(pub_builtin_data, *wpd); + const NetworkFactory& network = mp_RTPSParticipant->network_factory(); const auto& watt = rtps_writer->getAttributes(); @@ -320,7 +321,7 @@ bool EDP::new_writer_proxy_data( BaseWriter* base_writer = BaseWriter::downcast(rtps_writer); assert(base_writer->get_history() != nullptr); wpd->typeMaxSerialized(base_writer->get_history()->getTypeMaxSerialized()); - wpd->m_qos.setQos(wqos, true); + wpd->m_qos.setQos(wpd->m_qos, true); wpd->userDefinedId(watt.getUserDefinedID()); wpd->persistence_guid(watt.persistence_guid); #if HAVE_SECURITY diff --git a/src/cpp/rtps/builtin/discovery/endpoint/EDP.h b/src/cpp/rtps/builtin/discovery/endpoint/EDP.h index c7d273cacb..ce5f3edebc 100644 --- a/src/cpp/rtps/builtin/discovery/endpoint/EDP.h +++ b/src/cpp/rtps/builtin/discovery/endpoint/EDP.h @@ -179,15 +179,13 @@ class EDP const fastdds::rtps::ContentFilterProperty* content_filter = nullptr); /** * Create a new ReaderPD for a local Writer. - * @param rtps_writer Pointer to the RTPSWriter. - * @param pub_builtin_data Publication data for the writer. - * @param qos QoS policies dictated by the publisher. + * @param rtps_writer Pointer to the RTPSWriter. + * @param pub_builtin_data QoS policies dictated by the publisher. * @return True if correct. */ bool new_writer_proxy_data( RTPSWriter* rtps_writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& qos); + const PublicationBuiltinTopicData& pub_builtin_data); /** * A previously created Reader has been updated * @param rtps_reader Pointer to the RTPSReader. diff --git a/src/cpp/rtps/builtin/liveliness/WLP.cpp b/src/cpp/rtps/builtin/liveliness/WLP.cpp index 5453119863..a5ce70a149 100644 --- a/src/cpp/rtps/builtin/liveliness/WLP.cpp +++ b/src/cpp/rtps/builtin/liveliness/WLP.cpp @@ -618,7 +618,7 @@ void WLP::removeRemoteEndpoints( bool WLP::add_local_writer( RTPSWriter* writer, - const fastdds::dds::WriterQos& wqos) + const fastdds::dds::LivelinessQosPolicy& qos) { std::lock_guard guard(*mp_builtinProtocols->mp_PDP->getMutex()); @@ -626,10 +626,9 @@ bool WLP::add_local_writer( BaseWriter* base_writer = BaseWriter::downcast(writer); - double wAnnouncementPeriodMilliSec(fastdds::rtps::TimeConv::Duration_t2MilliSecondsDouble(wqos.m_liveliness. - announcement_period)); + double wAnnouncementPeriodMilliSec(TimeConv::Duration_t2MilliSecondsDouble(qos.announcement_period)); - if (wqos.m_liveliness.kind == dds::AUTOMATIC_LIVELINESS_QOS ) + if (qos.kind == dds::AUTOMATIC_LIVELINESS_QOS ) { if (automatic_liveliness_assertion_ == nullptr) { @@ -656,7 +655,7 @@ bool WLP::add_local_writer( } automatic_writers_.push_back(base_writer); } - else if (wqos.m_liveliness.kind == dds::MANUAL_BY_PARTICIPANT_LIVELINESS_QOS) + else if (qos.kind == dds::MANUAL_BY_PARTICIPANT_LIVELINESS_QOS) { if (manual_liveliness_assertion_ == nullptr) { @@ -685,21 +684,21 @@ bool WLP::add_local_writer( if (!pub_liveliness_manager_->add_writer( writer->getGuid(), - wqos.m_liveliness.kind, - wqos.m_liveliness.lease_duration)) + qos.kind, + qos.lease_duration)) { EPROSIMA_LOG_ERROR(RTPS_LIVELINESS, "Could not add writer " << writer->getGuid() << " to liveliness manager"); } } - else if (wqos.m_liveliness.kind == dds::MANUAL_BY_TOPIC_LIVELINESS_QOS) + else if (qos.kind == dds::MANUAL_BY_TOPIC_LIVELINESS_QOS) { manual_by_topic_writers_.push_back(base_writer); if (!pub_liveliness_manager_->add_writer( writer->getGuid(), - wqos.m_liveliness.kind, - wqos.m_liveliness.lease_duration)) + qos.kind, + qos.lease_duration)) { EPROSIMA_LOG_ERROR(RTPS_LIVELINESS, "Could not add writer " << writer->getGuid() << " to liveliness manager"); diff --git a/src/cpp/rtps/builtin/liveliness/WLP.hpp b/src/cpp/rtps/builtin/liveliness/WLP.hpp index 1a28e51198..22c6c3dce1 100644 --- a/src/cpp/rtps/builtin/liveliness/WLP.hpp +++ b/src/cpp/rtps/builtin/liveliness/WLP.hpp @@ -109,12 +109,12 @@ class WLP /** * Add a local writer to the liveliness protocol. * @param writer Pointer to the RTPSWriter. - * @param wqos Quality of service policies for the writer. + * @param qos Quality of service policies for the writer. * @return True if correct. */ bool add_local_writer( RTPSWriter* writer, - const fastdds::dds::WriterQos& wqos); + const fastdds::dds::LivelinessQosPolicy& qos); /** * Remove a local writer from the liveliness protocol. * @param writer Pointer to the RTPSWriter. diff --git a/src/cpp/rtps/participant/RTPSParticipant.cpp b/src/cpp/rtps/participant/RTPSParticipant.cpp index d822c2d4f5..5020f2642c 100644 --- a/src/cpp/rtps/participant/RTPSParticipant.cpp +++ b/src/cpp/rtps/participant/RTPSParticipant.cpp @@ -77,10 +77,9 @@ uint32_t RTPSParticipant::getRTPSParticipantID() const bool RTPSParticipant::register_writer( RTPSWriter* writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos) + const PublicationBuiltinTopicData& pub_builtin_data) { - return mp_impl->register_writer(writer, pub_builtin_data, wqos); + return mp_impl->register_writer(writer, pub_builtin_data); } bool RTPSParticipant::register_reader( diff --git a/src/cpp/rtps/participant/RTPSParticipantImpl.cpp b/src/cpp/rtps/participant/RTPSParticipantImpl.cpp index 32ad308c7c..1e3677615a 100644 --- a/src/cpp/rtps/participant/RTPSParticipantImpl.cpp +++ b/src/cpp/rtps/participant/RTPSParticipantImpl.cpp @@ -1406,10 +1406,9 @@ void RTPSParticipantImpl::disableReader( bool RTPSParticipantImpl::register_writer( RTPSWriter* rtps_writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos) + const PublicationBuiltinTopicData& pub_builtin_data) { - return this->mp_builtinProtocols->add_writer(rtps_writer, pub_builtin_data, wqos); + return this->mp_builtinProtocols->add_writer(rtps_writer, pub_builtin_data); } bool RTPSParticipantImpl::register_reader( @@ -2865,9 +2864,9 @@ const fastdds::statistics::rtps::IStatusObserver* RTPSParticipantImpl::create_mo }, [&](RTPSWriter* w, const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos) -> bool + const fastdds::dds::WriterQos& /*wqos*/) -> bool { - return this->register_writer(w, pub_builtin_data, wqos); + return this->register_writer(w, pub_builtin_data); }, getEventResource() )); diff --git a/src/cpp/rtps/participant/RTPSParticipantImpl.h b/src/cpp/rtps/participant/RTPSParticipantImpl.h index c2570297b7..ce994ca691 100644 --- a/src/cpp/rtps/participant/RTPSParticipantImpl.h +++ b/src/cpp/rtps/participant/RTPSParticipantImpl.h @@ -887,13 +887,11 @@ class RTPSParticipantImpl * Register a Writer in the BuiltinProtocols. * @param Writer Pointer to the RTPSWriter. * @param pub_builtin_data Contains the discovery information of the writer. - * @param wqos WriterQos. * @return True if correctly registered. */ bool register_writer( RTPSWriter* Writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos); + const PublicationBuiltinTopicData& pub_builtin_data); /** * Register a Reader in the BuiltinProtocols. diff --git a/test/blackbox/common/RTPSBlackboxTestsBasic.cpp b/test/blackbox/common/RTPSBlackboxTestsBasic.cpp index c1c7e58f0e..845dfb7d69 100644 --- a/test/blackbox/common/RTPSBlackboxTestsBasic.cpp +++ b/test/blackbox/common/RTPSBlackboxTestsBasic.cpp @@ -819,8 +819,7 @@ TEST(RTPS, MultithreadedWriterCreation) pub_builtin_data.type_name = "string"; pub_builtin_data.topic_name = "test_topic"; /* Register writer in participant */ - eprosima::fastdds::dds::WriterQos writer_qos; - ASSERT_EQ(rtps_participant->register_writer(writer, pub_builtin_data, writer_qos), true); + ASSERT_EQ(rtps_participant->register_writer(writer, pub_builtin_data), true); { /* Wait for test completion request */ diff --git a/test/blackbox/common/RTPSWithRegistrationWriter.hpp b/test/blackbox/common/RTPSWithRegistrationWriter.hpp index f2c7423643..6ae65e9114 100644 --- a/test/blackbox/common/RTPSWithRegistrationWriter.hpp +++ b/test/blackbox/common/RTPSWithRegistrationWriter.hpp @@ -178,7 +178,7 @@ class RTPSWithRegistrationWriter return; } - ASSERT_EQ(participant_->register_writer(writer_, pub_builtin_data_, writer_qos_), true); + ASSERT_EQ(participant_->register_writer(writer_, pub_builtin_data_), true); initialized_ = true; } diff --git a/test/mock/rtps/RTPSParticipant/fastdds/rtps/participant/RTPSParticipant.hpp b/test/mock/rtps/RTPSParticipant/fastdds/rtps/participant/RTPSParticipant.hpp index 5791386c72..a304a4932d 100644 --- a/test/mock/rtps/RTPSParticipant/fastdds/rtps/participant/RTPSParticipant.hpp +++ b/test/mock/rtps/RTPSParticipant/fastdds/rtps/participant/RTPSParticipant.hpp @@ -185,10 +185,9 @@ class FASTDDS_EXPORTED_API RTPSParticipant MOCK_CONST_METHOD0(typelookup_manager, fastdds::dds::builtin::TypeLookupManager* ()); - MOCK_METHOD3(register_writer, bool( + MOCK_METHOD2(register_writer, bool( RTPSWriter * Writer, - const PublicationBuiltinTopicData& pub_builtin_data, - const fastdds::dds::WriterQos& wqos)); + const PublicationBuiltinTopicData& pub_builtin_data)); MOCK_METHOD2(update_writer, bool( RTPSWriter * Writer, diff --git a/test/unittest/rtps/reader/StatefulReaderTests.cpp b/test/unittest/rtps/reader/StatefulReaderTests.cpp index 217b87f6a8..e4b0e129d7 100644 --- a/test/unittest/rtps/reader/StatefulReaderTests.cpp +++ b/test/unittest/rtps/reader/StatefulReaderTests.cpp @@ -97,7 +97,7 @@ TEST(StatefulReaderTests, RTPSCorrectGAPProcessing) pub_builtin_data.type_name = "string"; pub_builtin_data.topic_name = "topic"; part->register_reader(reader, sub_builtin_data); - part->register_writer(writer, pub_builtin_data, {}); + part->register_writer(writer, pub_builtin_data); // After registration, the writer should be matched auto writer_guid = writer->getGuid(); diff --git a/test/unittest/statistics/rtps/RTPSStatisticsTests.cpp b/test/unittest/statistics/rtps/RTPSStatisticsTests.cpp index 40956858a1..d5784fc796 100644 --- a/test/unittest/statistics/rtps/RTPSStatisticsTests.cpp +++ b/test/unittest/statistics/rtps/RTPSStatisticsTests.cpp @@ -358,9 +358,14 @@ class RTPSStatisticsTestsImpl using namespace fastdds; using namespace fastdds::rtps; + auto& watt = writer_->getAttributes(); PublicationBuiltinTopicData pub_builtin_data; pub_builtin_data.type_name = data_type; pub_builtin_data.topic_name = topic_name; + pub_builtin_data.durability.durabilityKind(watt.durabilityKind); + pub_builtin_data.reliability.kind = + RELIABLE == + watt.reliabilityKind ? dds::RELIABLE_RELIABILITY_QOS : dds::BEST_EFFORT_RELIABILITY_QOS; auto& ratt = writer_->getAttributes(); SubscriptionBuiltinTopicData sub_builtin_data; @@ -371,15 +376,7 @@ class RTPSStatisticsTestsImpl RELIABLE == ratt.reliabilityKind ? dds::RELIABLE_RELIABILITY_QOS : dds::BEST_EFFORT_RELIABILITY_QOS; - - dds::WriterQos Wqos; - auto& watt = writer_->getAttributes(); - Wqos.m_durability.durabilityKind(watt.durabilityKind); - Wqos.m_reliability.kind = - RELIABLE == - watt.reliabilityKind ? dds::RELIABLE_RELIABILITY_QOS : dds::BEST_EFFORT_RELIABILITY_QOS; - - participant_->register_writer(writer_, pub_builtin_data, Wqos); + participant_->register_writer(writer_, pub_builtin_data); participant_->register_reader(reader_, sub_builtin_data); }