6 #ifndef OPENDDS_DCPS_STATICDISCOVERY_H 7 #define OPENDDS_DCPS_STATICDISCOVERY_H 21 #ifndef ACE_LACKS_PRAGMA_ONCE 72 , trans_cfg(transport_cfg)
95 , trans_cfg(transport_cfg)
115 return std::memcmp(&lhs[6], &rhs[6], 6) == 0;
121 static EntityId_t build_id(
const unsigned char* entity_key ,
122 const unsigned char entity_kind);
125 const unsigned char* participant_id ,
139 , transport_context_(0)
147 , transport_context_(0)
178 , transport_context_(0)
186 , transport_context_(0)
216 , transport_context_(0)
272 ACE_UNUSED_ARG(reader);
280 ACE_UNUSED_ARG(reader);
302 virtual void assign_publication_key(
GUID_t& rid,
305 virtual void assign_subscription_key(
GUID_t& rid,
309 virtual bool update_topic_qos(
const GUID_t& ,
312 virtual bool update_publication_qos(
const GUID_t& ,
316 virtual bool update_subscription_qos(
const GUID_t& ,
320 virtual bool update_subscription_params(
const GUID_t& ,
323 virtual bool disassociate();
337 virtual bool is_expectant_opendds(
const GUID_t& endpoint)
const;
339 virtual bool shutting_down()
const;
342 DiscoveredSubscriptionIter& ,
346 DiscoveredPublicationIter& ,
349 virtual void reader_exists(
const GUID_t& readerid,
const GUID_t& writerid);
350 virtual void reader_does_not_exist(
const GUID_t& readerid,
const GUID_t& writerid);
351 virtual void writer_exists(
const GUID_t& writerid,
const GUID_t& readerid);
352 virtual void writer_does_not_exist(
const GUID_t& writerid,
const GUID_t& readerid);
353 void cleanup_type_lookup_data(
const GuidPrefix_t& prefix,
357 #ifndef DDS_HAS_MINIMUM_BIT 363 void type_lookup_fini();
366 void purge_dead_topic(
const String& topic_name);
368 void ignore(
const GUID_t& to_ignore);
369 bool ignoring(
const GUID_t& guid)
const;
370 bool ignoring(
const char* topic_name)
const;
377 DDS::TopicQos_out qos,
388 void remove_publication(
const GUID_t& publicationId);
389 void update_publication_locators(
const GUID_t& publicationId,
397 const char* filterClassName,
398 const char* filterExpr,
401 void remove_subscription(
const GUID_t& subscriptionId);
402 void update_subscription_locators(
const GUID_t& subscriptionId,
406 bool remove =
false);
408 void remove_assoc(
const GUID_t& remove_from,
const GUID_t& removing);
423 bool& need_complete)
const;
425 void match_continue(
const GUID_t& writer,
const GUID_t& reader);
429 remove_from_bit_i(pub);
434 remove_from_bit_i(sub);
439 bool has_dcps_key(
const GUID_t& topicId)
const;
454 #ifndef DDS_HAS_MINIMUM_BIT 488 void init_bit(
const DDS::Subscriber_var& bit_subscriber)
490 bit_subscriber_ = bit_subscriber;
491 endpoint_manager_->init_bit();
518 const GUID_t& participantId,
519 const char* topicName,
520 const char* dataTypeName,
527 const GUID_t& participantId,
528 const char* topicName,
530 DDS::TopicQos_out qos,
535 const GUID_t& participantId,
546 const GUID_t& participantId,
555 const GUID_t& publicationId);
560 bool update_publication_qos(
567 void update_publication_locators(
575 const GUID_t& participantId,
581 const char* filterClassName,
582 const char* filterExpr,
587 const GUID_t& subscriptionId);
592 bool update_subscription_qos(
599 bool update_subscription_params(
605 void update_subscription_locators(
614 endpoint_manager().ignore(ignoreId);
617 if (iter != participants_.end()) {
618 remove_discovered_participant(iter);
631 return announce_domain_participant_qos();
635 GUID_t& topicId,
const char* topicName,
639 if (std::strlen(topicName) > 256 || std::strlen(dataTypeName) > 256) {
642 ACE_TEXT(
"topic or type name length limit (256) exceeded\n")));
647 return endpoint_manager().assert_topic(topicId, topicName, dataTypeName, qos, hasDcpsKey, topic_callbacks);
651 const char* topicName,
653 DDS::TopicQos_out qos,
656 return endpoint_manager().find_topic(topicName, dataTypeName, qos, topicId);
661 return endpoint_manager().remove_topic(topicId);
667 endpoint_manager().ignore(ignoreId);
672 return endpoint_manager().update_topic_qos(topicId, qos);
683 return endpoint_manager().add_publication(topicId, publication, qos,
684 transInfo, publisherQos, type_info);
689 endpoint_manager().remove_publication(publicationId);
695 return endpoint_manager().ignore(ignoreId);
699 const GUID_t& publicationId,
703 return endpoint_manager().update_publication_qos(publicationId, qos, publisherQos);
709 endpoint_manager().update_publication_locators(publicationId, transInfo);
718 const char* filterClassName,
719 const char* filterExpr,
723 return endpoint_manager().add_subscription(topicId, subscription, qos, transInfo,
724 subscriberQos, filterClassName, filterExpr, params, type_info);
729 endpoint_manager().remove_subscription(subscriptionId);
735 return endpoint_manager().ignore(ignoreId);
739 const GUID_t& subscriptionId,
743 return endpoint_manager().update_subscription_qos(subscriptionId, qos, subscriberQos);
748 return endpoint_manager().update_subscription_params(subId, params);
753 endpoint_manager().update_subscription_locators(subId, transInfo);
758 return bit_subscriber_;
763 endpoint_manager().type_lookup_service(type_lookup_service);
772 , seq_reset_count_(0)
784 : mask_(mask), from_(from), timestamp_(timestamp) {}
802 typedef DiscoveredParticipantMap::const_iterator
805 void remove_discovered_participant(DiscoveredParticipantIter& iter);
809 #ifndef DDS_HAS_MINIMUM_BIT 812 DDS::Subscriber_var bit_sub(bit_subscriber());
816 DDS::DataReader_var d =
823 DDS::Subscriber_var bit_sub(bit_subscriber());
827 DDS::DataReader_var d =
834 DDS::Subscriber_var bit_sub(bit_subscriber());
838 DDS::DataReader_var d =
845 DDS::Subscriber_var bit_sub(bit_subscriber());
849 DDS::DataReader_var d =
871 virtual GUID_t generate_participant_guid();
877 #if defined(OPENDDS_SECURITY) 890 static StaticDiscovery_rch
instance() {
return instance_; }
909 const GUID_t& participantId,
910 const char* topicName,
911 const char* dataTypeName,
918 const GUID_t& participantId,
919 const char* topicName,
921 DDS::TopicQos_out qos,
926 const GUID_t& participantId,
937 const GUID_t& participantId,
946 const GUID_t& publicationId);
951 bool update_publication_qos(
958 void update_publication_locators(
966 const GUID_t& participantId,
972 const char* filterClassName,
973 const char* filterExpr,
978 const GUID_t& subscriptionId);
983 bool update_subscription_qos(
990 bool update_subscription_params(
996 void update_subscription_locators(
1009 void create_bit_dr(DDS::TopicDescription_ptr topic,
const char* type,
ACE_CDR::ULong transport_context_
Implements the OpenDDS::DCPS::DomainParticipant interfaces.
DDS::InstanceHandle_t bit_ih_
InternalThreadBuiltinTopicDataDataReaderImpl * internal_thread_bit()
DiscoveredPublicationMap::iterator DiscoveredPublicationIter
LocationUpdateList location_updates_
#define ACE_GUARD(MUTEX, OBJ, LOCK)
XTypes::TypeIdentifier type_id
DDS::InstanceHandle_t bit_ih_
const InstanceHandle_t HANDLE_NIL
DiscoveredSubscriptionMap::iterator DiscoveredSubscriptionIter
void update_publication_locators(const GUID_t &publicationId, const TransportLocatorSeq &transInfo)
ContentFilterProperty_t filterProperties
static DDS::BuiltinTopicKey_t get_key(const DiscoveredPublication &pub)
bool update_domain_participant_qos(const DDS::DomainParticipantQos &qos)
LocalSubscriptionMap::iterator LocalSubscriptionIter
unsigned int topic_counter_
RepoIdSet matched_endpoints_
const char *const BUILT_IN_CONNECTION_RECORD_TOPIC
LocalSubscriptionMap local_subscriptions_
void ignore_publication(const GUID_t &ignoreId)
const GUID_t GUID_UNKNOWN
Nil value for GUID.
TopicStatus assert_topic(GUID_t &topicId, const char *topicName, const char *dataTypeName, const DDS::TopicQos &qos, bool hasDcpsKey, TopicCallbacks *topic_callbacks)
XTypes::TypeInformation type_info_
#define OpenDDS_Dcps_Export
static StaticDiscovery_rch instance_
MonotonicTimePoint time_started
TransportLocatorSeq trans_info_
TimeDuration max_type_lookup_service_reply_period_
RepoIdSet matched_endpoints_
ParticipantLocationBuiltinTopicData location_data_
DiscoveredReaderData reader_data_
ParticipantBuiltinTopicDataDataReaderImpl * part_bit()
ConnectionRecordDataReaderImpl * connection_record_bit()
virtual void remove_assoc_i(const GUID_t &, const LocalPublication &, const GUID_t &)
reference_wrapper< T > ref(T &r)
sequence< TransportLocator > TransportLocatorSeq
Reader(const OPENDDS_STRING &tn, const DDS::DataReaderQos &q, const DDS::SubscriberQos &sq, const OPENDDS_STRING &transport_cfg, const TransportLocatorSeq &ti)
LocalPublicationMap local_publications_
RcHandle< StaticParticipant > ParticipantHandle
ACE_Guard< ACE_Thread_Mutex > lock_
DDS::PublicationBuiltinTopicData ddsPublicationData
LocalPublicationMap::iterator LocalPublicationIter
LocalPublicationMap::const_iterator LocalPublicationCIter
RepoIdSetType best_effort_readers
virtual void remove_assoc_i(const GUID_t &, const LocalSubscription &, const GUID_t &)
GUID_t add_publication(const GUID_t &topicId, DataWriterCallbacks_rch publication, const DDS::DataWriterQos &qos, const TransportLocatorSeq &transInfo, const DDS::PublisherQos &publisherQos, const XTypes::TypeInformation &type_info)
DDS::SubscriptionBuiltinTopicData ddsSubscriptionData
void remove_publication(const GUID_t &publicationId)
DiscoveredSubscriptionMap discovered_subscriptions_
void remove_subscription(const GUID_t &subscriptionId)
Writer(const OPENDDS_STRING &tn, const DDS::DataWriterQos &q, const DDS::PublisherQos &pq, const OPENDDS_STRING &transport_cfg, const TransportLocatorSeq &ti)
DDS::Subscriber_var bit_subscriber_
virtual bool send_type_lookup_request(const XTypes::TypeIdentifierSeq &, const GUID_t &, bool, bool)
virtual void remove_discovered_participant_i(DiscoveredParticipantIter &)
virtual void remove_from_bit_i(const DiscoveredPublication &)
DOMAINID_TYPE_NATIVE DomainId_t
DataWriterQosMapType datawriterqos_map
TopicStatus find_topic(const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, GUID_t &topicId)
DDS::PublisherQos publisher_qos
void type_lookup_service(const XTypes::TypeLookupService_rch type_lookup_service)
DiscoveredParticipantMap::iterator DiscoveredParticipantIter
Implements the OpenDDS::DCPS::DataWriterRemote interfaces and DDS::DataWriter interfaces.
SequenceNumber seq_number
DDS::InstanceHandle_t location_ih_
virtual void add_assoc_i(const GUID_t &, const LocalSubscription &, const GUID_t &, const DiscoveredPublication &)
OrigSeqNumberMap orig_seq_numbers_
SequenceNumber type_lookup_service_sequence_number_
TopicStatus remove_topic(const GUID_t &topicId)
OPENDDS_STRING topic_name
TopicNameMap topic_names_
XTypes::TypeInformation type_info_
unsigned long ParticipantLocation
DomainParticipantMap participants_
MonotonicTime_t participant_discovered_at_
RcHandle< StaticEndpointManagerSporadic > type_lookup_reply_deadline_processor_
long ParticipantCryptoHandle
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
void update_subscription_locators(const GUID_t &subId, const TransportLocatorSeq &transInfo)
DDS::SubscriberQos subscriber_qos
DataReaderQosMapType datareaderqos_map
const char * get_topic_name() const
Implements the DDS::DataReader interface.
bool update_subscription_params(const GUID_t &subId, const DDS::StringSeq ¶ms)
typedef OPENDDS_MAP_CMP(GUID_t, WriterCoherentSample, GUID_tKeyLessThan) GroupCoherentSamples
virtual void remove_from_bit_i(const DiscoveredSubscription &)
MonotonicTime_t participant_discovered_at_
RepoIdSet matched_endpoints_
MonotonicTime_t participant_discovered_at_
SystemTimePoint timestamp_
SubscriberQosMapType subscriberqos_map
TransportLocatorSeq trans_info
ACE_INLINE OpenDDS_Dcps_Export const MonotonicTime_t & monotonic_time_zero()
typedef OPENDDS_SET_CMP(GUID_t, GUID_tKeyLessThan) GuidSet
ParticipantLocation mask_
ParticipantLocationBuiltinTopicDataDataReaderImpl * part_loc_bit()
StaticEndpointManager & endpoint_manager()
MonotonicTimePoint lease_expiration_
XTypes::TypeLookupService_rch type_lookup_service_
void ignore_domain_participant(const GUID_t &ignoreId)
const char *const BUILT_IN_PARTICIPANT_TOPIC
void init_bit(const DDS::Subscriber_var &bit_subscriber)
XTypes::TypeInformation type_info_
void ignore_subscription(const GUID_t &ignoreId)
const char *const BUILT_IN_PARTICIPANT_LOCATION_TOPIC
bool update_topic_qos(const GUID_t &topicId, const DDS::TopicQos &qos)
RcHandle< StaticEndpointManager > endpoint_manager_
EndpointRegistry registry
static DDS::BuiltinTopicKey_t get_key(const DiscoveredSubscription &sub)
GUID_t add_subscription(const GUID_t &topicId, DataReaderCallbacks_rch subscription, const DDS::DataReaderQos &qos, const TransportLocatorSeq &transInfo, const DDS::SubscriberQos &subscriberQos, const char *filterClassName, const char *filterExpr, const DDS::StringSeq ¶ms, const XTypes::TypeInformation &type_info)
virtual void add_assoc_i(const GUID_t &, const LocalPublication &, const GUID_t &, const DiscoveredSubscription &)
HANDLE_TYPE_NATIVE InstanceHandle_t
const char * get_topic_name() const
void ignore_topic(const GUID_t &ignoreId)
ACE_INET_Addr local_address_
const char * get_type_name() const
DDS::PublisherQos publisher_qos_
DataWriterCallbacks_wrch publication_
virtual DDS::ReturnCode_t write_publication_data(const GUID_t &, LocalPublication &, const GUID_t &reader=GUID_UNKNOWN)
void remove_from_bit(const DiscoveredPublication &pub)
DiscoveredSubscription(const DiscoveredReaderData &r)
bool update_publication_qos(const GUID_t &publicationId, const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos)
const char *const BUILT_IN_INTERNAL_THREAD_TOPIC
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
ACE_CDR::ULong transport_context_
DDS::Subscriber_var bit_subscriber() const
DiscoveredWriterData writer_data_
ACE_UINT16 seq_reset_count_
const SequenceNumber_t SEQUENCENUMBER_UNKNOWN
Sequence number abstraction. Only allows positive 64 bit values.
RepoIdSetType reliable_readers
StaticParticipant(GUID_t &guid, const DDS::DomainParticipantQos &qos, const EndpointRegistry ®istry)
RepoIdSet remote_expectant_opendds_associations_
PmfSporadicTask< StaticEndpointManager > StaticEndpointManagerSporadic
RepoIdSetType best_effort_writers
const char * get_type_name() const
DataReaderCallbacks_wrch subscription_
DiscoveredParticipantMap participants_
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
Discovery Strategy interface class.
DiscoveredPublication(const DiscoveredWriterData &w)
StaticParticipant & participant_
MonotonicTimePoint discovered_at_
RcHandle< StaticDiscovery > StaticDiscovery_rch
DDS::InstanceHandle_t bit_ih_
const ReturnCode_t RETCODE_OK
ACE_CDR::ULong transport_context_
virtual bool announce_domain_participant_qos()
PublisherQosMapType publisherqos_map
virtual DDS::ReturnCode_t write_subscription_data(const GUID_t &, LocalSubscription &, const GUID_t &reader=GUID_UNKNOWN)
typedef OPENDDS_VECTOR(ActionConnectionRecord) ConnectionRecords
const EndpointRegistry & registry_
bool update_subscription_qos(const GUID_t &subscriptionId, const DDS::DataReaderQos &qos, const DDS::SubscriberQos &subscriberQos)
Defines the interface for Discovery callbacks into the Topic.
LocalSubscriptionMap::const_iterator LocalSubscriptionCIter
OPENDDS_STRING topic_name
The Internal API and Implementation of OpenDDS.
Defines the interface that allows DataWriters (and lower levels) to inform discovery.
TransportLocatorSeq trans_info
void remove_from_bit(const DiscoveredSubscription &sub)
typedef OPENDDS_MAP(OPENDDS_STRING, OPENDDS_STRING) ValueMap
Helper types and functions for config file parsing.
DiscoveredPublicationMap discovered_publications_
DDS::DomainParticipantQos qos_
sequence< string > StringSeq
DiscoveredParticipantMap::const_iterator DiscoveredParticipantConstIter
DDS::SubscriberQos subscriber_qos_
typedef OPENDDS_SET(NetworkAddress) AddrSet
static StaticDiscovery_rch instance()
LocationUpdate(ParticipantLocation mask, const ACE_INET_Addr &from, const SystemTimePoint ×tamp)
RepoIdSetType reliable_writers