123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- // Copyright 2016 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.
- /**
- * @file RTPSParticipantAttributes.h
- */
- #ifndef _FASTDDS_RTPSPARTICIPANTPARAMETERS_H_
- #define _FASTDDS_RTPSPARTICIPANTPARAMETERS_H_
- #include <fastdds/rtps/common/Time_t.h>
- #include <fastdds/rtps/common/Locator.h>
- #include <fastdds/rtps/common/PortParameters.h>
- #include <fastdds/rtps/attributes/PropertyPolicy.h>
- #include <fastdds/rtps/flowcontrol/ThroughputControllerDescriptor.h>
- #include <fastdds/rtps/transport/TransportInterface.h>
- #include <fastdds/rtps/resources/ResourceManagement.h>
- #include <fastrtps/utils/fixed_size_string.hpp>
- #include <fastdds/rtps/attributes/RTPSParticipantAllocationAttributes.hpp>
- #include <fastdds/rtps/attributes/ServerAttributes.h>
- #include <memory>
- #include <sstream>
- namespace eprosima {
- namespace fastrtps {
- namespace rtps {
- //!PDP subclass choice
- typedef enum DiscoveryProtocol
- {
- NONE,
- /*!<
- NO discovery whatsoever would be used.
- Publisher and Subscriber defined with the same topic name would NOT be linked.
- All matching must be done manually through the addReaderLocator, addReaderProxy, addWriterProxy methods.
- */
- SIMPLE,
- /*!<
- Discovery works according to 'The Real-time Publish-Subscribe Protocol(RTPS) DDS
- Interoperability Wire Protocol Specification'
- */
- EXTERNAL,
- /*!<
- A user defined PDP subclass object must be provided in the attributes that deals with the discovery.
- Framework is not responsible of this object lifetime.
- */
- CLIENT, /*!< The participant will behave as a client concerning discovery operation.
- Server locators should be specified as attributes. */
- SERVER, /*!< The participant will behave as a server concerning discovery operation.
- Discovery operation is volatile (discovery handshake must take place if shutdown). */
- BACKUP /*!< The participant will behave as a server concerning discovery operation.
- Discovery operation persist on a file (discovery handshake wouldn't repeat if shutdown). */
- } DiscoveryProtocol_t;
- //!Filtering flags when discovering participants
- typedef enum ParticipantFilteringFlags : uint32_t
- {
- NO_FILTER = 0,
- FILTER_DIFFERENT_HOST = 0x1,
- FILTER_DIFFERENT_PROCESS = 0x2,
- FILTER_SAME_PROCESS = 0x4
- } ParticipantFilteringFlags_t;
- #define BUILTIN_DATA_MAX_SIZE 512
- //! PDP factory for EXTERNAL type
- class PDP;
- class BuiltinProtocols;
- typedef struct _PDPFactory
- {
- // Pointer to the PDP creator
- PDP* (*CreatePDPInstance)(BuiltinProtocols*);
- // Pointer to the PDP destructor
- void (* ReleasePDPInstance)(
- PDP*);
- bool operator ==(
- const struct _PDPFactory& e) const
- {
- return (CreatePDPInstance == e.CreatePDPInstance)
- && (ReleasePDPInstance == e.ReleasePDPInstance);
- }
- } PDPFactory;
- /**
- * Class SimpleEDPAttributes, to define the attributes of the Simple Endpoint Discovery Protocol.
- * @ingroup RTPS_ATTRIBUTES_MODULE
- */
- class SimpleEDPAttributes
- {
- public:
- //!Default value true.
- bool use_PublicationWriterANDSubscriptionReader;
- //!Default value true.
- bool use_PublicationReaderANDSubscriptionWriter;
- #if HAVE_SECURITY
- bool enable_builtin_secure_publications_writer_and_subscriptions_reader;
- bool enable_builtin_secure_subscriptions_writer_and_publications_reader;
- #endif
- SimpleEDPAttributes()
- : use_PublicationWriterANDSubscriptionReader(true)
- , use_PublicationReaderANDSubscriptionWriter(true)
- #if HAVE_SECURITY
- , enable_builtin_secure_publications_writer_and_subscriptions_reader(true)
- , enable_builtin_secure_subscriptions_writer_and_publications_reader(true)
- #endif
- {
- }
- bool operator ==(
- const SimpleEDPAttributes& b) const
- {
- return (this->use_PublicationWriterANDSubscriptionReader == b.use_PublicationWriterANDSubscriptionReader) &&
- #if HAVE_SECURITY
- (this->enable_builtin_secure_publications_writer_and_subscriptions_reader ==
- b.enable_builtin_secure_publications_writer_and_subscriptions_reader) &&
- (this->enable_builtin_secure_subscriptions_writer_and_publications_reader ==
- b.enable_builtin_secure_subscriptions_writer_and_publications_reader) &&
- #endif
- (this->use_PublicationReaderANDSubscriptionWriter == b.use_PublicationReaderANDSubscriptionWriter);
- }
- };
- /**
- * Struct InitialAnnouncementConfig defines the behavior of the RTPSParticipant initial announcements.
- * @ingroup RTPS_ATTRIBUTES_MODULE
- */
- struct InitialAnnouncementConfig
- {
- /// Number of initial announcements with specific period (default 5)
- uint32_t count = 5u;
- /// Specific period for initial announcements (default 100ms)
- Duration_t period = { 0, 100000000u };
- bool operator ==(
- const InitialAnnouncementConfig& b) const
- {
- return (count == b.count) && (period == b.period);
- }
- };
- /**
- * Class DiscoverySettings, to define the attributes of the several discovery protocols available
- * @ingroup RTPS_ATTRIBUTES_MODULE
- */
- class DiscoverySettings
- {
- public:
- //! Chosen discovery protocol
- DiscoveryProtocol_t discoveryProtocol = DiscoveryProtocol_t::SIMPLE;
- /**
- * If set to true, SimpleEDP would be used.
- */
- bool use_SIMPLE_EndpointDiscoveryProtocol = true;
- /**
- * If set to true, StaticEDP based on an XML file would be implemented.
- * The XML filename must be provided.
- */
- bool use_STATIC_EndpointDiscoveryProtocol = false;
- /**
- * Lease Duration of the RTPSParticipant,
- * indicating how much time remote RTPSParticipants should consider this RTPSParticipant alive.
- */
- Duration_t leaseDuration = { 20, 0 };
- /**
- * The period for the RTPSParticipant to send its Discovery Message to all other discovered RTPSParticipants
- * as well as to all Multicast ports.
- */
- Duration_t leaseDuration_announcementperiod = { 3, 0 };
- //!Initial announcements configuration
- InitialAnnouncementConfig initial_announcements;
- //!Attributes of the SimpleEDP protocol
- SimpleEDPAttributes m_simpleEDP;
- //! function that returns a PDP object (only if EXTERNAL selected)
- PDPFactory m_PDPfactory{};
- /**
- * The period for the RTPSParticipant to:
- * send its Discovery Message to its servers
- * check for EDP endpoints matching
- */
- Duration_t discoveryServer_client_syncperiod = { 0, 450 * 1000000}; // 450 milliseconds
- //! Discovery Server settings, only needed if use_CLIENT_DiscoveryProtocol=true
- RemoteServerList_t m_DiscoveryServers;
- //! Filtering participants out depending on location
- ParticipantFilteringFlags_t ignoreParticipantFlags = ParticipantFilteringFlags::NO_FILTER;
- DiscoverySettings() = default;
- bool operator ==(
- const DiscoverySettings& b) const
- {
- return (this->discoveryProtocol == b.discoveryProtocol) &&
- (this->use_SIMPLE_EndpointDiscoveryProtocol == b.use_SIMPLE_EndpointDiscoveryProtocol) &&
- (this->use_STATIC_EndpointDiscoveryProtocol == b.use_STATIC_EndpointDiscoveryProtocol) &&
- (this->discoveryServer_client_syncperiod == b.discoveryServer_client_syncperiod) &&
- (this->m_PDPfactory == b.m_PDPfactory) &&
- (this->leaseDuration == b.leaseDuration) &&
- (this->leaseDuration_announcementperiod == b.leaseDuration_announcementperiod) &&
- (this->initial_announcements == b.initial_announcements) &&
- (this->m_simpleEDP == b.m_simpleEDP) &&
- (this->m_staticEndpointXMLFilename == b.m_staticEndpointXMLFilename) &&
- (this->m_DiscoveryServers == b.m_DiscoveryServers) &&
- (this->ignoreParticipantFlags == b.ignoreParticipantFlags);
- }
- /**
- * Get the static endpoint XML filename
- * @return Static endpoint XML filename
- */
- const char* getStaticEndpointXMLFilename() const
- {
- return m_staticEndpointXMLFilename.c_str();
- }
- /**
- * Set the static endpoint XML filename
- * @param str Static endpoint XML filename
- */
- void setStaticEndpointXMLFilename(
- const char* str)
- {
- m_staticEndpointXMLFilename = std::string(str);
- }
- private:
- //! StaticEDP XML filename, only necessary if use_STATIC_EndpointDiscoveryProtocol=true
- std::string m_staticEndpointXMLFilename = "";
- };
- /**
- * TypeLookupService settings.
- */
- class TypeLookupSettings
- {
- public:
- //!Indicates to use the TypeLookup Service client endpoints
- bool use_client = false;
- //!Indicates to use the TypeLookup Service server endpoints
- bool use_server = false;
- };
- /**
- * Class BuiltinAttributes, to define the behavior of the RTPSParticipant builtin protocols.
- * @ingroup RTPS_ATTRIBUTES_MODULE
- */
- class BuiltinAttributes
- {
- public:
- //! Discovery protocol related attributes
- DiscoverySettings discovery_config;
- //!Indicates to use the WriterLiveliness protocol.
- bool use_WriterLivelinessProtocol = true;
- //!TypeLookup Service settings
- TypeLookupSettings typelookup_config;
- //!Metatraffic Unicast Locator List
- LocatorList_t metatrafficUnicastLocatorList;
- //!Metatraffic Multicast Locator List.
- LocatorList_t metatrafficMulticastLocatorList;
- //! Initial peers.
- LocatorList_t initialPeersList;
- //! Memory policy for builtin readers
- MemoryManagementPolicy_t readerHistoryMemoryPolicy =
- MemoryManagementPolicy_t::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
- //! Maximum payload size for builtin readers
- uint32_t readerPayloadSize = BUILTIN_DATA_MAX_SIZE;
- //! Memory policy for builtin writers
- MemoryManagementPolicy_t writerHistoryMemoryPolicy =
- MemoryManagementPolicy_t::PREALLOCATED_WITH_REALLOC_MEMORY_MODE;
- //! Maximum payload size for builtin writers
- uint32_t writerPayloadSize = BUILTIN_DATA_MAX_SIZE;
- //! Mutation tries if the port is being used.
- uint32_t mutation_tries = 100u;
- //!Set to true to avoid multicast traffic on builtin endpoints
- bool avoid_builtin_multicast = true;
- BuiltinAttributes() = default;
- virtual ~BuiltinAttributes() = default;
- bool operator ==(
- const BuiltinAttributes& b) const
- {
- return (this->discovery_config == b.discovery_config) &&
- (this->use_WriterLivelinessProtocol == b.use_WriterLivelinessProtocol) &&
- (typelookup_config.use_client == b.typelookup_config.use_client) &&
- (typelookup_config.use_server == b.typelookup_config.use_server) &&
- (this->metatrafficUnicastLocatorList == b.metatrafficUnicastLocatorList) &&
- (this->metatrafficMulticastLocatorList == b.metatrafficMulticastLocatorList) &&
- (this->initialPeersList == b.initialPeersList) &&
- (this->readerHistoryMemoryPolicy == b.readerHistoryMemoryPolicy) &&
- (this->readerPayloadSize == b.readerPayloadSize) &&
- (this->writerHistoryMemoryPolicy == b.writerHistoryMemoryPolicy) &&
- (this->writerPayloadSize == b.writerPayloadSize) &&
- (this->mutation_tries == b.mutation_tries) &&
- (this->avoid_builtin_multicast == b.avoid_builtin_multicast);
- }
- };
- /**
- * Class RTPSParticipantAttributes used to define different aspects of a RTPSParticipant.
- *@ingroup RTPS_ATTRIBUTES_MODULE
- */
- class RTPSParticipantAttributes
- {
- public:
- RTPSParticipantAttributes()
- {
- setName("RTPSParticipant");
- sendSocketBufferSize = 0;
- listenSocketBufferSize = 0;
- participantID = -1;
- useBuiltinTransports = true;
- }
- virtual ~RTPSParticipantAttributes()
- {
- }
- bool operator ==(
- const RTPSParticipantAttributes& b) const
- {
- return (this->name == b.name) &&
- (this->defaultUnicastLocatorList == b.defaultUnicastLocatorList) &&
- (this->defaultMulticastLocatorList == b.defaultMulticastLocatorList) &&
- (this->sendSocketBufferSize == b.sendSocketBufferSize) &&
- (this->listenSocketBufferSize == b.listenSocketBufferSize) &&
- (this->builtin == b.builtin) &&
- (this->port == b.port) &&
- (this->userData == b.userData) &&
- (this->participantID == b.participantID) &&
- (this->throughputController == b.throughputController) &&
- (this->useBuiltinTransports == b.useBuiltinTransports) &&
- (this->properties == b.properties &&
- (this->prefix == b.prefix));
- }
- /**
- * Default list of Unicast Locators to be used for any Endpoint defined inside this RTPSParticipant in the case
- * that it was defined with NO UnicastLocators. At least ONE locator should be included in this list.
- */
- LocatorList_t defaultUnicastLocatorList;
- /**
- * Default list of Multicast Locators to be used for any Endpoint defined inside this RTPSParticipant in the
- * case that it was defined with NO UnicastLocators. This is usually left empty.
- */
- LocatorList_t defaultMulticastLocatorList;
- /*!
- * @brief Send socket buffer size for the send resource. Zero value indicates to use default system buffer size.
- * Default value: 0.
- */
- uint32_t sendSocketBufferSize;
- /*! Listen socket buffer for all listen resources. Zero value indicates to use default system buffer size.
- * Default value: 0.
- */
- uint32_t listenSocketBufferSize;
- //! Optionally allows user to define the GuidPrefix_t
- GuidPrefix_t prefix;
- RTPS_DllAPI inline bool ReadguidPrefix(
- const char* pfx)
- {
- return bool(std::istringstream(pfx) >> prefix);
- }
- //! Builtin parameters.
- BuiltinAttributes builtin;
- //!Port Parameters
- PortParameters port;
- //!User Data of the participant
- std::vector<octet> userData;
- //!Participant ID
- int32_t participantID;
- //!Throughput controller parameters. Leave default for uncontrolled flow.
- ThroughputControllerDescriptor throughputController;
- //!User defined transports to use alongside or in place of builtins.
- std::vector<std::shared_ptr<fastdds::rtps::TransportDescriptorInterface> > userTransports;
- //!Set as false to disable the default UDPv4 implementation.
- bool useBuiltinTransports;
- //!Holds allocation limits affecting collections managed by a participant.
- RTPSParticipantAllocationAttributes allocation;
- //! Property policies
- PropertyPolicy properties;
- //!Set the name of the participant.
- inline void setName(
- const char* nam)
- {
- name = nam;
- }
- //!Get the name of the participant.
- inline const char* getName() const
- {
- return name.c_str();
- }
- private:
- //!Name of the participant.
- string_255 name;
- };
- } /* namespace rtps */
- } /* namespace fastrtps */
- } /* namespace eprosima */
- #endif /* _FASTDDS_RTPSPARTICIPANTPARAMETERS_H_ */
|