6 #ifndef OPENDDS_DCPS_RTPS_SPDP_H 7 #define OPENDDS_DCPS_RTPS_SPDP_H 12 #include "RtpsCoreC.h" 26 #ifdef OPENDDS_SECURITY 36 #include <dds/DdsDcpsInfrastructureC.h> 37 #include <dds/DdsDcpsInfoUtilsC.h> 38 #include <dds/DdsDcpsCoreTypeSupportImpl.h> 44 #ifndef ACE_LACKS_PRAGMA_ONCE 53 class RtpsDiscoveryConfig;
63 #ifdef OPENDDS_SECURITY 80 #ifdef OPENDDS_SECURITY 112 return initialized_flag_;
120 return shutdown_flag_;
123 bool associated()
const;
124 bool has_discovered_participant(
const DCPS::GUID_t& guid)
const;
127 #ifdef OPENDDS_SECURITY 148 #ifdef OPENDDS_SECURITY 157 void write_secure_updates();
158 void write_secure_disposes();
162 bool is_expectant_opendds(
const GUID_t& participant)
const;
164 #ifdef OPENDDS_SECURITY 166 ParticipantCryptoInfoPair lookup_participant_crypto_info(
const DCPS::GUID_t&
id)
const;
167 void send_participant_crypto_tokens(
const DCPS::GUID_t&
id);
187 u_short
get_sedp_port()
const {
return sedp_->local_address().get_port_number(); }
190 u_short get_ipv6_spdp_port()
const {
return tport_ ? tport_->ipv6_uni_port_ : 0; }
192 u_short get_ipv6_sedp_port()
const {
return sedp_->ipv6_local_address().get_port_number(); }
195 void rtps_relay_only_now(
bool f);
196 void use_rtps_relay_now(
bool f);
197 void use_ice_now(
bool f);
202 #ifdef OPENDDS_SECURITY 205 return available_extended_builtin_endpoints_;
212 #ifdef OPENDDS_SECURITY
213 bool always_in_the_clear,
219 void spdp_rtps_relay_address_change();
223 void ignore_domain_participant(
const GUID_t& ignoreId);
225 void remove_domain_participant(
const GUID_t& removeId);
229 bool has_domain_participant(
const GUID_t& ignoreId)
const;
236 const char* topicName,
238 DDS::TopicQos_out qos,
241 return endpoint_manager().find_topic(topicName, dataTypeName, qos, topicId);
246 return endpoint_manager().remove_topic(topicId);
252 endpoint_manager().ignore(ignoreId);
257 return endpoint_manager().update_topic_qos(topicId, qos);
268 return endpoint_manager().add_publication(topicId, publication, qos,
269 transInfo, publisherQos, type_info);
274 endpoint_manager().remove_publication(publicationId);
280 return endpoint_manager().ignore(ignoreId);
284 const GUID_t& publicationId,
288 return endpoint_manager().update_publication_qos(publicationId, qos, publisherQos);
294 endpoint_manager().update_publication_locators(publicationId, transInfo);
303 const char* filterClassName,
304 const char* filterExpr,
308 return endpoint_manager().add_subscription(topicId, subscription, qos, transInfo,
309 subscriberQos, filterClassName, filterExpr, params, type_info);
314 endpoint_manager().remove_subscription(subscriptionId);
320 return endpoint_manager().ignore(ignoreId);
324 const GUID_t& subscriptionId,
328 return endpoint_manager().update_subscription_qos(subscriptionId, qos, subscriberQos);
333 return endpoint_manager().update_subscription_params(subId, params);
338 endpoint_manager().update_subscription_locators(subId, transInfo);
343 return sedp_->transport_inst();
350 sedp_->request_remote_complete_type_objects(remote_entity, remote_type_info, cond);
356 void purge_discovered_participant(
const DiscoveredParticipantIter& iter);
358 #ifndef DDS_HAS_MINIMUM_BIT 360 void process_location_updates_i(
const DiscoveredParticipantIter& iter,
const char* reason,
bool force_publish =
false);
361 void publish_location_update_i(
const DiscoveredParticipantIter& iter);
364 bool announce_domain_participant_qos();
368 #ifdef OPENDDS_SECURITY 370 PendingRemoteAuthTokenMap;
399 void match_unauthenticated(
const DiscoveredParticipantIter& dp_iter);
410 bool secure_part_user_data()
const;
412 void update_rtps_relay_application_participant_i(DiscoveredParticipantIter iter,
bool new_participant);
414 #ifdef OPENDDS_SECURITY 419 bool match_authenticated(
const DCPS::GUID_t& guid, DiscoveredParticipantIter& iter);
420 void attempt_authentication(
const DiscoveredParticipantIter& iter,
bool from_discovery);
428 #ifdef OPENDDS_SECURITY 433 static const WriteFlags SEND_MULTICAST = (1 << 0);
434 static const WriteFlags SEND_RELAY = (1 << 1);
435 static const WriteFlags SEND_DIRECT = (1 << 2);
442 , reactor_task_(reactor_task)
452 tport->register_handlers(reactor_task_);
465 virtual int handle_input(ACE_HANDLE h);
469 void register_unicast_socket(
472 void enable_periodic_tasks();
474 void shorten_local_sender_delay_i();
475 void write(WriteFlags flags);
476 void write_i(WriteFlags flags);
482 void dispose_unregister();
483 bool open_unicast_socket(u_short port_common, u_short participant_id);
485 bool open_unicast_ipv6_socket(u_short port);
492 #ifdef OPENDDS_SECURITY 493 ICE::AddressListType host_addresses()
const;
496 #ifndef DDS_HAS_MINIMUM_BIT 512 u_short ipv6_uni_port_;
534 #ifdef OPENDDS_SECURITY 547 void disable_relay_stun_task();
558 #ifdef OPENDDS_SECURITY 575 #ifndef DDS_HAS_MINIMUM_BIT 610 void remove_lease_expiration_i(DiscoveredParticipantIter iter);
611 void update_lease_expiration_i(DiscoveredParticipantIter iter,
616 #ifdef OPENDDS_SECURITY 642 void purge_handshake_deadlines(DiscoveredParticipantIter iter);
645 void purge_handshake_resends(DiscoveredParticipantIter iter);
652 friend class ::DDS_TEST;
660 #endif // OPENDDS_RTPS_SPDP_H SendStun(const DCPS::RcHandle< SpdpTransport > &tport, const ACE_INET_Addr &address, const STUN::Message &message)
DCPS::RcHandle< SpdpTransport > tport_
ICE::ServerReflexiveStateMachine relay_srsm_
#define ACE_GUARD(MUTEX, OBJ, LOCK)
DCPS::RcHandle< RtpsDiscoveryConfig > config_
void ignore_topic(const GUID_t &ignoreId)
DCPS::PmfMultiTask< SpdpTransport > SpdpMulti
DCPS::FibonacciSequence< TimeDuration > relay_spdp_task_falloff_
DCPS::ConditionVariable< ACE_Thread_Mutex > shutdown_cond_
u_short get_sedp_port() const
void update_subscription_locators(const GUID_t &subId, const DCPS::TransportLocatorSeq &transInfo)
Sedp & endpoint_manager()
DDS::Security::PermissionsCredentialToken permissions_credential_token_
DDS::Security::IdentityToken identity_token_
DCPS::MulticastManager multicast_manager_
YARD is all original work While it may rely on standard YARD does not include code from other sources We have chosen to release our work as public domain code This means that YARD has been released outside the copyright system Feel free to use the code in any way you wish especially in an academic plagiarism has very little to do with copyright In an academic or in any situation where you are expected to give credit to other people s you will need to cite YARD as a source The author is Christopher and the appropriate date is December the release date for we can t make any promises regarding whether YARD will do what you or whether we will make any changes you ask for You are free to hire your own expert for that If you choose to distribute YARD you ll probably want to read up on the laws covering warranties in your state
const char SEDP_AGENT_INFO_KEY[]
TimeQueue handshake_deadlines_
DiscoveredParticipantMap::iterator DiscoveredParticipantIter
GUID_t add_publication(const GUID_t &topicId, DCPS::DataWriterCallbacks_rch publication, const DDS::DataWriterQos &qos, const DCPS::TransportLocatorSeq &transInfo, const DDS::PublisherQos &publisherQos, const XTypes::TypeInformation &type_info)
void ignore_publication(const GUID_t &ignoreId)
bool update_topic_qos(const GUID_t &topicId, const DDS::TopicQos &qos)
sequence< Locator_t > LocatorSeq
ssize_t send(ACE_HANDLE handle, const void *buf, size_t len, int flags, const ACE_Time_Value *timeout=0)
unsigned long ExtendedBuiltinEndpointSet_t
#define OPENDDS_MULTIMAP(K, T)
sequence< TransportLocator > TransportLocatorSeq
ACE_SOCK_Dgram unicast_socket_
DCPS::RcHandle< ICE::Agent > ice_agent_
DDS::Security::ExtendedBuiltinEndpointSet_t available_extended_builtin_endpoints() const
DCPS::TopicStatus find_topic(const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, GUID_t &topicId)
DCPS::TimeDuration lease_duration_
DCPS::WeakRcHandle< Spdp > outer_
GUID_t add_subscription(const GUID_t &topicId, DCPS::DataReaderCallbacks_rch subscription, const DDS::DataReaderQos &qos, const DCPS::TransportLocatorSeq &transInfo, const DDS::SubscriberQos &subscriberQos, const char *filterClassName, const char *filterExpr, const DDS::StringSeq ¶ms, const XTypes::TypeInformation &type_info)
DCPS::FibonacciSequence< TimeDuration > relay_stun_task_falloff_
ACE_Guard< ACE_Thread_Mutex > lock_
DCPS::RcHandle< SpdpMulti > local_send_task_
DDS::DomainParticipantQos qos_
void remove_publication(const GUID_t &publicationId)
DDS::Security::IdentityHandle identity_handle_
DCPS::RcHandle< Sedp > sedp_
u_short get_spdp_port() const
typedef OPENDDS_MAP_CMP(GUID_t, ParticipantHandle, GUID_tKeyLessThan) ParticipantMap
void update_publication_locators(const GUID_t &publicationId, const DCPS::TransportLocatorSeq &transInfo)
int close(ACE_HANDLE handle)
DCPS::SequenceNumber seq_
MessageId
One byte message id (<256)
DiscoveredParticipantMap::const_iterator DiscoveredParticipantConstIter
DDS::DomainId_t get_domain_id() const
bool is_application_participant_
DCPS::RcHandle< SpdpSporadic > relay_spdp_task_
DCPS::InternalTransportStatistics transport_statistics_
DOMAINID_TYPE_NATIVE DomainId_t
DCPS::ReactorTask_rch reactor_task_
void sedp_stun_server_address(const ACE_INET_Addr &address)
DDS::Security::ParticipantCryptoHandle crypto_handle_
const double quick_resend_ratio_
DDS::Security::ExtendedBuiltinEndpointSet_t available_extended_builtin_endpoints_
ACE_HANDLE open(const char *filename, int mode, mode_t perms=ACE_DEFAULT_OPEN_PERMS, LPSECURITY_ATTRIBUTES sa=0)
DCPS::TopicStatus remove_topic(const GUID_t &topicId)
bool network_is_unreachable_
const DCPS::TimeDuration min_resend_delay_
RcHandle< DCPS::TransportInst > sedp_transport_inst() const
unsigned long ParticipantLocation
#define OpenDDS_Rtps_Export
sequence< TransportStatistics > TransportStatisticsSequence
DCPS::RcHandle< SpdpSporadic > directed_send_task_
long ParticipantCryptoHandle
BuiltinEndpointSet_t available_builtin_endpoints() const
void remove_subscription(const GUID_t &subscriptionId)
bool update_publication_qos(const GUID_t &publicationId, const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos)
RegisterHandlers(const DCPS::RcHandle< SpdpTransport > &tport, const DCPS::ReactorTask_rch &reactor_task)
DDS::Security::PermissionsToken permissions_token_
DCPS::SequenceNumber stateless_sequence_number_
DCPS::TimeDuration lease_extension_
BuiltinEndpointSet_t available_builtin_endpoints_
DDS::Security::PermissionsHandle permissions_handle_
DDS::Security::ParticipantSecurityAttributes participant_sec_attr_
sequence< octet > OctetSeq
AtomicBool initialized_flag_
Spdp initialized.
DCPS::RcHandle< SpdpSporadic > handshake_deadline_task_
std::pair< DDS::Security::ParticipantCryptoHandle, DDS::Security::SharedSecretHandle_var > ParticipantCryptoInfoPair
DCPS::RcHandle< DCPS::InternalDataReader< DCPS::NetworkInterfaceAddress > > network_interface_address_reader_
DCPS::RcHandle< SpdpPeriodic > thread_status_task_
sequence< Parameter > ParameterList
DCPS::PmfPeriodicTask< SpdpTransport > SpdpPeriodic
IceConnect(DCPS::RcHandle< Spdp > spdp, const ICE::GuidSetType &guids, const ACE_INET_Addr &addr, bool connect)
const char SPDP_AGENT_INFO_KEY[]
ACE_SOCK_Dgram_Mcast multicast_socket_
DCPS::WeakRcHandle< SpdpTransport > tport_
TimeQueue lease_expirations_
DCPS::RcHandle< SpdpSporadic > relay_stun_task_
DCPS::RcHandle< SpdpSporadic > lease_expiration_task_
const DCPS::MonotonicTime_t participant_discovered_at_
AtomicBool shutdown_flag_
Spdp shutting down.
DCPS::RcHandle< Spdp > spdp_
bool is_security_enabled() const
Sequence number abstraction. Only allows positive 64 bit values.
size_t n_participants_in_authentication_
DCPS::PmfSporadicTask< SpdpTransport > SpdpSporadic
const DCPS::GUID_t & guid() const
bool update_subscription_qos(const GUID_t &subscriptionId, const DDS::DataReaderQos &qos, const DDS::SubscriberQos &subscriberQos)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
Security::SecurityConfig_rch security_config_
DCPS::RcHandle< SpdpSporadic > handshake_resend_task_
DCPS::WeakRcHandle< SpdpTransport > tport_
DCPS::RcHandle< RtpsDiscoveryConfig > config() const
::DDS::ReturnCode_t write(in<%SCOPED%> instance_data, in ::DDS::InstanceHandle_t handle)
void request_remote_complete_type_objects(const GUID_t &remote_entity, const XTypes::TypeInformation &remote_type_info, DCPS::TypeObjReqCond &cond)
DCPS::RcHandle< DCPS::BitSubscriber > bit_subscriber_
Security::SecurityConfig_rch get_security_config() const
bool update_subscription_params(const GUID_t &subId, const DDS::StringSeq ¶ms)
ACE_INET_Addr multicast_address_
TimeQueue handshake_resends_
OPENDDS_STRING multicast_interface_
DCPS::MonotonicTimePoint last_harvest
int shutdown(ACE_HANDLE handle, int how)
DiscoveredParticipantDataKind
Defines the interface for Discovery callbacks into the Topic.
The Internal API and Implementation of OpenDDS.
DiscoveredParticipantMap participants_
XTypes::TypeLookupService_rch type_lookup_service_
const DDS::DomainId_t domain_
std::set< GuidPair > GuidSetType
sequence< string > StringSeq
unsigned long BuiltinEndpointSet_t
Discovery Strategy class that implements RTPS discovery.
DDS::Security::ParticipantCryptoHandle crypto_handle() const
DDS::Security::IdentityStatusToken identity_status_token_
void sedp_rtps_relay_address(const ACE_INET_Addr &address)
void ignore_subscription(const GUID_t &ignoreId)