.. _program_listing_file__tmp_ws_src_fastrtps_include_fastdds_rtps_attributes_ServerAttributes.h: Program Listing for File ServerAttributes.h =========================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/fastrtps/include/fastdds/rtps/attributes/ServerAttributes.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright 2019 Proyectos y Sistemas de Mantenimiento SL (eProsima). // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef _FASTDDS_SERVERATTRIBUTES_H_ #define _FASTDDS_SERVERATTRIBUTES_H_ #ifndef DOXYGEN_SHOULD_SKIP_THIS_PUBLIC #include #include #include #include #include namespace eprosima { namespace fastrtps { namespace rtps { class ParticipantProxyData; } // fastrtps } // rtps namespace fastdds { namespace rtps { class RemoteServerAttributes { public: RTPS_DllAPI inline bool operator ==( const RemoteServerAttributes& r) const { return guidPrefix == r.guidPrefix && metatrafficUnicastLocatorList == r.metatrafficUnicastLocatorList && metatrafficMulticastLocatorList == r.metatrafficMulticastLocatorList; // && proxy == r.proxy; } RTPS_DllAPI void clear() { guidPrefix = fastrtps::rtps::GuidPrefix_t::unknown(); metatrafficUnicastLocatorList.clear(); metatrafficMulticastLocatorList.clear(); proxy = nullptr; } RTPS_DllAPI fastrtps::rtps::GUID_t GetParticipant() const; RTPS_DllAPI fastrtps::rtps::GUID_t GetPDPReader() const; RTPS_DllAPI fastrtps::rtps::GUID_t GetPDPWriter() const; #ifndef DOXYGEN_SHOULD_SKIP_THIS FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastrtps::rtps:GetEDPPublicationsReader()", "Not implemented nor used functions.") RTPS_DllAPI fastrtps::rtps::GUID_t GetEDPPublicationsReader() const; FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastrtps::rtps:GetEDPSubscriptionsWriter()", "Not implemented nor used functions.") RTPS_DllAPI fastrtps::rtps::GUID_t GetEDPSubscriptionsWriter() const; FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastrtps::rtps:GetEDPPublicationsWriter()", "Not implemented nor used functions.") RTPS_DllAPI fastrtps::rtps::GUID_t GetEDPPublicationsWriter() const; FASTDDS_DEPRECATED_UNTIL(3, "eprosima::fastrtps::rtps:GetEDPSubscriptionsReader()", "Not implemented nor used functions.") RTPS_DllAPI fastrtps::rtps::GUID_t GetEDPSubscriptionsReader() const; #endif // ifndef DOXYGEN_SHOULD_SKIP_THIS RTPS_DllAPI inline bool ReadguidPrefix( const char* pfx) { return bool(std::istringstream(pfx) >> guidPrefix); } LocatorList metatrafficUnicastLocatorList; LocatorList metatrafficMulticastLocatorList; fastrtps::rtps::GuidPrefix_t guidPrefix; // Live participant proxy reference const fastrtps::rtps::ParticipantProxyData* proxy{}; // Check if there are specific transport locators associated // the template parameter is the locator kind (e.g. LOCATOR_KIND_UDPv4) template bool requires_transport() const { return metatrafficUnicastLocatorList.has_kind() || metatrafficMulticastLocatorList.has_kind(); } }; typedef std::list RemoteServerList_t; template struct server_ostream_separators { RTPS_DllAPI static const charT* list_separator; RTPS_DllAPI static const charT* locator_separator; }; #ifndef _MSC_VER template<> const char* server_ostream_separators::list_separator; template<> const wchar_t* server_ostream_separators::list_separator; template<> const char* server_ostream_separators::locator_separator; template<> const wchar_t* server_ostream_separators::locator_separator; #endif // _MSC_VER template std::basic_ostream& operator <<( std::basic_ostream& output, const RemoteServerAttributes& sa) { typename std::basic_ostream::sentry s(output); output << sa.guidPrefix; if (!sa.metatrafficUnicastLocatorList.empty()) { output << server_ostream_separators::locator_separator << sa.metatrafficUnicastLocatorList; } if (!sa.metatrafficMulticastLocatorList.empty()) { output << server_ostream_separators::locator_separator << sa.metatrafficMulticastLocatorList; } return output; } template std::basic_ostream& operator <<( std::basic_ostream& output, const RemoteServerList_t& list) { typename std::basic_ostream::sentry s(output); std::ostream_iterator os_iterator(output, server_ostream_separators::list_separator); std::copy(list.begin(), list.end(), os_iterator); return output; } // port use if the ros environment variable doesn't specified one constexpr uint16_t DEFAULT_ROS2_SERVER_PORT = 11811; // default server base guidPrefix const char* const DEFAULT_ROS2_SERVER_GUIDPREFIX = "44.53.00.5f.45.50.52.4f.53.49.4d.41"; /* Environment variable to specify a semicolon-separated list of UDPv4 locators (ip:port) that define remote server * locators. * The position in the list is used as a "server id" to extrapolate the server's GUID prefix. * For the variable to take any effect, the following pre-conditions must be met: * 1. The server's GUID prefix must be compliant with the schema * "44.53..5f.45.50.52.4f.53.49.4d.41", which is the schema followed by the prefixes generated * when creating server using fastdds cli, being DEFAULT_ROS2_SERVER_GUIDPREFIX the prefix for ID=0. * 1. The discovery protocol must be either SIMPLE or SERVER. * 1. In the case of SIMPLE, the participant is created as a CLIENT instead. * 1. In the case of SERVER, the participant is created as a SERVER, using the DEFAULT_ROS2_MASTER_URI list to * expand the list of remote servers. */ const char* const DEFAULT_ROS2_MASTER_URI = "ROS_DISCOVERY_SERVER"; RTPS_DllAPI bool load_environment_server_info( const std::string& list, RemoteServerList_t& attributes); RTPS_DllAPI bool load_environment_server_info( RemoteServerList_t& attributes); RTPS_DllAPI const std::string& ros_discovery_server_env(); RTPS_DllAPI bool get_server_client_default_guidPrefix( int id, fastrtps::rtps::GuidPrefix_t& guid); } // namespace rtps } // namespace fastdds // keep former namespace references available namespace fastrtps { namespace rtps { using fastdds::rtps::RemoteServerAttributes; using fastdds::rtps::RemoteServerList_t; using fastdds::rtps::DEFAULT_ROS2_SERVER_PORT; using fastdds::rtps::DEFAULT_ROS2_SERVER_GUIDPREFIX; using fastdds::rtps::DEFAULT_ROS2_MASTER_URI; using fastdds::rtps::load_environment_server_info; using fastdds::rtps::ros_discovery_server_env; using fastdds::rtps::get_server_client_default_guidPrefix; } // fastrtps } // rtps } // namespace eprosima #endif // DOXYGEN_SHOULD_SKIP_THIS_PUBLIC #endif /* _FASTDDS_SERVERATTRIBUTES_H_ */