diff --git a/src/cpp/fastdds/domain/DomainParticipantFactory.cpp b/src/cpp/fastdds/domain/DomainParticipantFactory.cpp index a1000e7db93..e58a51d73bb 100644 --- a/src/cpp/fastdds/domain/DomainParticipantFactory.cpp +++ b/src/cpp/fastdds/domain/DomainParticipantFactory.cpp @@ -363,7 +363,7 @@ ReturnCode_t DomainParticipantFactory::get_participant_qos_from_xml( { if (profile_name.empty()) { - EPROSIMA_LOG_ERROR(DOMAIN, "Provided profile name must be non-empty"); + EPROSIMA_LOG_ERROR(DDS_DOMAIN, "Provided profile name must be non-empty"); return RETCODE_BAD_PARAMETER; } @@ -430,7 +430,7 @@ ReturnCode_t DomainParticipantFactory::get_participant_extended_qos_from_xml( { if (profile_name.empty()) { - EPROSIMA_LOG_ERROR(DOMAIN, "Provided profile name must be non-empty"); + EPROSIMA_LOG_ERROR(DDS_DOMAIN, "Provided profile name must be non-empty"); return RETCODE_BAD_PARAMETER; } @@ -511,7 +511,7 @@ ReturnCode_t DomainParticipantFactory::load_XML_profiles_file( { if (XMLP_ret::XML_ERROR == XMLProfileManager::loadXMLFile(xml_profile_file)) { - EPROSIMA_LOG_ERROR(DOMAIN, "Problem loading XML file '" << xml_profile_file << "'"); + EPROSIMA_LOG_ERROR(DDS_DOMAIN, "Problem loading XML file '" << xml_profile_file << "'"); return RETCODE_ERROR; } return RETCODE_OK; @@ -523,7 +523,7 @@ ReturnCode_t DomainParticipantFactory::load_XML_profiles_string( { if (XMLP_ret::XML_ERROR == XMLProfileManager::loadXMLString(data, length)) { - EPROSIMA_LOG_ERROR(DOMAIN, "Problem loading XML string"); + EPROSIMA_LOG_ERROR(DDS_DOMAIN, "Problem loading XML string"); return RETCODE_ERROR; } return RETCODE_OK; @@ -535,7 +535,7 @@ ReturnCode_t DomainParticipantFactory::check_xml_static_discovery( xmlparser::XMLEndpointParser parser; if (XMLP_ret::XML_OK != parser.loadXMLFile(xml_file)) { - EPROSIMA_LOG_ERROR(DOMAIN, "Error parsing xml file"); + EPROSIMA_LOG_ERROR(DDS_DOMAIN, "Error parsing xml file"); return RETCODE_ERROR; } return RETCODE_OK; diff --git a/src/cpp/rtps/RTPSDomain.cpp b/src/cpp/rtps/RTPSDomain.cpp index 843dd0d01fd..1463c4c6334 100644 --- a/src/cpp/rtps/RTPSDomain.cpp +++ b/src/cpp/rtps/RTPSDomain.cpp @@ -509,7 +509,7 @@ RTPSParticipant* RTPSDomainImpl::clientServerEnvironmentCreationOverride( // Check the specified discovery protocol: if other than simple it has priority over ros environment variable if (att.builtin.discovery_config.discoveryProtocol != DiscoveryProtocol::SIMPLE) { - EPROSIMA_LOG_INFO(DOMAIN, "Detected non simple discovery protocol attributes." + EPROSIMA_LOG_INFO(RTPS_DOMAIN, "Detected non simple discovery protocol attributes." << " Ignoring auto default client-server setup."); return nullptr; } @@ -522,9 +522,66 @@ RTPSParticipant* RTPSDomainImpl::clientServerEnvironmentCreationOverride( LocatorList_t& server_list = client_att.builtin.discovery_config.m_DiscoveryServers; if (load_environment_server_info(server_list) && server_list.empty()) { +<<<<<<< HEAD // It's not an error, the environment variable may not be set. Any issue with environment // variable syntax is EPROSIMA_LOG_ERROR already return nullptr; +======= + // Retrieve the info from the environment variable + LocatorList_t& server_list = client_att.builtin.discovery_config.m_DiscoveryServers; + if (load_environment_server_info(server_list) && server_list.empty()) + { + // It's not an error, the environment variable may not be set. Any issue with environment + // variable syntax is EPROSIMA_LOG_ERROR already + return nullptr; + } + + // Check if some address requires the UDPv6, TCPv4 or TCPv6 transport + if (server_list.has_kind() && + !has_user_transport(client_att)) + { + // Extend builtin transports with the UDPv6 transport + auto descriptor = std::make_shared(); + descriptor->sendBufferSize = client_att.sendSocketBufferSize; + descriptor->receiveBufferSize = client_att.listenSocketBufferSize; + client_att.userTransports.push_back(std::move(descriptor)); + } + if (server_list.has_kind() && + !has_user_transport(client_att)) + { + // Extend builtin transports with the TCPv4 transport + auto descriptor = std::make_shared(); + // Add automatic port + descriptor->add_listener_port(0); + descriptor->sendBufferSize = client_att.sendSocketBufferSize; + descriptor->receiveBufferSize = client_att.listenSocketBufferSize; + client_att.userTransports.push_back(std::move(descriptor)); + } + if (server_list.has_kind() && + !has_user_transport(client_att)) + { + // Extend builtin transports with the TCPv6 transport + auto descriptor = std::make_shared(); + // Add automatic port + descriptor->add_listener_port(0); + descriptor->sendBufferSize = client_att.sendSocketBufferSize; + descriptor->receiveBufferSize = client_att.listenSocketBufferSize; + client_att.userTransports.push_back(std::move(descriptor)); + } + + EPROSIMA_LOG_INFO(RTPS_DOMAIN, "Detected auto client-server environment variable." + << "Trying to create client with the default server setup: " + << client_att.builtin.discovery_config.m_DiscoveryServers); + + client_att.builtin.discovery_config.discoveryProtocol = DiscoveryProtocol::CLIENT; + // RemoteServerAttributes already fill in above + + // Check if the client must become a super client + if (ros_super_client_env()) + { + client_att.builtin.discovery_config.discoveryProtocol = DiscoveryProtocol::SUPER_CLIENT; + } +>>>>>>> a59d32fc (Fix log category name macro collision in `MacOS` (#5585)) } // Check if some address requires the UDPv6, TCPv4 or TCPv6 transport @@ -577,13 +634,13 @@ RTPSParticipant* RTPSDomainImpl::clientServerEnvironmentCreationOverride( if (nullptr != part) { // Client successfully created - EPROSIMA_LOG_INFO(DOMAIN, "Auto default server-client setup. Default client created."); + EPROSIMA_LOG_INFO(RTPS_DOMAIN, "Auto default server-client setup. Default client created."); part->mp_impl->client_override(true); return part; } // Unable to create auto server-client default participants - EPROSIMA_LOG_ERROR(DOMAIN, "Auto default server-client setup. Unable to create the client."); + EPROSIMA_LOG_ERROR(RTPS_DOMAIN, "Auto default server-client setup. Unable to create the client."); return nullptr; } diff --git a/test/blackbox/common/DDSBlackboxTestsBasic.cpp b/test/blackbox/common/DDSBlackboxTestsBasic.cpp index 540281d62d5..24c9b8722ff 100644 --- a/test/blackbox/common/DDSBlackboxTestsBasic.cpp +++ b/test/blackbox/common/DDSBlackboxTestsBasic.cpp @@ -1052,6 +1052,46 @@ TEST(DDSBasic, reliable_volatile_writer_secure_builtin_no_potential_deadlock) writer.destroy(); } +TEST(DDSBasic, participant_factory_output_log_error_no_macro_collision) +{ + using Log = eprosima::fastdds::dds::Log; + using LogConsumer = eprosima::fastdds::dds::LogConsumer; + + // A LogConsumer that just counts the number of entries consumed + struct TestConsumer : public LogConsumer + { + TestConsumer( + std::atomic_size_t& n_logs_ref) + : n_logs_(n_logs_ref) + { + } + + void Consume( + const Log::Entry&) override + { + ++n_logs_; + } + + private: + + std::atomic_size_t& n_logs_; + }; + + // Counter for log entries + std::atomicn_logs{}; + + // Prepare Log module to check that no SECURITY errors are produced + Log::SetCategoryFilter(std::regex("DOMAIN")); + Log::SetVerbosity(Log::Kind::Error); + Log::RegisterConsumer(std::unique_ptr(new TestConsumer(n_logs))); + + auto dpf = DomainParticipantFactory::get_shared_instance(); + DomainParticipantQos qos; + dpf->get_participant_qos_from_xml("", qos, ""); + Log::Flush(); + ASSERT_GE(n_logs.load(), 1u); +} + } // namespace dds } // namespace fastdds } // namespace eprosima