OpenDDS  Snapshot(2023/04/28-20:55)
Spdp.h
Go to the documentation of this file.
1 /*
2  * Distributed under the OpenDDS License.
3  * See: http://www.opendds.org/license.html
4  */
5 
6 #ifndef OPENDDS_DCPS_RTPS_SPDP_H
7 #define OPENDDS_DCPS_RTPS_SPDP_H
8 
9 #include "Sedp.h"
10 #include "rtps_export.h"
11 #include "ICE/Ice.h"
12 #include "RtpsCoreC.h"
13 
14 #include <dds/DCPS/RcObject.h>
15 #include <dds/DCPS/GuidUtils.h>
16 #include <dds/DCPS/Definitions.h>
18 #include <dds/DCPS/ReactorTask.h>
19 #include <dds/DCPS/PeriodicTask.h>
20 #include <dds/DCPS/SporadicTask.h>
21 #include <dds/DCPS/MultiTask.h>
23 #include <dds/DCPS/JobQueue.h>
26 #ifdef OPENDDS_SECURITY
28 #endif
29 #include <dds/DCPS/PoolAllocator.h>
31 #include <dds/DCPS/TimeTypes.h>
33 #include <dds/DCPS/AtomicBool.h>
34 #include <dds/DCPS/Discovery.h>
35 
36 #include <dds/DdsDcpsInfrastructureC.h>
37 #include <dds/DdsDcpsInfoUtilsC.h>
38 #include <dds/DdsDcpsCoreTypeSupportImpl.h>
39 
40 #include <ace/SOCK_Dgram.h>
41 #include <ace/SOCK_Dgram_Mcast.h>
42 #include <ace/Thread_Mutex.h>
43 
44 #ifndef ACE_LACKS_PRAGMA_ONCE
45 # pragma once
46 #endif
47 
49 
50 namespace OpenDDS {
51 namespace RTPS {
52 
53 class RtpsDiscoveryConfig;
54 class RtpsDiscovery;
55 
56 const char SPDP_AGENT_INFO_KEY[] = "SPDP";
57 const char SEDP_AGENT_INFO_KEY[] = "SEDP";
58 
59 /// Each instance of class Spdp represents the implementation of the RTPS
60 /// Simple Participant Discovery Protocol for a single local DomainParticipant.
62  : public virtual DCPS::RcObject
63 #ifdef OPENDDS_SECURITY
64  , public virtual ICE::AgentInfoListener
65 #endif
66 {
67 public:
69  GUID_tKeyLessThan) DiscoveredParticipantMap;
70  typedef DiscoveredParticipantMap::iterator DiscoveredParticipantIter;
71  typedef DiscoveredParticipantMap::const_iterator DiscoveredParticipantConstIter;
72 
73 
74  Spdp(DDS::DomainId_t domain,
75  DCPS::GUID_t& guid,
76  const DDS::DomainParticipantQos& qos,
77  RtpsDiscovery* disco,
79 
80 #ifdef OPENDDS_SECURITY
81  Spdp(DDS::DomainId_t domain,
82  const DCPS::GUID_t& guid,
83  const DDS::DomainParticipantQos& qos,
84  RtpsDiscovery* disco,
89 #endif
90 
91  ~Spdp();
92 
93  // Participant
94  const DCPS::GUID_t& guid() const { return guid_; }
95  void init_bit(RcHandle<DCPS::BitSubscriber> bit_subscriber);
96  void fini_bit();
97 
98  bool get_default_locators(const DCPS::GUID_t& part_id,
99  DCPS::LocatorSeq& target,
100  bool& inlineQos);
101 
102  bool get_last_recv_locator(const DCPS::GUID_t& part_id,
103  DCPS::LocatorSeq& target,
104  bool& inlineQos);
105 
106  // Managing reader/writer associations
107  void signal_liveliness(DDS::LivelinessQosPolicyKind kind);
108 
109  // Is Spdp fully initialized?
110  bool initialized()
111  {
112  return initialized_flag_;
113  }
114 
115  void shutdown();
116 
117  // Is Spdp shutting down?
119  {
120  return shutdown_flag_;
121  }
122 
123  bool associated() const;
124  bool has_discovered_participant(const DCPS::GUID_t& guid) const;
125  ACE_CDR::ULong get_participant_flags(const DCPS::GUID_t& guid) const;
126 
127 #ifdef OPENDDS_SECURITY
128  Security::SecurityConfig_rch get_security_config() const { return security_config_; }
129  DDS::Security::ParticipantCryptoHandle crypto_handle() const { return crypto_handle_; }
130  DDS::Security::ParticipantCryptoHandle remote_crypto_handle(const DCPS::GUID_t& remote_participant) const;
131 
132  void handle_auth_request(const DDS::Security::ParticipantStatelessMessage& msg);
133  void send_handshake_request(const DCPS::GUID_t& guid, DiscoveredParticipant& dp);
134  void handle_handshake_message(const DDS::Security::ParticipantStatelessMessage& msg);
135  bool handle_participant_crypto_tokens(const DDS::Security::ParticipantVolatileMessageSecure& msg);
136  DDS::OctetSeq local_participant_data_as_octets() const;
137 #endif
138 
139  void handle_participant_data(DCPS::MessageId id,
140  const ParticipantData_t& pdata,
141  const DCPS::MonotonicTimePoint& now,
142  const DCPS::SequenceNumber& seq,
143  const ACE_INET_Addr& from,
144  bool from_sedp);
145 
146  bool validateSequenceNumber(const DCPS::MonotonicTimePoint& now, const DCPS::SequenceNumber& seq, DiscoveredParticipantIter& iter);
147 
148 #ifdef OPENDDS_SECURITY
149  void process_handshake_deadlines(const DCPS::MonotonicTimePoint& tv);
150  void process_handshake_resends(const DCPS::MonotonicTimePoint& tv);
151 
152  /**
153  * Write Secured Updated DP QOS
154  *
155  * lock_ must be acquired before calling this.
156  */
157  void write_secure_updates();
158  void write_secure_disposes();
159  bool is_security_enabled() const { return security_enabled_; }
160 #endif
161 
162  bool is_expectant_opendds(const GUID_t& participant) const;
163 
164 #ifdef OPENDDS_SECURITY
165  typedef std::pair<DDS::Security::ParticipantCryptoHandle, DDS::Security::SharedSecretHandle_var> ParticipantCryptoInfoPair;
166  ParticipantCryptoInfoPair lookup_participant_crypto_info(const DCPS::GUID_t& id) const;
167  void send_participant_crypto_tokens(const DCPS::GUID_t& id);
168 
169  DDS::DomainId_t get_domain_id() const { return domain_; }
170  DDS::Security::PermissionsHandle lookup_participant_permissions(const DCPS::GUID_t& id) const;
171 
172  AuthState lookup_participant_auth_state(const GUID_t& id) const;
173 
174  void process_participant_ice(const ParameterList& plist,
175  const ParticipantData_t& pdata,
176  const DCPS::GUID_t& guid);
177 
178 #endif
179 
180  const ParticipantData_t& get_participant_data(const DCPS::GUID_t& guid) const;
181  ParticipantData_t& get_participant_data(const DCPS::GUID_t& guid);
182  DCPS::MonotonicTime_t get_participant_discovered_at() const;
183  DCPS::MonotonicTime_t get_participant_discovered_at(const DCPS::GUID_t& guid) const;
184 
185  u_short get_spdp_port() const { return tport_ ? tport_->uni_port_ : 0; }
186 
187  u_short get_sedp_port() const { return sedp_->local_address().get_port_number(); }
188 
189 #ifdef ACE_HAS_IPV6
190  u_short get_ipv6_spdp_port() const { return tport_ ? tport_->ipv6_uni_port_ : 0; }
191 
192  u_short get_ipv6_sedp_port() const { return sedp_->ipv6_local_address().get_port_number(); }
193 #endif
194 
195  void rtps_relay_only_now(bool f);
196  void use_rtps_relay_now(bool f);
197  void use_ice_now(bool f);
198  void sedp_rtps_relay_address(const ACE_INET_Addr& address) { sedp_->rtps_relay_address(address); }
199  void sedp_stun_server_address(const ACE_INET_Addr& address) { sedp_->stun_server_address(address); }
200 
201  BuiltinEndpointSet_t available_builtin_endpoints() const { return available_builtin_endpoints_; }
202 #ifdef OPENDDS_SECURITY
204  {
205  return available_extended_builtin_endpoints_;
206  }
207 #endif
208 
209  DCPS::WeakRcHandle<ICE::Endpoint> get_ice_endpoint_if_added();
210 
211  ParticipantData_t build_local_pdata(
212 #ifdef OPENDDS_SECURITY
213  bool always_in_the_clear,
215 #endif
216  );
217 
218  DCPS::RcHandle<RtpsDiscoveryConfig> config() const { return config_; }
219  void spdp_rtps_relay_address_change();
220 
221  void append_transport_statistics(DCPS::TransportStatisticsSequence& seq);
222 
223  void ignore_domain_participant(const GUID_t& ignoreId);
224 
225  void remove_domain_participant(const GUID_t& removeId);
226 
227  bool update_domain_participant_qos(const DDS::DomainParticipantQos& qos);
228 
229  bool has_domain_participant(const GUID_t& ignoreId) const;
230 
231  DCPS::TopicStatus assert_topic(GUID_t& topicId, const char* topicName,
232  const char* dataTypeName, const DDS::TopicQos& qos,
233  bool hasDcpsKey, DCPS::TopicCallbacks* topic_callbacks);
234 
236  const char* topicName,
237  CORBA::String_out dataTypeName,
238  DDS::TopicQos_out qos,
239  GUID_t& topicId)
240  {
241  return endpoint_manager().find_topic(topicName, dataTypeName, qos, topicId);
242  }
243 
245  {
246  return endpoint_manager().remove_topic(topicId);
247  }
248 
249  void ignore_topic(const GUID_t& ignoreId)
250  {
252  endpoint_manager().ignore(ignoreId);
253  }
254 
255  bool update_topic_qos(const GUID_t& topicId, const DDS::TopicQos& qos)
256  {
257  return endpoint_manager().update_topic_qos(topicId, qos);
258  }
259 
261  const GUID_t& topicId,
262  DCPS::DataWriterCallbacks_rch publication,
263  const DDS::DataWriterQos& qos,
264  const DCPS::TransportLocatorSeq& transInfo,
265  const DDS::PublisherQos& publisherQos,
266  const XTypes::TypeInformation& type_info)
267  {
268  return endpoint_manager().add_publication(topicId, publication, qos,
269  transInfo, publisherQos, type_info);
270  }
271 
272  void remove_publication(const GUID_t& publicationId)
273  {
274  endpoint_manager().remove_publication(publicationId);
275  }
276 
277  void ignore_publication(const GUID_t& ignoreId)
278  {
280  return endpoint_manager().ignore(ignoreId);
281  }
282 
284  const GUID_t& publicationId,
285  const DDS::DataWriterQos& qos,
286  const DDS::PublisherQos& publisherQos)
287  {
288  return endpoint_manager().update_publication_qos(publicationId, qos, publisherQos);
289  }
290 
291  void update_publication_locators(const GUID_t& publicationId,
292  const DCPS::TransportLocatorSeq& transInfo)
293  {
294  endpoint_manager().update_publication_locators(publicationId, transInfo);
295  }
296 
298  const GUID_t& topicId,
299  DCPS::DataReaderCallbacks_rch subscription,
300  const DDS::DataReaderQos& qos,
301  const DCPS::TransportLocatorSeq& transInfo,
302  const DDS::SubscriberQos& subscriberQos,
303  const char* filterClassName,
304  const char* filterExpr,
305  const DDS::StringSeq& params,
306  const XTypes::TypeInformation& type_info)
307  {
308  return endpoint_manager().add_subscription(topicId, subscription, qos, transInfo,
309  subscriberQos, filterClassName, filterExpr, params, type_info);
310  }
311 
312  void remove_subscription(const GUID_t& subscriptionId)
313  {
314  endpoint_manager().remove_subscription(subscriptionId);
315  }
316 
317  void ignore_subscription(const GUID_t& ignoreId)
318  {
320  return endpoint_manager().ignore(ignoreId);
321  }
322 
324  const GUID_t& subscriptionId,
325  const DDS::DataReaderQos& qos,
326  const DDS::SubscriberQos& subscriberQos)
327  {
328  return endpoint_manager().update_subscription_qos(subscriptionId, qos, subscriberQos);
329  }
330 
331  bool update_subscription_params(const GUID_t& subId, const DDS::StringSeq& params)
332  {
333  return endpoint_manager().update_subscription_params(subId, params);
334  }
335 
336  void update_subscription_locators(const GUID_t& subId, const DCPS::TransportLocatorSeq& transInfo)
337  {
338  endpoint_manager().update_subscription_locators(subId, transInfo);
339  }
340 
342  {
343  return sedp_->transport_inst();
344  }
345 
347  const GUID_t& remote_entity, const XTypes::TypeInformation& remote_type_info,
348  DCPS::TypeObjReqCond& cond)
349  {
350  sedp_->request_remote_complete_type_objects(remote_entity, remote_type_info, cond);
351  }
352 
353 protected:
354  Sedp& endpoint_manager() { return *sedp_; }
355 
356  void purge_discovered_participant(const DiscoveredParticipantIter& iter);
357 
358 #ifndef DDS_HAS_MINIMUM_BIT
359  void enqueue_location_update_i(DiscoveredParticipantIter iter, DCPS::ParticipantLocation mask, const ACE_INET_Addr& from, const char* reason);
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);
362 #endif
363 
364  bool announce_domain_participant_qos();
365 
366 private:
367 
368 #ifdef OPENDDS_SECURITY
370  PendingRemoteAuthTokenMap;
371 #endif
372 
373  void init(DDS::DomainId_t domain,
374  DCPS::GUID_t& guid,
375  const DDS::DomainParticipantQos& qos,
377 
381  friend class Sedp;
382  DiscoveredParticipantMap participants_;
385  const double quick_resend_ratio_;
390 
391  // Participant:
396 
397  void data_received(const DataSubmessage& data, const ParameterList& plist, const ACE_INET_Addr& from);
398 
399  void match_unauthenticated(const DiscoveredParticipantIter& dp_iter);
400 
401  /// Get this participant's BIT data. user_data may be omitting depending on
402  /// security settings.
403  DDS::ParticipantBuiltinTopicData get_part_bit_data(bool secure) const;
404 
405  /**
406  * If this is true participant user data should only be sent and received
407  * securely, otherwise the user data should be empty and participant bit
408  * updates should be withheld from the user.
409  */
410  bool secure_part_user_data() const;
411 
412  void update_rtps_relay_application_participant_i(DiscoveredParticipantIter iter, bool new_participant);
413 
414 #ifdef OPENDDS_SECURITY
415  DDS::ReturnCode_t send_handshake_message(const DCPS::GUID_t& guid,
418  DCPS::MonotonicTimePoint schedule_handshake_resend(const DCPS::TimeDuration& time, const DCPS::GUID_t& guid);
419  bool match_authenticated(const DCPS::GUID_t& guid, DiscoveredParticipantIter& iter);
420  void attempt_authentication(const DiscoveredParticipantIter& iter, bool from_discovery);
421  void update_agent_info(const DCPS::GUID_t& local_guid, const ICE::AgentInfo& agent_info);
422  void remove_agent_info(const DCPS::GUID_t& local_guid);
423 #endif
424 
426  : public virtual DCPS::RcEventHandler
427  , public virtual DCPS::InternalDataReaderListener<DCPS::NetworkInterfaceAddress>
428 #ifdef OPENDDS_SECURITY
429  , public virtual ICE::Endpoint
430 #endif
431  {
432  typedef size_t WriteFlags;
433  static const WriteFlags SEND_MULTICAST = (1 << 0);
434  static const WriteFlags SEND_RELAY = (1 << 1);
435  static const WriteFlags SEND_DIRECT = (1 << 2);
436 
438  public:
440  const DCPS::ReactorTask_rch& reactor_task)
441  : tport_(tport)
442  , reactor_task_(reactor_task)
443  {
444  }
445 
446  void execute()
447  {
448  DCPS::RcHandle<SpdpTransport> tport = tport_.lock();
449  if (!tport) {
450  return;
451  }
452  tport->register_handlers(reactor_task_);
453  }
454 
455  private:
458  };
459 
460  explicit SpdpTransport(DCPS::RcHandle<Spdp> outer);
461  ~SpdpTransport();
462 
463  const ACE_SOCK_Dgram& choose_recv_socket(ACE_HANDLE h) const;
464 
465  virtual int handle_input(ACE_HANDLE h);
466 
467  void open(const DCPS::ReactorTask_rch& reactor_task,
468  const DCPS::JobQueue_rch& job_queue);
469  void register_unicast_socket(
470  ACE_Reactor* reactor, ACE_SOCK_Dgram& socket, const char* what);
471  void register_handlers(const DCPS::ReactorTask_rch& reactor_task);
472  void enable_periodic_tasks();
473 
474  void shorten_local_sender_delay_i();
475  void write(WriteFlags flags);
476  void write_i(WriteFlags flags);
477  void write_i(const DCPS::GUID_t& guid, const ACE_INET_Addr& local_address, WriteFlags flags);
478  void send(WriteFlags flags, const ACE_INET_Addr& local_address = ACE_INET_Addr());
479  const ACE_SOCK_Dgram& choose_send_socket(const ACE_INET_Addr& addr) const;
480  ssize_t send(const ACE_INET_Addr& addr, bool relay);
481  void close(const DCPS::ReactorTask_rch& reactor_task);
482  void dispose_unregister();
483  bool open_unicast_socket(u_short port_common, u_short participant_id);
484 #ifdef ACE_HAS_IPV6
485  bool open_unicast_ipv6_socket(u_short port);
486 #endif
487 
489 
490  DCPS::WeakRcHandle<ICE::Endpoint> get_ice_endpoint();
491 
492 #ifdef OPENDDS_SECURITY
493  ICE::AddressListType host_addresses() const;
494  void send(const ACE_INET_Addr& address, const STUN::Message& message);
495  ACE_INET_Addr stun_server_address() const;
496  #ifndef DDS_HAS_MINIMUM_BIT
497  void ice_connect(const ICE::GuidSetType& guids, const ACE_INET_Addr& addr);
498  void ice_disconnect(const ICE::GuidSetType& guids, const ACE_INET_Addr& addr);
499  #endif
500 #endif
501 
506  u_short uni_port_;
511 #ifdef ACE_HAS_IPV6
512  u_short ipv6_uni_port_;
513  ACE_SOCK_Dgram unicast_ipv6_socket_;
514  OPENDDS_STRING multicast_ipv6_interface_;
515  ACE_INET_Addr multicast_ipv6_address_;
516  ACE_SOCK_Dgram_Mcast multicast_ipv6_socket_;
517 #endif
519  OPENDDS_SET(ACE_INET_Addr) send_addrs_;
524  void send_local(const DCPS::MonotonicTimePoint& now);
526  void send_directed(const DCPS::MonotonicTimePoint& now);
528  OPENDDS_LIST(DCPS::GUID_t) directed_guids_;
529  void process_lease_expirations(const DCPS::MonotonicTimePoint& now);
531  void thread_status_task(const DCPS::MonotonicTimePoint& now);
534 #ifdef OPENDDS_SECURITY
535  void process_handshake_deadlines(const DCPS::MonotonicTimePoint& now);
537  void process_handshake_resends(const DCPS::MonotonicTimePoint& now);
539  void send_relay(const DCPS::MonotonicTimePoint& now);
542  void relay_stun_task(const DCPS::MonotonicTimePoint& now);
546  void process_relay_sra(ICE::ServerReflexiveStateMachine::StateChange);
547  void disable_relay_stun_task();
548 #endif
551 
554  };
555 
557 
558 #ifdef OPENDDS_SECURITY
559  class SendStun : public DCPS::Job {
560  public:
562  const ACE_INET_Addr& address,
563  const STUN::Message& message)
564  : tport_(tport)
565  , address_(address)
566  , message_(message)
567  {}
568  void execute();
569  private:
573  };
574 
575 #ifndef DDS_HAS_MINIMUM_BIT
576  class IceConnect : public DCPS::Job {
577  public:
579  const ICE::GuidSetType& guids,
580  const ACE_INET_Addr& addr,
581  bool connect)
582  : spdp_(spdp)
583  , guids_(guids)
584  , addr_(addr)
585  , connect_(connect)
586  {}
587  void execute();
588  private:
592  bool connect_;
593  };
594 #endif /* DDS_HAS_MINIMUM_BIT */
595 #endif
596 
597  /// Spdp initialized
599 
602  /// Spdp shutting down
604 
607 
609 
610  void remove_lease_expiration_i(DiscoveredParticipantIter iter);
611  void update_lease_expiration_i(DiscoveredParticipantIter iter,
612  const DCPS::MonotonicTimePoint& now);
613  void process_lease_expirations(const DCPS::MonotonicTimePoint& now);
615 
616 #ifdef OPENDDS_SECURITY
620 
622 
626 
631 
633 
635 
636  void start_ice(DCPS::WeakRcHandle<ICE::Endpoint> endpoint, DCPS::GUID_t remote, BuiltinEndpointSet_t avail,
638  const ICE::AgentInfo& agent_info);
639  void stop_ice(DCPS::WeakRcHandle<ICE::Endpoint> endpoint, DCPS::GUID_t remote, BuiltinEndpointSet_t avail,
641 
642  void purge_handshake_deadlines(DiscoveredParticipantIter iter);
644 
645  void purge_handshake_resends(DiscoveredParticipantIter iter);
647 
649  void set_auth_state(DiscoveredParticipant& dp, AuthState state);
650 #endif
651 
652  friend class ::DDS_TEST;
653 };
654 
655 } // namespace RTPS
656 } // namespace OpenDDS
657 
659 
660 #endif // OPENDDS_RTPS_SPDP_H
SendStun(const DCPS::RcHandle< SpdpTransport > &tport, const ACE_INET_Addr &address, const STUN::Message &message)
Definition: Spdp.h:561
DCPS::RcHandle< SpdpTransport > tport_
Definition: Spdp.h:556
ICE::ServerReflexiveStateMachine relay_srsm_
Definition: Spdp.h:545
#define ACE_GUARD(MUTEX, OBJ, LOCK)
DCPS::RcHandle< RtpsDiscoveryConfig > config_
Definition: Spdp.h:384
void ignore_topic(const GUID_t &ignoreId)
Definition: Spdp.h:249
DCPS::PmfMultiTask< SpdpTransport > SpdpMulti
Definition: Spdp.h:523
DCPS::FibonacciSequence< TimeDuration > relay_spdp_task_falloff_
Definition: Spdp.h:541
DCPS::ConditionVariable< ACE_Thread_Mutex > shutdown_cond_
Definition: Spdp.h:601
u_short get_sedp_port() const
Definition: Spdp.h:187
ICE::GuidSetType guids_
Definition: Spdp.h:590
void update_subscription_locators(const GUID_t &subId, const DCPS::TransportLocatorSeq &transInfo)
Definition: Spdp.h:336
#define OPENDDS_LIST(T)
ACE_Thread_Mutex lock_
Definition: Spdp.h:378
Sedp & endpoint_manager()
Definition: Spdp.h:354
DDS::Security::PermissionsCredentialToken permissions_credential_token_
Definition: Spdp.h:630
DDS::Security::IdentityToken identity_token_
Definition: Spdp.h:627
DCPS::MulticastManager multicast_manager_
Definition: Spdp.h:518
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
Definition: COPYING.txt:14
bool security_enabled_
Definition: Spdp.h:619
const char SEDP_AGENT_INFO_KEY[]
Definition: Spdp.h:57
TimeQueue handshake_deadlines_
Definition: Spdp.h:643
DiscoveredParticipantMap::iterator DiscoveredParticipantIter
Definition: Spdp.h:70
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)
Definition: Spdp.h:260
void ignore_publication(const GUID_t &ignoreId)
Definition: Spdp.h:277
bool update_topic_qos(const GUID_t &topicId, const DDS::TopicQos &qos)
Definition: Spdp.h:255
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_
Definition: Spdp.h:507
DCPS::RcHandle< ICE::Agent > ice_agent_
Definition: Spdp.h:634
DDS::Security::ExtendedBuiltinEndpointSet_t available_extended_builtin_endpoints() const
Definition: Spdp.h:203
DCPS::TopicStatus find_topic(const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, GUID_t &topicId)
Definition: Spdp.h:235
DCPS::TimeDuration lease_duration_
Definition: Spdp.h:387
DCPS::WeakRcHandle< Spdp > outer_
Definition: Spdp.h:502
int ssize_t
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 &params, const XTypes::TypeInformation &type_info)
Definition: Spdp.h:297
DCPS::FibonacciSequence< TimeDuration > relay_stun_task_falloff_
Definition: Spdp.h:544
ACE_Guard< ACE_Thread_Mutex > lock_
DCPS::RcHandle< SpdpMulti > local_send_task_
Definition: Spdp.h:525
RtpsDiscovery * disco_
Definition: Spdp.h:383
ACE_Message_Block wbuff_
Definition: Spdp.h:520
DDS::DomainParticipantQos qos_
Definition: Spdp.h:380
void remove_publication(const GUID_t &publicationId)
Definition: Spdp.h:272
DDS::Security::IdentityHandle identity_handle_
Definition: Spdp.h:623
DCPS::RcHandle< Sedp > sedp_
Definition: Spdp.h:606
u_short get_spdp_port() const
Definition: Spdp.h:185
typedef OPENDDS_MAP_CMP(GUID_t, ParticipantHandle, GUID_tKeyLessThan) ParticipantMap
void update_publication_locators(const GUID_t &publicationId, const DCPS::TransportLocatorSeq &transInfo)
Definition: Spdp.h:291
int close(ACE_HANDLE handle)
DCPS::SequenceNumber seq_
Definition: Spdp.h:505
MessageId
One byte message id (<256)
DiscoveredParticipantMap::const_iterator DiscoveredParticipantConstIter
Definition: Spdp.h:71
DDS::DomainId_t get_domain_id() const
Definition: Spdp.h:169
#define OPENDDS_STRING
bool is_application_participant_
Definition: Spdp.h:395
DCPS::RcHandle< SpdpSporadic > relay_spdp_task_
Definition: Spdp.h:540
DCPS::InternalTransportStatistics transport_statistics_
Definition: Spdp.h:552
DOMAINID_TYPE_NATIVE DomainId_t
void sedp_stun_server_address(const ACE_INET_Addr &address)
Definition: Spdp.h:199
DDS::Security::ParticipantCryptoHandle crypto_handle_
Definition: Spdp.h:625
const double quick_resend_ratio_
Definition: Spdp.h:385
DDS::Security::ExtendedBuiltinEndpointSet_t available_extended_builtin_endpoints_
Definition: Spdp.h:617
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)
Definition: Spdp.h:244
const DCPS::TimeDuration min_resend_delay_
Definition: Spdp.h:386
RcHandle< DCPS::TransportInst > sedp_transport_inst() const
Definition: Spdp.h:341
unsigned long ParticipantLocation
#define OpenDDS_Rtps_Export
Definition: rtps_export.h:23
sequence< TransportStatistics > TransportStatisticsSequence
DCPS::RcHandle< SpdpSporadic > directed_send_task_
Definition: Spdp.h:527
BuiltinEndpointSet_t available_builtin_endpoints() const
Definition: Spdp.h:201
void remove_subscription(const GUID_t &subscriptionId)
Definition: Spdp.h:312
bool initialized()
Definition: Spdp.h:110
bool update_publication_qos(const GUID_t &publicationId, const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos)
Definition: Spdp.h:283
RegisterHandlers(const DCPS::RcHandle< SpdpTransport > &tport, const DCPS::ReactorTask_rch &reactor_task)
Definition: Spdp.h:439
DDS::Security::PermissionsToken permissions_token_
Definition: Spdp.h:629
DCPS::SequenceNumber stateless_sequence_number_
Definition: Spdp.h:621
ACE_INET_Addr address_
Definition: Spdp.h:571
int init(void)
DCPS::TimeDuration lease_extension_
Definition: Spdp.h:388
BuiltinEndpointSet_t available_builtin_endpoints_
Definition: Spdp.h:605
DDS::Security::PermissionsHandle permissions_handle_
Definition: Spdp.h:624
DDS::Security::ParticipantSecurityAttributes participant_sec_attr_
Definition: Spdp.h:632
sequence< octet > OctetSeq
Definition: DdsDcpsCore.idl:64
AtomicBool initialized_flag_
Spdp initialized.
Definition: Spdp.h:598
DCPS::RcHandle< SpdpSporadic > handshake_deadline_task_
Definition: Spdp.h:536
std::pair< DDS::Security::ParticipantCryptoHandle, DDS::Security::SharedSecretHandle_var > ParticipantCryptoInfoPair
Definition: Spdp.h:165
ACE_UINT32 ULong
DCPS::RcHandle< DCPS::InternalDataReader< DCPS::NetworkInterfaceAddress > > network_interface_address_reader_
Definition: Spdp.h:533
bool shutting_down()
Definition: Spdp.h:118
DCPS::RcHandle< SpdpPeriodic > thread_status_task_
Definition: Spdp.h:532
DCPS::GUID_t guid_
Definition: Spdp.h:393
sequence< Parameter > ParameterList
DCPS::PmfPeriodicTask< SpdpTransport > SpdpPeriodic
Definition: Spdp.h:521
STUN::Message message_
Definition: Spdp.h:572
IceConnect(DCPS::RcHandle< Spdp > spdp, const ICE::GuidSetType &guids, const ACE_INET_Addr &addr, bool connect)
Definition: Spdp.h:578
const char SPDP_AGENT_INFO_KEY[]
Definition: Spdp.h:56
ACE_SOCK_Dgram_Mcast multicast_socket_
Definition: Spdp.h:510
DCPS::WeakRcHandle< SpdpTransport > tport_
Definition: Spdp.h:570
TimeQueue lease_expirations_
Definition: Spdp.h:614
DCPS::RcHandle< SpdpSporadic > relay_stun_task_
Definition: Spdp.h:543
DCPS::RcHandle< SpdpSporadic > lease_expiration_task_
Definition: Spdp.h:530
const DCPS::MonotonicTime_t participant_discovered_at_
Definition: Spdp.h:394
AtomicBool shutdown_flag_
Spdp shutting down.
Definition: Spdp.h:603
DCPS::RcHandle< Spdp > spdp_
Definition: Spdp.h:589
bool is_security_enabled() const
Definition: Spdp.h:159
Sequence number abstraction. Only allows positive 64 bit values.
size_t n_participants_in_authentication_
Definition: Spdp.h:648
DCPS::PmfSporadicTask< SpdpTransport > SpdpSporadic
Definition: Spdp.h:522
const DCPS::GUID_t & guid() const
Definition: Spdp.h:94
bool update_subscription_qos(const GUID_t &subscriptionId, const DDS::DataReaderQos &qos, const DDS::SubscriberQos &subscriberQos)
Definition: Spdp.h:323
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
bool eh_shutdown_
Definition: Spdp.h:600
Security::SecurityConfig_rch security_config_
Definition: Spdp.h:618
DCPS::RcHandle< SpdpSporadic > handshake_resend_task_
Definition: Spdp.h:538
DCPS::WeakRcHandle< SpdpTransport > tport_
Definition: Spdp.h:456
DCPS::RcHandle< RtpsDiscoveryConfig > config() const
Definition: Spdp.h:218
::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)
Definition: Spdp.h:346
DCPS::RcHandle< DCPS::BitSubscriber > bit_subscriber_
Definition: Spdp.h:379
Security::SecurityConfig_rch get_security_config() const
Definition: Spdp.h:128
#define OPENDDS_SET(K)
bool update_subscription_params(const GUID_t &subId, const DDS::StringSeq &params)
Definition: Spdp.h:331
ACE_INET_Addr multicast_address_
Definition: Spdp.h:509
TimeQueue handshake_resends_
Definition: Spdp.h:646
OPENDDS_STRING multicast_interface_
Definition: Spdp.h:508
DCPS::MonotonicTimePoint last_harvest
Definition: Spdp.h:553
int shutdown(ACE_HANDLE handle, int how)
Defines the interface for Discovery callbacks into the Topic.
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
DiscoveredParticipantMap participants_
Definition: Spdp.h:382
XTypes::TypeLookupService_rch type_lookup_service_
Definition: Spdp.h:389
const DDS::DomainId_t domain_
Definition: Spdp.h:392
LivelinessQosPolicyKind
std::set< GuidPair > GuidSetType
Definition: RTPS/ICE/Ice.h:39
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
unsigned long BuiltinEndpointSet_t
Definition: RtpsCore.idl:197
Discovery Strategy class that implements RTPS discovery.
Definition: RtpsDiscovery.h:55
DDS::Security::ParticipantCryptoHandle crypto_handle() const
Definition: Spdp.h:129
DDS::Security::IdentityStatusToken identity_status_token_
Definition: Spdp.h:628
void sedp_rtps_relay_address(const ACE_INET_Addr &address)
Definition: Spdp.h:198
void ignore_subscription(const GUID_t &ignoreId)
Definition: Spdp.h:317