From 3d13e96e102c2ce8358057670f6b602861bff610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ricardo=20Gonz=C3=A1lez?= Date: Tue, 27 Jan 2026 09:19:54 +0100 Subject: [PATCH] Fix warning on ubuntu noble (#133) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ricardo González Moreno (cherry picked from commit cb2addc43489153747752716fe6f88c9f34bdbdb) # Conflicts: # src/DiscoveryServerManager.cpp --- src/DiscoveryServerManager.cpp | 186 ++++++++++++++++++++++++++++----- 1 file changed, 162 insertions(+), 24 deletions(-) diff --git a/src/DiscoveryServerManager.cpp b/src/DiscoveryServerManager.cpp index 55454632..6a697066 100644 --- a/src/DiscoveryServerManager.cpp +++ b/src/DiscoveryServerManager.cpp @@ -110,7 +110,43 @@ DiscoveryServerManager::DiscoveryServerManager( tinyxml2::XMLElement* profiles = child->FirstChildElement(DSxmlparser::PROFILES); if (profiles != nullptr) { +<<<<<<< HEAD loadProfiles(profiles); +======= + tinyxml2::XMLPrinter printer; + profiles->Accept(&printer); + std::string xmlString = R"(")" + std::string(printer.CStr()) + R"(")"; + if (RETCODE_OK == DomainParticipantFactory::get_instance()->load_XML_profiles_string(xmlString.c_str(), + std::string(printer.CStr()).length())) + { + LOG_INFO("Profiles parsed successfully."); + } + else + { + LOG_ERROR("Error parsing profiles!"); + } + + // Store Topic Profiles + tinyxml2::XMLElement* topic_profile = profiles->FirstChildElement(s_sTopic.c_str()); + while (nullptr != topic_profile) + { + const char* topic_profile_name = topic_profile->Attribute(DSxmlparser::PROFILE_NAME); + if (topic_profile_name != nullptr) + { + auto topic_desc_it = topic_description_profiles_map.find(topic_profile_name); + if (topic_desc_it == topic_description_profiles_map.end()) + { + auto& topic_desc = topic_description_profiles_map[topic_profile_name]; + if (!fill_topic_description_profile(topic_profile, topic_desc)) + { + LOG_ERROR("Error parsing topic profiles"); + break; + } + } + } + topic_profile = topic_profile->NextSiblingElement(s_sTopic.c_str()); + } +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) } // Server processing requires a two pass analysis @@ -698,18 +734,73 @@ Topic* DiscoveryServerManager::getParticipantTopicByName( return returnTopic; } +<<<<<<< HEAD void DiscoveryServerManager::loadProfiles( tinyxml2::XMLElement* profiles) { xmlparser::XMLP_ret ret = xmlparser::XMLProfileManager::loadXMLProfiles(*profiles); +======= +bool DiscoveryServerManager::fill_topic_description_profile( + tinyxml2::XMLElement* elem, + TopicDescriptionItem& topic_description) +{ + /* + + + + + + + */ +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) if (ret == xmlparser::XMLP_ret::XML_OK) { +<<<<<<< HEAD LOG_INFO("Profiles parsed successfully."); } else { LOG_ERROR("Error parsing profiles!"); +======= + name = p_aux0->Name(); + + if (strcmp(name, DSxmlparser::NAME) == 0) + { + // name - stringType + const char* text = p_aux0->GetText(); + if (nullptr != text) + { + topic_description.name = text; + } + else + { + LOG_ERROR("<" << p_aux0->Value() << "> GetText XML_ERROR"); + ret = false; + break; + } + } + else if (strcmp(name, DSxmlparser::DATA_TYPE) == 0) + { + // dataType - stringType + const char* text = p_aux0->GetText(); + if (nullptr != text) + { + topic_description.type_name = text; + } + else + { + LOG_ERROR("<" << p_aux0->Value() << "> GetText XML_ERROR"); + ret = false; + break; + } + } + else + { + LOG_ERROR("Invalid element found into 'topicDescriptionType'. Name: " << name); + ret = false; + } +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) } } @@ -875,9 +966,7 @@ void DiscoveryServerManager::loadServer( GuidPrefix_t& prefix = dpQOS.wire_protocol().prefix; const char* cprefix = server->Attribute(DSxmlparser::PREFIX); - if (cprefix != nullptr && - !(std::istringstream(cprefix) >> prefix) && - (prefix == c_GuidPrefix_Unknown)) + if (cprefix != nullptr && !(std::istringstream(cprefix) >> prefix) && (prefix == c_GuidPrefix_Unknown)) { LOG_ERROR("Servers cannot have a framework provided prefix"); // at least for now return; @@ -886,8 +975,7 @@ void DiscoveryServerManager::loadServer( GUID_t guid(prefix, c_EntityId_RTPSParticipant); // Check if the guidPrefix is already in use (there is a mistake on config file) - if (enable_prefix_validation && - servers.find(guid) != servers.end()) + if (enable_prefix_validation && servers.find(guid) != servers.end()) { LOG_ERROR("DiscoveryServerManager detected two servers sharing the same prefix " << prefix); return; @@ -896,8 +984,7 @@ void DiscoveryServerManager::loadServer( // replace the DomainParticipantQOS builtin lists with the ones from server_locators (if present) // note that a previous call to DiscoveryServerManager::MapServerInfo serverLocator_map::mapped_type& lists = server_locators[guid]; - if (!lists.first.empty() || - !lists.second.empty()) + if (!lists.first.empty() || !lists.second.empty()) { // server elements take precedence over profile ones // I copy them because other servers may need this values @@ -954,7 +1041,12 @@ void DiscoveryServerManager::loadServer( // We define the PDP as external (when moved to fast library it would be SERVER) DiscoverySettings& b = dpQOS.wire_protocol().builtin.discovery_config; (void)b; +<<<<<<< HEAD assert(b.discoveryProtocol == SERVER || b.discoveryProtocol == BACKUP); +======= + assert(b.discoveryProtocol == eprosima::fastdds::rtps::DiscoveryProtocol::SERVER || + b.discoveryProtocol == eprosima::fastdds::rtps::DiscoveryProtocol::BACKUP); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) // Create the participant or the associated events DelayedParticipantCreation event(creation_time, std::move(dpQOS), &DiscoveryServerManager::addServer); @@ -1043,8 +1135,7 @@ void DiscoveryServerManager::loadClient( if (atts.rtps.builtin.discovery_config.discoveryProtocol != DiscoveryProtocol_t::CLIENT) #endif // if FASTRTPS_VERSION_MAJOR >= 2 { - LOG_ERROR( - "DiscoveryServerManager::loadClient try to create a client with an incompatible profile: " << + LOG_ERROR("DiscoveryServerManager::loadClient try to create a client with an incompatible profile: " << profile_name); return; } @@ -1156,7 +1247,7 @@ void DiscoveryServerManager::loadClient( if (!p4) { // try to find a descriptor matching the listener port setup - if (p4 = std::dynamic_pointer_cast(sp)) + if ((p4 = std::dynamic_pointer_cast(sp))) { continue; } @@ -1316,8 +1407,8 @@ void DiscoveryServerManager::loadSimple( if (dpQOS.wire_protocol().builtin.discovery_config.discoveryProtocol != DiscoveryProtocol_t::SIMPLE) { LOG_ERROR( - "DiscoveryServerManager::loadSimple try to create a simple participant with an incompatible profile: " << - profile_name); + "DiscoveryServerManager::loadSimple try to create a simple participant with an incompatible profile: " + << profile_name); return; } @@ -1482,9 +1573,14 @@ void DiscoveryServerManager::loadSubscriber( endpoint_profile = std::string(profile_name); } +<<<<<<< HEAD DelayedEndpointCreation event(creation_time, subatts.topic.getTopicName().to_string(), subatts.topic.getTopicDataType().to_string(), topic_name, endpoint_profile, part_guid, pDE, participant_creation_event); +======= + DelayedEndpointCreation event(creation_time, topic_description.name, topic_description.type_name, + topic_name, endpoint_profile, part_guid, pDE, participant_creation_event); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) if (creation_time == getTime()) { @@ -1604,9 +1700,14 @@ void DiscoveryServerManager::loadPublisher( endpoint_profile = std::string(profile_name); } +<<<<<<< HEAD DelayedEndpointCreation event(creation_time, pubatts.topic.getTopicName().to_string(), pubatts.topic.getTopicDataType().to_string(), topic_name, endpoint_profile, part_guid, pDE, participant_creation_event); +======= + DelayedEndpointCreation event(creation_time, topic_description.name, topic_description.type_name, + topic_name, endpoint_profile, part_guid, pDE, participant_creation_event); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) if (creation_time == getTime()) { @@ -1713,7 +1814,20 @@ void DiscoveryServerManager::MapServerInfo( // server GuidPrefix is either pass as an attribute (preferred to allow profile reuse) // or inside the profile. GuidPrefix_t prefix; +<<<<<<< HEAD std::shared_ptr atts; +======= + + std::shared_ptr pqos; + // I must load the prefix from the profile + // retrieve profile QOS + pqos = std::make_shared(); + if (RETCODE_OK != DomainParticipantFactory::get_instance()->get_participant_qos_from_profile(profile_name, *pqos)) + { + LOG_ERROR("DiscoveryServerManager::loadServer couldn't load profile " << profile_name); + return; + } +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) const char* cprefix = server->Attribute(DSxmlparser::PREFIX); @@ -1803,8 +1917,13 @@ void DiscoveryServerManager::on_participant_discovery( return; } +<<<<<<< HEAD LOG_INFO("Participant " << participant->get_qos().name().to_string() << " reports a participant " << info.info.m_participantName << " is " << info.status << ". Prefix " << partid); +======= + LOG_INFO("Participant " << participant->get_qos().name().to_string() << " reports a participant " << + info.participant_name << " is " << status << ". Prefix " << partid); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) std::chrono::steady_clock::time_point callback_time = std::chrono::steady_clock::now(); { @@ -1827,8 +1946,12 @@ void DiscoveryServerManager::on_participant_discovery( { case ParticipantDiscoveryInfo::DISCOVERED_PARTICIPANT: { +<<<<<<< HEAD state.AddParticipant(srcGuid, partid, info.info.m_participantName.to_string(), callback_time, server); +======= + state.AddParticipant(srcGuid, srcName, partid, info.participant_name.to_string(), callback_time, server); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) break; } case ParticipantDiscoveryInfo::REMOVED_PARTICIPANT: @@ -1874,8 +1997,7 @@ void DiscoveryServerManager::on_subscriber_discovery( if (!no_callbacks) { // is one of ours? - if ((it = servers.find(partid)) != servers.end() || - (it = clients.find(partid)) != clients.end() || + if ((it = servers.find(partid)) != servers.end() || (it = clients.find(partid)) != clients.end() || (it = simples.find(partid)) != simples.end()) { part_name = it->second->get_qos().name().to_string(); @@ -1915,9 +2037,15 @@ void DiscoveryServerManager::on_subscriber_discovery( break; } +<<<<<<< HEAD LOG_INFO("Participant " << participant->get_qos().name().to_string() << " reports a subscriber of participant " << part_name << " is " << info.status << " with typename: " << info.info.typeName() << " topic: " << info.info.topicName() << " GUID: " << subsid); +======= + LOG_INFO("Participant " << participant->get_qos().name().to_string() << " reports a subscriber of participant " << + part_name << " is " << reason << " with typename: " << info.type_name << " topic: " << info.topic_name << + " GUID: " << subsid); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) } void DiscoveryServerManager::on_publisher_discovery( @@ -1952,8 +2080,7 @@ void DiscoveryServerManager::on_publisher_discovery( // is one of ours? participant_map::iterator it; - if ((it = servers.find(partid)) != servers.end() || - (it = clients.find(partid)) != clients.end() || + if ((it = servers.find(partid)) != servers.end() || (it = clients.find(partid)) != clients.end() || (it = simples.find(partid)) != simples.end()) { part_name = it->second->get_qos().name().to_string(); @@ -1984,12 +2111,17 @@ void DiscoveryServerManager::on_publisher_discovery( { case DS::DISCOVERED_WRITER: +<<<<<<< HEAD state.AddDataWriter(srcGuid, partid, pubsid, info.info.typeName().to_string(), info.info.topicName().to_string(), callback_time); +======= + state.AddDataWriter(srcGuid, srcName, partid, pubsid, info.type_name.to_string(), + info.topic_name.to_string(), callback_time); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) break; case DS::REMOVED_WRITER: @@ -1999,9 +2131,15 @@ void DiscoveryServerManager::on_publisher_discovery( break; } +<<<<<<< HEAD LOG_INFO("Participant " << participant->get_qos().name().to_string() << " reports a publisher of participant " << part_name << " is " << info.status << " with typename: " << info.info.typeName() << " topic: " << info.info.topicName() << " GUID: " << pubsid); +======= + LOG_INFO("Participant " << participant->get_qos().name().to_string() << " reports a publisher of participant " << + part_name << " is " << reason << " with typename: " << info.type_name << " topic: " << info.topic_name << + " GUID: " << pubsid); +>>>>>>> cb2addc (Fix warning on ubuntu noble (#133)) } void DiscoveryServerManager::on_liveliness_changed( @@ -2108,15 +2246,15 @@ Snapshot& DiscoveryServerManager::takeSnapshot( temp.insert(clients.begin(), clients.end()); temp.insert(simples.begin(), simples.end()); - std::function pred( - [](const participant_map::value_type& p1, const Snapshot::value_type& p2) - { - return p1.first == p2.endpoint_guid; - } - ); + std::function pred([](const participant_map::value_type& p1, const Snapshot::value_type& p2) + { + return p1.first == p2.endpoint_guid; + } + ); - std::pair res = - std::mismatch(temp.cbegin(), temp.cend(), shot.cbegin(), shot.cend(), pred); + std::pair res = std::mismatch(temp.cbegin(), temp.cend(), + shot.cbegin(), shot.cend(), pred); while (res.first != temp.end()) {