OpenDDS  Snapshot(2023/04/28-20:55)
Sedp.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_SEDP_H
7 #define OPENDDS_DCPS_RTPS_SEDP_H
8 
9 #include "AssociationRecord.h"
10 #include "DiscoveredEntities.h"
11 #include "LocalEntities.h"
12 #include "MessageTypes.h"
13 #include "MessageUtils.h"
14 #include "TypeLookupTypeSupportImpl.h"
15 #ifdef OPENDDS_SECURITY
16 # include "ParameterListConverter.h"
17 #endif
18 #include "RtpsRpcTypeSupportImpl.h"
19 #include "RtpsCoreTypeSupportImpl.h"
20 #ifdef OPENDDS_SECURITY
21 # include "RtpsSecurityC.h"
22 #endif
23 
27 #include <dds/DCPS/DCPS_Utils.h>
31 #include <dds/DCPS/Definitions.h>
33 #include <dds/DCPS/GuidUtils.h>
34 #include <dds/DCPS/JobQueue.h>
37 #include <dds/DCPS/PoolAllocator.h>
38 #include <dds/DCPS/RcHandle_T.h>
41 #include <dds/DCPS/SporadicTask.h>
42 #include <dds/DCPS/TopicDetails.h>
43 #include <dds/DCPS/AtomicBool.h>
44 
50 
51 #include <dds/DdsDcpsInfrastructureC.h>
52 #include <dds/DdsDcpsInfoUtilsC.h>
53 #include <dds/DdsDcpsCoreTypeSupportImpl.h>
54 #ifdef OPENDDS_SECURITY
55 # include <dds/DdsSecurityCoreC.h>
56 #endif
57 
58 #include <ace/Task_Ex_T.h>
59 #include <ace/Thread_Mutex.h>
60 
61 #ifndef ACE_LACKS_PRAGMA_ONCE
62 # pragma once
63 #endif
64 
66 
67 namespace OpenDDS {
68 namespace RTPS {
69 
70 using DCPS::RepoIdSet;
71 using DCPS::AtomicBool;
72 using DCPS::GUID_UNKNOWN;
73 
74 class RtpsDiscovery;
75 class Spdp;
76 class WaitForAcks;
77 
78 class Sedp : public virtual DCPS::RcEventHandler {
79 public:
80  Sedp(const DCPS::GUID_t& participant_id,
81  Spdp& owner,
82  ACE_Thread_Mutex& lock);
83 
84  ~Sedp();
85 
87  const RtpsDiscovery& disco,
88  DDS::DomainId_t domainId,
90 
91 #ifdef OPENDDS_SECURITY
95 #endif
96 
97  void shutdown();
100 
101  // @brief return the ip address we have bound to.
102  // Valid after init() call
103  const DCPS::NetworkAddress& local_address() const;
104 #ifdef ACE_HAS_IPV6
105  const DCPS::NetworkAddress& ipv6_local_address() const;
106 #endif
107  const DCPS::NetworkAddress& multicast_group() const;
108 
109  void associate(DiscoveredParticipant& participant
110 #ifdef OPENDDS_SECURITY
111  , const DDS::Security::ParticipantSecurityAttributes& participant_sec_attr
112 #endif
113  );
115  bool ready(const DiscoveredParticipant& participant,
116  const GUID_t& local_id,
117  const GUID_t& remote_id,
118  bool local_tokens_sent) const;
121 
122 #ifdef OPENDDS_SECURITY
123  void disassociate_volatile(DiscoveredParticipant& participant);
124  void cleanup_volatile_crypto(const DCPS::GUID_t& remote);
125  void associate_volatile(DiscoveredParticipant& participant);
126 
127  void remove_remote_crypto_handle(const DCPS::GUID_t& participant, const EntityId_t& entity);
128 
129  void send_builtin_crypto_tokens(const DCPS::GUID_t& remoteId);
130 
131  /// Create and send keys for individual endpoints.
132  void send_builtin_crypto_tokens(const DCPS::GUID_t& dst, const DCPS::GUID_t& src);
133 
134  void resend_user_crypto_tokens(const DCPS::GUID_t& remote_participant);
135 #endif
136 
137  void disassociate(DiscoveredParticipant& participant);
138 
139  void update_locators(const ParticipantData_t& pdata);
140 
141 #ifdef OPENDDS_SECURITY
143  const DCPS::GUID_t& reader);
144 
146  const DCPS::GUID_t& reader);
147 
149 
151  const DCPS::GUID_t& part);
152 #endif
153 
155 
156  // Topic
157  bool update_topic_qos(const DCPS::GUID_t& topicId, const DDS::TopicQos& qos);
158 
159  // Publication
160  bool update_publication_qos(const DCPS::GUID_t& publicationId,
161  const DDS::DataWriterQos& qos,
162  const DDS::PublisherQos& publisherQos);
163 
164  // Subscription
165  bool update_subscription_qos(const DCPS::GUID_t& subscriptionId,
166  const DDS::DataReaderQos& qos,
167  const DDS::SubscriberQos& subscriberQos);
168  bool update_subscription_params(const DCPS::GUID_t& subId,
169  const DDS::StringSeq& params);
170 
171  void association_complete_i(const DCPS::GUID_t& localId,
172  const DCPS::GUID_t& remoteId);
173 
174  void data_acked_i(const DCPS::GUID_t& local_id,
175  const DCPS::GUID_t& remote_id);
176 
179 
181  const DCPS::GUID_t& reader,
182  bool is_discovery_protected, bool send_get_types,
183  const SequenceNumber& seq_num);
184 
185 #ifdef OPENDDS_SECURITY
187 #endif
188 
190 
191  void rtps_relay_only_now(bool f);
192  void use_rtps_relay_now(bool f);
193  void use_ice_now(bool f);
194  void rtps_relay_address(const ACE_INET_Addr& address);
195  void stun_server_address(const ACE_INET_Addr& address);
196 
198 
200 
202 
203  void ignore(const GUID_t& to_ignore);
204 
205  bool ignoring(const GUID_t& guid) const
206  {
207  return ignored_guids_.count(guid);
208  }
209  bool ignoring(const char* topic_name) const
210  {
211  return ignored_topics_.count(topic_name);
212  }
213 
215  GUID_t& topicId, const char* topicName,
216  const char* dataTypeName, const DDS::TopicQos& qos,
217  bool hasDcpsKey, DCPS::TopicCallbacks* topic_callbacks);
218 
220  const char* topicName,
221  CORBA::String_out dataTypeName,
222  DDS::TopicQos_out qos,
223  GUID_t& topicId);
224 
225  DCPS::TopicStatus remove_topic(const GUID_t& topicId);
226 
228  const GUID_t& topicId,
229  DCPS::DataWriterCallbacks_rch publication,
230  const DDS::DataWriterQos& qos,
231  const DCPS::TransportLocatorSeq& transInfo,
232  const DDS::PublisherQos& publisherQos,
233  const XTypes::TypeInformation& type_info);
234 
235  void remove_publication(const GUID_t& publicationId);
236 
237  void update_publication_locators(const GUID_t& publicationId,
238  const DCPS::TransportLocatorSeq& transInfo);
239 
241  const GUID_t& topicId,
242  DCPS::DataReaderCallbacks_rch subscription,
243  const DDS::DataReaderQos& qos,
244  const DCPS::TransportLocatorSeq& transInfo,
245  const DDS::SubscriberQos& subscriberQos,
246  const char* filterClassName,
247  const char* filterExpr,
248  const DDS::StringSeq& params,
249  const XTypes::TypeInformation& type_info);
250 
251  void remove_subscription(const GUID_t& subscriptionId);
252 
253  void update_subscription_locators(const GUID_t& subscriptionId,
254  const DCPS::TransportLocatorSeq& transInfo);
255 
256 #ifdef OPENDDS_SECURITY
258  {
259  return handle_registry_;
260  }
261 #endif
262 
264 
266  const GUID_t& remote_entity, const XTypes::TypeInformation& remote_type_info,
267  DCPS::TypeObjReqCond& cond);
268 
269 private:
271  GUID_tKeyLessThan) DiscoveredSubscriptionMap;
272  typedef DiscoveredSubscriptionMap::iterator DiscoveredSubscriptionIter;
273 
275  GUID_tKeyLessThan) DiscoveredPublicationMap;
276  typedef DiscoveredPublicationMap::iterator DiscoveredPublicationIter;
277 
279 
280  bool remote_knows_about_local_i(const GUID_t& local, const GUID_t& remote) const;
281 #ifdef OPENDDS_SECURITY
282  bool remote_is_authenticated_i(const GUID_t& local, const GUID_t& remote, const DiscoveredParticipant& participant) const;
283  bool local_has_remote_participant_token_i(const GUID_t& local, const GUID_t& remote) const;
284  bool remote_has_local_participant_token_i(const GUID_t& local, const GUID_t& remote, const DiscoveredParticipant& participant) const;
285  bool local_has_remote_endpoint_token_i(const GUID_t& local, const GUID_t& remote) const;
286  bool remote_has_local_endpoint_token_i(const GUID_t& local, bool local_tokens_sent,
287  const GUID_t& remote) const;
288 #endif
289 
291  {
294  DCPS::make_rch<EndpointManagerSporadic>(TheServiceParticipant->time_source(), reactor_interceptor,
296  }
297  }
298 
300  {
304  }
305  }
306 
307  void purge_dead_topic(const String& topic_name)
308  {
309  DCPS::TopicDetailsMap::iterator top_it = topics_.find(topic_name);
310  topic_names_.erase(top_it->second.topic_id());
311  topics_.erase(top_it);
312  }
313 
314 #ifdef OPENDDS_SECURITY
315  void cleanup_secure_writer(const GUID_t& publicationId);
316  void cleanup_secure_reader(const GUID_t& subscriptionId);
317 #endif
318 
320  GUID_tKeyLessThan) LocalPublicationMap;
321  typedef LocalPublicationMap::iterator LocalPublicationIter;
322  typedef LocalPublicationMap::const_iterator LocalPublicationCIter;
323 
325  GUID_tKeyLessThan) LocalSubscriptionMap;
326  typedef LocalSubscriptionMap::iterator LocalSubscriptionIter;
327  typedef LocalSubscriptionMap::const_iterator LocalSubscriptionCIter;
328 
329  typedef OPENDDS_MAP_CMP(GUID_t, String, GUID_tKeyLessThan) TopicNameMap;
330 
332  GUID_t participant; // Guid of remote participant
334  SequenceNumber seq_number; // Of the original request
335  bool secure; // Communicate via secure endpoints or not
337  };
338 
339  // Map from the sequence number of the most recent request for a type to its TypeIdentifier
340  // and the sequence number of the first request sent for that type. Every time a new request
341  // is sent for a type, a new entry must be stored.
342  typedef OPENDDS_MAP(SequenceNumber, TypeIdOrigSeqNumber) OrigSeqNumberMap;
343 
345  public:
346  Endpoint(const DCPS::GUID_t& repo_id, Sedp& sedp)
347  : repo_id_(repo_id)
348  , sedp_(sedp)
349  , shutting_down_(false)
350 #ifdef OPENDDS_SECURITY
351  , participant_crypto_handle_(DDS::HANDLE_NIL)
352  , endpoint_crypto_handle_(DDS::HANDLE_NIL)
353 #endif
354  {}
355 
356  virtual ~Endpoint();
357 
358  // Implementing TransportClient
360  {
361  return true;
362  }
363 
365  {
366  return repo_id_;
367  }
368 
370  {
371  return 0; // not used for SEDP
372  }
373 
375  {
376  return 0;
377  }
378 
381 
382 #ifdef OPENDDS_SECURITY
385  {
386  participant_crypto_handle_ = p;
387  endpoint_crypto_handle_ = e;
388  }
389 
391  {
392  return participant_crypto_handle_;
393  }
394 
396  {
397  return endpoint_crypto_handle_;
398  }
399 #endif
400 
401  void shutting_down() { shutting_down_ = true; }
402 
403  // Return instance_name field in RPC type lookup request for a given GUID_t
404  // (as per chapter 7.6.3.3.4 of XTypes spec)
406  {
407  const DCPS::GUID_t participant = make_id(id, ENTITYID_PARTICIPANT);
408  return OPENDDS_STRING("dds.builtin.TOS.") +
409  DCPS::to_hex_dds_string(&participant.guidPrefix[0], sizeof(DCPS::GuidPrefix_t)) +
410  DCPS::to_hex_dds_string(&participant.entityId.entityKey[0], sizeof(DCPS::EntityKey_t)) +
411  DCPS::to_dds_string(unsigned(participant.entityId.entityKind), true);
412  }
413 
414  EntityId_t counterpart_entity_id() const;
415  GUID_t make_counterpart_guid(const DCPS::GUID_t& remote_part) const;
416  bool associated_with_counterpart(const DCPS::GUID_t& remote_part) const;
417  bool pending_association_with_counterpart(const DCPS::GUID_t& remote_part) const;
418  bool associated_with_counterpart_if_not_pending(const DCPS::GUID_t& remote_part) const;
419 
420  RcHandle<DCPS::BitSubscriber> get_builtin_subscriber_proxy() const;
421 
422  protected:
426 #ifdef OPENDDS_SECURITY
429 #endif
430  };
431 
432  class Writer : public DCPS::TransportSendListener, public Endpoint {
433  public:
434  Writer(const DCPS::GUID_t& pub_id, Sedp& sedp, ACE_INT64 seq_init = 1);
435  virtual ~Writer();
436 
437  bool assoc(const DCPS::AssociationData& subscription);
438  void transport_assoc_done(int flags, const DCPS::GUID_t& remote);
439 
440  // Implementing TransportSendListener
441  void data_delivered(const DCPS::DataSampleElement*);
442 
443  void data_dropped(const DCPS::DataSampleElement*, bool by_transport);
444 
445  void data_acked(const GUID_t& remote);
446 
447 
448  void control_delivered(const DCPS::Message_Block_Ptr& sample);
449 
450  void control_dropped(const DCPS::Message_Block_Ptr& sample,
451  bool dropped_by_transport);
452 
457  void replay_durable_data_for(const DCPS::GUID_t& remote_sub_id);
459 
461  {
462  return seq_;
463  }
464 
465  DDS::ReturnCode_t write_parameter_list(const ParameterList& plist,
466  const DCPS::GUID_t& reader,
467  DCPS::SequenceNumber& sequence);
468 
469  void end_historic_samples(const DCPS::GUID_t& reader);
470  void request_ack(const DCPS::GUID_t& reader);
471 
472  void send_deferred_samples(const GUID_t& reader);
473 
474  protected:
476  PerReaderDeferredSamples;
477  typedef OPENDDS_MAP(GUID_t, PerReaderDeferredSamples) DeferredSamples;
478  DeferredSamples deferred_samples_;
479 
480  void send_sample(DCPS::Message_Block_Ptr payload,
481  size_t size,
482  const DCPS::GUID_t& reader,
483  DCPS::SequenceNumber& sequence,
484  bool historic = false);
485 
486  void send_sample_i(DCPS::DataSampleElement* el);
487 
488  void set_header_fields(DCPS::DataSampleHeader& dsh,
489  size_t size,
490  const DCPS::GUID_t& reader,
491  DCPS::SequenceNumber& sequence,
492  bool historic_sample = false,
494 
495  void write_control_msg(DCPS::Message_Block_Ptr payload,
496  size_t size,
497  DCPS::MessageId id,
499 
500  virtual bool deferrable() const
501  {
502  return false;
503  }
504 
506  };
507 
508  class SecurityWriter : public Writer {
509  public:
510  SecurityWriter(const DCPS::GUID_t& pub_id, Sedp& sedp, ACE_INT64 seq_init = 1)
511  : Writer(pub_id, sedp, seq_init)
512  {}
513 
514  virtual ~SecurityWriter();
515 
516 #ifdef OPENDDS_SECURITY
518  const DCPS::GUID_t& reader,
519  DCPS::SequenceNumber& sequence);
520 
521  DDS::ReturnCode_t write_volatile_message_secure(const DDS::Security::ParticipantVolatileMessageSecure& msg,
522  const DCPS::GUID_t& reader,
523  DCPS::SequenceNumber& sequence);
524 #endif
525  };
526 
528 
529 
530  class LivelinessWriter : public Writer {
531  public:
532  LivelinessWriter(const DCPS::GUID_t& pub_id, Sedp& sedp, ACE_INT64 seq_init = 1)
533  : Writer(pub_id, sedp, seq_init)
534  {}
535 
536  virtual ~LivelinessWriter();
537 
538  DDS::ReturnCode_t write_participant_message(const ParticipantMessageData& pmd,
539  const DCPS::GUID_t& reader,
540  DCPS::SequenceNumber& sequence);
541  };
542 
544 
545  class DiscoveryWriter : public Writer {
546  public:
547  DiscoveryWriter(const DCPS::GUID_t& pub_id, Sedp& sedp, ACE_INT64 seq_init = 1)
548  : Writer(pub_id, sedp, seq_init)
549  {}
550 
551  virtual ~DiscoveryWriter();
552 
553 #ifdef OPENDDS_SECURITY
555  const DCPS::GUID_t& reader, DCPS::SequenceNumber& sequence);
556 #endif
557 
558  DDS::ReturnCode_t write_unregister_dispose(const DCPS::GUID_t& rid, CORBA::UShort pid = PID_ENDPOINT_GUID);
559  };
560 
562 
564  public:
565  TypeLookupRequestWriter(const DCPS::GUID_t& pub_id, Sedp& sedp, ACE_INT64 seq_init = 1)
566  : Writer(pub_id, sedp, seq_init)
567  {}
568 
569  virtual ~TypeLookupRequestWriter();
570 
572  const XTypes::TypeIdentifierSeq& type_ids,
573  const DCPS::GUID_t& reader,
574  const DCPS::SequenceNumber& rpc_sequence,
575  CORBA::Long tl_kind);
576 
577  protected:
578  virtual bool deferrable() const
579  {
580  return true;
581  }
582  };
583 
585 
586  class TypeLookupReplyWriter : public Writer {
587  public:
588  TypeLookupReplyWriter(const DCPS::GUID_t& pub_id, Sedp& sedp, ACE_INT64 seq_init = 1)
589  : Writer(pub_id, sedp, seq_init)
590  {}
591 
592  virtual ~TypeLookupReplyWriter();
593 
594  bool send_type_lookup_reply(
595  XTypes::TypeLookup_Reply& type_lookup_reply,
596  const DCPS::GUID_t& reader);
597 
598  protected:
599  virtual bool deferrable() const
600  {
601  return true;
602  }
603  };
604 
606 
607  class Reader
609  , public Endpoint
610  {
611  public:
612  Reader(const DCPS::GUID_t& sub_id, Sedp& sedp)
613  : Endpoint(sub_id, sedp)
614  , mb_alloc_(DCPS::DEFAULT_TRANSPORT_RECEIVE_BUFFERS)
615  {}
616 
617  virtual ~Reader();
618 
619  bool assoc(const DCPS::AssociationData& publication);
620 
621  // Implementing TransportReceiveListener
622 
623  void data_received(const DCPS::ReceivedDataSample& sample);
624 
629 
630  private:
631  virtual void data_received_i(const DCPS::ReceivedDataSample& sample,
632  const DCPS::EntityId_t& entity_id,
633  DCPS::Serializer& ser,
635 
637  };
638 
640 
641  class DiscoveryReader : public Reader {
642  public:
643  DiscoveryReader(const DCPS::GUID_t& sub_id, Sedp& sedp)
644  : Reader(sub_id, sedp)
645  {}
646 
647  virtual ~DiscoveryReader();
648 
649  private:
650  virtual void data_received_i(const DCPS::ReceivedDataSample& sample,
651  const DCPS::EntityId_t& entity_id,
652  DCPS::Serializer& ser,
654  };
655 
657 
658  class LivelinessReader : public Reader {
659  public:
660  LivelinessReader(const DCPS::GUID_t& sub_id, Sedp& sedp)
661  : Reader(sub_id, sedp)
662  {}
663 
664  virtual ~LivelinessReader();
665 
666  private:
667  virtual void data_received_i(const DCPS::ReceivedDataSample& sample,
668  const DCPS::EntityId_t& entity_id,
669  DCPS::Serializer& ser,
671  };
672 
674 
675  class SecurityReader : public Reader {
676  public:
677  SecurityReader(const DCPS::GUID_t& sub_id, Sedp& sedp)
678  : Reader(sub_id, sedp)
679  {}
680 
681  virtual ~SecurityReader();
682 
683  private:
684  virtual void data_received_i(const DCPS::ReceivedDataSample& sample,
685  const DCPS::EntityId_t& entity_id,
686  DCPS::Serializer& ser,
688  };
689 
691 
693  public:
695  : Reader(sub_id, sedp)
696  {
697  instance_name_ = get_instance_name(sub_id);
698  }
699 
700  virtual ~TypeLookupRequestReader();
701 
702  private:
703  virtual void data_received_i(const DCPS::ReceivedDataSample& sample,
704  const DCPS::EntityId_t& entity_id,
705  DCPS::Serializer& ser,
707 
708  bool process_type_lookup_request(DCPS::Serializer& ser,
709  XTypes::TypeLookup_Reply& type_lookup_reply);
710 
711  bool process_get_types_request(const XTypes::TypeLookup_Request& type_lookup_request,
712  XTypes::TypeLookup_Reply& type_lookup_reply);
713 
714  bool process_get_dependencies_request(const XTypes::TypeLookup_Request& request,
715  XTypes::TypeLookup_Reply& reply);
716 
717  void gen_continuation_point(XTypes::OctetSeq32& cont_point) const;
718 
719  // The instance name of the local participant
721  };
722 
724 
725  class TypeLookupReplyReader : public Reader {
726  public:
728  : Reader(sub_id, sedp)
729  {}
730 
731  virtual ~TypeLookupReplyReader();
732 
733  void get_continuation_point(const GUID_t& guid,
734  const XTypes::TypeIdentifier& remote_ti,
735  XTypes::OctetSeq32& cont_point) const;
736 
737  void cleanup(const DCPS::GUID_t& guid, const XTypes::TypeIdentifier& ti);
738 
739  private:
740  virtual void data_received_i(const DCPS::ReceivedDataSample& sample,
741  const DCPS::EntityId_t& entity_id,
742  DCPS::Serializer& ser,
744 
745  bool process_type_lookup_reply(
746  const DCPS::ReceivedDataSample&, DCPS::Serializer& ser, bool is_discovery_protected);
747  bool process_get_types_reply(const XTypes::TypeLookup_Reply& reply);
748  bool process_get_dependencies_reply(
749  const DCPS::ReceivedDataSample& sample, const XTypes::TypeLookup_Reply& reply,
750  const DCPS::SequenceNumber& seq_num, bool is_discovery_protected);
751 
752  typedef std::pair<XTypes::OctetSeq32, XTypes::TypeIdentifierSeq> ContinuationPair;
753 
754  // Map from each remote type to the most recent continuation_point
755  // and all dependencies received for that type so far.
756  typedef OPENDDS_MAP(XTypes::TypeIdentifier, ContinuationPair) RemoteDependencies;
757 
758  // Map from each remote participant to the data stored for its types.
759  typedef OPENDDS_MAP_CMP(GUID_t, RemoteDependencies, GUID_tKeyLessThan) DependenciesMap;
760  DependenciesMap dependencies_;
761  };
762 
764 
765  void cleanup_type_lookup_data(const DCPS::GUID_t& guid,
766  const XTypes::TypeIdentifier& ti,
767  bool secure);
768 
769  // Transport
775 
778  const DCPS::GUID_t& publication_id,
779  const LocalPublication& pub);
780 
783  const DCPS::GUID_t& subscription_id,
784  const LocalSubscription& sub);
785 
787  const DCPS::DiscoveredWriterData& wdata,
788  const DCPS::GUID_t& guid,
789  const XTypes::TypeInformation& type_info
790 #ifdef OPENDDS_SECURITY
791  ,
792  bool have_ice_agent_info,
793  const ICE::AgentInfo& ice_agent_info,
794  const DDS::Security::EndpointSecurityInfo* security_info = NULL
795 #endif
796  );
797 
798  void data_received(DCPS::MessageId message_id,
799  const DiscoveredPublication& wdata);
800 
801 #ifdef OPENDDS_SECURITY
802  void data_received(DCPS::MessageId message_id,
804 #endif
805 
807  const DCPS::DiscoveredReaderData& rdata,
808  const DCPS::GUID_t& guid,
809  const XTypes::TypeInformation& type_info
810 #ifdef OPENDDS_SECURITY
811  ,
812  bool have_ice_agent_info,
813  const ICE::AgentInfo& ice_agent_info,
814  const DDS::Security::EndpointSecurityInfo* security_info = NULL
815 #endif
816  );
817 
818  void data_received(DCPS::MessageId message_id,
819  const DiscoveredSubscription& rdata);
820 
821 #ifdef OPENDDS_SECURITY
822  void data_received(DCPS::MessageId message_id,
824 #endif
825 
826  /// This is a function to unify the notification of liveliness within RTPS
827  /// The local participant map is checked for associated entities and then they are notified
828  /// of liveliness if their QoS is compatible
829  void notify_liveliness(const ParticipantMessageData& pmd);
830 
831  void data_received(DCPS::MessageId message_id,
832  const ParticipantMessageData& data);
833 
834 #ifdef OPENDDS_SECURITY
836  const ParticipantMessageData& data);
837 
840  bool should_drop_message(const char* unsecure_topic_name);
841 
844 
847 #endif
848 
851 
852  template<typename Map>
853  void remove_entities_belonging_to(Map& m, DCPS::GUID_t participant, bool subscription, OPENDDS_VECTOR(typename Map::mapped_type)& to_remove_from_bit);
854 
855  void remove_from_bit_i(const DiscoveredPublication& pub);
856  void remove_from_bit_i(const DiscoveredSubscription& sub);
857 
858  virtual DDS::ReturnCode_t remove_publication_i(const DCPS::GUID_t& publicationId, LocalPublication& pub);
859  virtual DDS::ReturnCode_t remove_subscription_i(const DCPS::GUID_t& subscriptionId, LocalSubscription& sub);
860 
861  // Topic:
862 
863  // FURTURE: Remove this member.
864  DCPS::RepoIdSet associated_participants_;
865 
866  virtual bool shutting_down() const;
867 
869  DiscoveredSubscriptionIter& iter,
870  const DCPS::GUID_t& reader);
871 
873  DiscoveredPublicationIter& iter,
874  const DCPS::GUID_t& writer);
875 
876  static void set_inline_qos(DCPS::TransportLocatorSeq& locators);
877 
878  void write_durable_publication_data(const DCPS::GUID_t& reader, bool secure);
879  void write_durable_subscription_data(const DCPS::GUID_t& reader, bool secure);
880 
882 
883 #ifdef OPENDDS_SECURITY
885 #endif
886 
888  LocalPublication& pub);
889 
891  LocalPublication& pub,
892  const DCPS::GUID_t& reader = GUID_UNKNOWN);
893 
894 #ifdef OPENDDS_SECURITY
896  LocalPublication& pub,
897  const DCPS::GUID_t& reader = GUID_UNKNOWN);
898 #endif
899 
901  LocalPublication& pub,
902  const DCPS::GUID_t& reader = GUID_UNKNOWN);
903 
905  LocalSubscription& sub);
906 
907 
909  LocalSubscription& sub,
910  const DCPS::GUID_t& reader = GUID_UNKNOWN);
911 
912 #ifdef OPENDDS_SECURITY
914  LocalSubscription& sub,
915  const DCPS::GUID_t& reader = GUID_UNKNOWN);
916 #endif
917 
919  LocalSubscription& sub,
920  const DCPS::GUID_t& reader = GUID_UNKNOWN);
921 
924  const DCPS::GUID_t& reader = GUID_UNKNOWN);
925 #ifdef OPENDDS_SECURITY
928  const DCPS::GUID_t& reader = GUID_UNKNOWN);
929 #endif
930 
931  virtual bool is_expectant_opendds(const GUID_t& endpoint) const;
932 
933 protected:
934 #ifdef OPENDDS_SECURITY
937  const DCPS::GUID_t& reader);
940  const DCPS::GUID_t& writer,
941  bool relay_only);
942 
948  const DCPS::GUID_t& local_reader,
949  const DCPS::GUID_t& remote_writer,
952  const DDS::Security::DatareaderCryptoHandle& drch, const DCPS::GUID_t& local_reader,
953  const DDS::Security::DatawriterCryptoHandle& dwch, const DCPS::GUID_t& remote_writer);
954 
960  const DCPS::GUID_t& local_writer,
961  const DCPS::GUID_t& remote_reader,
964  const DDS::Security::DatawriterCryptoHandle& dwch, const DCPS::GUID_t& local_writer,
965  const DDS::Security::DatareaderCryptoHandle& drch, const DCPS::GUID_t& remote_reader);
966 
969 
971 
973  {
975  PublicationAgentInfoListener(Sedp& a_sedp) : sedp(a_sedp) {}
976  void update_agent_info(const DCPS::GUID_t& a_local_guid,
977  const ICE::AgentInfo& a_agent_info);
978  void remove_agent_info(const DCPS::GUID_t& a_local_guid);
979  };
980 
982  {
984  SubscriptionAgentInfoListener(Sedp& a_sedp) : sedp(a_sedp) {}
985  void update_agent_info(const DCPS::GUID_t& a_local_guid,
986  const ICE::AgentInfo& a_agent_info);
987  void remove_agent_info(const DCPS::GUID_t& a_local_guid);
988  };
989 
990 #endif
991 
992  void add_assoc_i(const DCPS::GUID_t& local_guid, const LocalPublication& lpub,
993  const DCPS::GUID_t& remote_guid, const DiscoveredSubscription& dsub);
994  void remove_assoc_i(const DCPS::GUID_t& local_guid, const LocalPublication& lpub,
995  const DCPS::GUID_t& remote_guid);
996  void add_assoc_i(const DCPS::GUID_t& local_guid, const LocalSubscription& lsub,
997  const DCPS::GUID_t& remote_guid, const DiscoveredPublication& dpub);
998  void remove_assoc_i(const DCPS::GUID_t& local_guid, const LocalSubscription& lsub,
999  const DCPS::GUID_t& remote_guid);
1000  void start_ice(const DCPS::GUID_t& guid, const LocalPublication& lpub);
1001  void start_ice(const DCPS::GUID_t& guid, const LocalSubscription& lsub);
1002  void start_ice(const DCPS::GUID_t& guid, const DiscoveredPublication& dpub);
1003  void start_ice(const DCPS::GUID_t& guid, const DiscoveredSubscription& dsub);
1004  void stop_ice(const DCPS::GUID_t& guid, const DiscoveredPublication& dpub);
1005  void stop_ice(const DCPS::GUID_t& guid, const DiscoveredSubscription& dsub);
1006 
1007  void replay_durable_data_for(const DCPS::GUID_t& remote_sub_id);
1008 
1010  {
1011  return pub.writer_data_.ddsPublicationData.key;
1012  }
1014  {
1015  return sub.reader_data_.ddsSubscriptionData.key;
1016  }
1017 
1018  virtual void assign_publication_key(GUID_t& rid,
1019  const GUID_t& topicId,
1020  const DDS::DataWriterQos& /*qos*/)
1021  {
1022  rid.entityId.entityKind =
1023  has_dcps_key(topicId)
1027  }
1028  virtual void assign_subscription_key(GUID_t& rid,
1029  const GUID_t& topicId,
1030  const DDS::DataReaderQos& /*qos*/)
1031  {
1032  rid.entityId.entityKind =
1033  has_dcps_key(topicId)
1037  }
1038  virtual void assign_topic_key(GUID_t& guid)
1039  {
1041 
1042  if (topic_counter_ == 0x1000000) {
1044  ACE_TEXT("(%P|%t) ERROR: Sedp::assign_topic_key: ")
1045  ACE_TEXT("Exceeded Maximum number of topic entity keys!")
1046  ACE_TEXT("Next key will be a duplicate!\n")));
1047  topic_counter_ = 0;
1048  }
1049  }
1050 
1051  void match_endpoints(GUID_t repoId, const DCPS::TopicDetails& td,
1052  bool remove = false);
1053 
1054  void remove_assoc(const GUID_t& remove_from, const GUID_t& removing);
1055 
1056  struct MatchingData {
1058  : got_minimal(false), got_complete(false)
1059  {}
1060 
1061  /// Sequence number of the first request for remote minimal types.
1063 
1064  /// Whether all minimal types are obtained.
1066 
1067  /// Sequence number of the first request for remote complete types.
1068  /// Set to SEQUENCENUMBER_UNKNOWN if there is no such request.
1070 
1071  /// Whether all complete types are obtained.
1073 
1075  };
1076 
1077  struct MatchingPair : public DCPS::GuidPair {
1079  /**
1080  * This is used by get_dynamic_type on the service participant to wait for a
1081  * TypeObject request to complete. This is does not take ownership because
1082  * it should only be on the stack as the request should complete or fail
1083  * within the call to get_dynamic_type.
1084  */
1086 
1087  MatchingPair(const GUID_t& reader, const GUID_t writer, bool reader_is_local)
1088  : GuidPair(reader_is_local ? reader : writer, reader_is_local ? writer : reader)
1089  , local_is_reader(reader_is_local)
1090  , type_obj_req_cond(0)
1091  {
1092  }
1093 
1094  MatchingPair(const GUID_t& remote, bool remote_is_reader, DCPS::TypeObjReqCond* type_obj_req_cond)
1095  : GuidPair(GUID_UNKNOWN, remote)
1096  , local_is_reader(!remote_is_reader)
1097  , type_obj_req_cond(type_obj_req_cond)
1098  {
1099  }
1100 
1101  const GUID_t& reader() const
1102  {
1103  return local_is_reader ? local : remote;
1104  }
1105 
1106  const GUID_t& writer() const
1107  {
1108  return local_is_reader ? remote : local;
1109  }
1110 
1111  bool operator<(const MatchingPair& other) const
1112  {
1113  const int pair_cmp = cmp(other);
1114  return pair_cmp < 0 || (pair_cmp == 0 && type_obj_req_cond < other.type_obj_req_cond);
1115  }
1116  };
1117 
1118  typedef OPENDDS_MAP(MatchingPair, MatchingData) MatchingDataMap;
1119  typedef MatchingDataMap::iterator MatchingDataIter;
1120 
1122 
1123  void match(const GUID_t& writer, const GUID_t& reader);
1124 
1126  bool& need_minimal,
1127  bool& need_complete) const;
1128 
1129  void remove_expired_endpoints(const MonotonicTimePoint& /*now*/);
1130 
1131  void match_continue(const GUID_t& writer, const GUID_t& reader);
1132 
1133  void request_type_objects(const XTypes::TypeInformation* type_info,
1134  const MatchingPair& mp, bool is_discovery_protected, bool get_minimal, bool get_complete);
1135 
1137  MatchingData& md, bool get_minimal, const GUID_t& remote_id,
1138  bool is_discovery_protected);
1139 #ifdef OPENDDS_SECURITY
1141  const GUID_t& writer, const GUID_t& reader, bool call_writer, bool call_reader);
1142 #endif
1143 
1145  {
1146  remove_from_bit_i(pub);
1147  }
1148 
1150  {
1151  remove_from_bit_i(sub);
1152  }
1153 
1155  {
1156  GUID_t guid;
1157  guid = participant_id_;
1159  assign_topic_key(guid);
1160  return guid;
1161  }
1162 
1163  bool has_dcps_key(const GUID_t& topicId) const
1164  {
1166  TNMap::const_iterator tn = topic_names_.find(topicId);
1167  if (tn == topic_names_.end()) return false;
1168 
1169  DCPS::TopicDetailsMap::const_iterator td = topics_.find(tn->second);
1170  if (td == topics_.end()) return false;
1171 
1172  return td->second.has_dcps_key();
1173  }
1174 
1175 #ifdef OPENDDS_SECURITY
1176  inline bool is_security_enabled()
1177  {
1178  return (permissions_handle_ != DDS::HANDLE_NIL) && (access_control_ != 0);
1179  }
1180 
1182  {
1183  permissions_handle_ = h;
1184  }
1185 
1187  {
1188  return permissions_handle_;
1189  }
1190 
1191  inline void set_access_control(DDS::Security::AccessControl_var acl)
1192  {
1193  access_control_ = acl;
1194  }
1195 
1196  inline DDS::Security::AccessControl_var get_access_control() const
1197  {
1198  return access_control_;
1199  }
1200 
1201  inline void set_crypto_key_factory(DDS::Security::CryptoKeyFactory_var ckf)
1202  {
1203  crypto_key_factory_ = ckf;
1204  }
1205 
1206  inline DDS::Security::CryptoKeyFactory_var get_crypto_key_factory() const
1207  {
1208  return crypto_key_factory_;
1209  }
1210 
1211  inline void set_crypto_key_exchange(DDS::Security::CryptoKeyExchange_var ckf)
1212  {
1213  crypto_key_exchange_ = ckf;
1214  }
1215 
1216  inline DDS::Security::CryptoKeyExchange_var get_crypto_key_exchange() const
1217  {
1218  return crypto_key_exchange_;
1219  }
1220 
1222  {
1223  handle_registry_ = hr;
1224  }
1225 #endif
1226 
1232  LocalPublicationMap local_publications_;
1233  LocalSubscriptionMap local_subscriptions_;
1234  DiscoveredPublicationMap discovered_publications_;
1235  DiscoveredSubscriptionMap discovered_subscriptions_;
1236  DCPS::TopicDetailsMap topics_;
1237  TopicNameMap topic_names_;
1238  OPENDDS_SET(String) ignored_topics_;
1239  OPENDDS_SET_CMP(GUID_t, GUID_tKeyLessThan) relay_only_readers_;
1241  OrigSeqNumberMap orig_seq_numbers_;
1242  MatchingDataMap matching_data_buffer_;
1246  const bool use_xtypes_;
1248 
1249  // These are the last sequence numbers sent for the various "liveliness" instances.
1252 #ifdef OPENDDS_SECURITY
1255 
1257 
1258  DDS::Security::AccessControl_var access_control_;
1259  DDS::Security::CryptoKeyFactory_var crypto_key_factory_;
1260  DDS::Security::CryptoKeyExchange_var crypto_key_exchange_;
1262 
1265 
1267  DatareaderCryptoTokenSeqMap;
1268  DatareaderCryptoTokenSeqMap pending_remote_reader_crypto_tokens_;
1270  DatawriterCryptoTokenSeqMap;
1271  DatawriterCryptoTokenSeqMap pending_remote_writer_crypto_tokens_;
1272 
1274 #endif
1275 
1276  DiscoveryWriter_rch publications_writer_;
1277 #ifdef OPENDDS_SECURITY
1278  DiscoveryWriter_rch publications_secure_writer_;
1279 #endif
1280  DiscoveryWriter_rch subscriptions_writer_;
1281 #ifdef OPENDDS_SECURITY
1282  DiscoveryWriter_rch subscriptions_secure_writer_;
1283 #endif
1284  LivelinessWriter_rch participant_message_writer_;
1285 #ifdef OPENDDS_SECURITY
1288  DiscoveryWriter_rch dcps_participant_secure_writer_;
1289  friend class Spdp;
1291 #endif
1292  TypeLookupRequestWriter_rch type_lookup_request_writer_;
1293  TypeLookupReplyWriter_rch type_lookup_reply_writer_;
1294 #ifdef OPENDDS_SECURITY
1295  TypeLookupRequestWriter_rch type_lookup_request_secure_writer_;
1296  TypeLookupReplyWriter_rch type_lookup_reply_secure_writer_;
1297 #endif
1298  DiscoveryReader_rch publications_reader_;
1299 #ifdef OPENDDS_SECURITY
1300  DiscoveryReader_rch publications_secure_reader_;
1301 #endif
1302  DiscoveryReader_rch subscriptions_reader_;
1303 #ifdef OPENDDS_SECURITY
1304  DiscoveryReader_rch subscriptions_secure_reader_;
1305 #endif
1306  LivelinessReader_rch participant_message_reader_;
1307 #ifdef OPENDDS_SECURITY
1311  DiscoveryReader_rch dcps_participant_secure_reader_;
1312 #endif
1313  TypeLookupRequestReader_rch type_lookup_request_reader_;
1314  TypeLookupReplyReader_rch type_lookup_reply_reader_;
1315 #ifdef OPENDDS_SECURITY
1316  TypeLookupRequestReader_rch type_lookup_request_secure_reader_;
1317  TypeLookupReplyReader_rch type_lookup_reply_secure_reader_;
1318 #endif
1319 
1320 #ifdef OPENDDS_SECURITY
1324 #endif
1325 
1327  const GUID_t& writer,
1328  const GUID_t& reader);
1329 
1331  const GUID_t& reader,
1332  const GUID_t& writer);
1333 
1334 
1336  public:
1338  : record_(record)
1339  {}
1340 
1341  private:
1342  virtual void handle_event();
1343 
1345  };
1346 
1348  public:
1350  : record_(record)
1351  {}
1352 
1353  private:
1354  virtual void handle_event();
1355 
1357  };
1358 
1360  public:
1362  : record_(record)
1363  {}
1364 
1365  private:
1366  virtual void handle_event();
1367 
1369  };
1370 
1372  public:
1374  : record_(record)
1375  {}
1376 
1377  private:
1378  virtual void handle_event();
1379 
1381  };
1382 
1383 };
1384 
1385 bool locators_changed(const ParticipantProxy_t& x,
1386  const ParticipantProxy_t& y);
1387 
1388 }
1389 }
1390 
1392 
1393 #endif // OPENDDS_RTPS_SEDP_H
void notify_publication_disconnected(const DCPS::ReaderIdSeq &)
Definition: Sedp.h:453
void remove_from_bit(const DiscoveredSubscription &sub)
Definition: Sedp.h:1149
DiscoveryWriter_rch dcps_participant_secure_writer_
Definition: Sedp.h:1288
TimeDuration max_type_lookup_service_reply_period_
Definition: Sedp.h:1244
DCPS::GUID_t get_guid() const
Definition: Sedp.h:364
DDS::ReturnCode_t write_stateless_message(const DDS::Security::ParticipantStatelessMessage &msg, const DCPS::GUID_t &reader)
Definition: Sedp.cpp:4758
const WriterAssociationRecord_rch record_
Definition: Sedp.h:1344
DiscoveryReader_rch subscriptions_secure_reader_
Definition: Sedp.h:1304
DDS::Security::ParticipantSecurityAttributes participant_sec_attr_
Definition: Sedp.h:1256
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310
ACE_CDR::Long Long
ACE_Thread_Mutex & lock_
Definition: Sedp.h:1228
RcHandle< DCPS::TransportInst > transport_inst() const
Definition: Sedp.h:263
#define ACE_ERROR(X)
LivelinessWriter(const DCPS::GUID_t &pub_id, Sedp &sedp, ACE_INT64 seq_init=1)
Definition: Sedp.h:532
bool send_type_lookup_request(const XTypes::TypeIdentifierSeq &type_ids, const DCPS::GUID_t &reader, bool is_discovery_protected, bool send_get_types, const SequenceNumber &seq_num)
Definition: Sedp.cpp:3064
DDS::ReturnCode_t write_dcps_participant_dispose(const DCPS::GUID_t &part)
Definition: Sedp.cpp:4799
DDS::ReturnCode_t write_participant_message_data(const DCPS::GUID_t &rid, DCPS::SequenceNumber &sn, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:5110
DiscoveryWriter_rch publications_secure_writer_
Definition: Sedp.h:1278
DCPS::RcHandle< TypeLookupReplyReader > TypeLookupReplyReader_rch
Definition: Sedp.h:763
void create_datareader_crypto_tokens(const DDS::Security::DatareaderCryptoHandle &drch, const DDS::Security::DatawriterCryptoHandle &dwch, DDS::Security::DatareaderCryptoTokenSeq &drcts)
Definition: Sedp.cpp:5325
DDS::Security::PermissionsHandle get_permissions_handle() const
Definition: Sedp.h:1186
DCPS::RcHandle< DiscoveryWriter > DiscoveryWriter_rch
Definition: Sedp.h:561
const InstanceHandle_t HANDLE_NIL
std::string String
void populate_discovered_reader_msg(DCPS::DiscoveredReaderData &drd, const DCPS::GUID_t &subscription_id, const LocalSubscription &sub)
Definition: Sedp.cpp:4586
Base class to hold configuration settings for TransportImpls.
Definition: TransportInst.h:64
OPENDDS_SET(String) ignored_topics_
bool got_complete
Whether all complete types are obtained.
Definition: Sedp.h:1072
const GUID_t & reader() const
Definition: Sedp.h:1101
DCPS::TransportMessageBlockAllocator mb_alloc_
Definition: Sedp.h:636
DCPS::TransportConfig_rch transport_cfg_
Definition: Sedp.h:771
void cleanup_secure_reader(const GUID_t &subscriptionId)
Definition: Sedp.cpp:6644
const DCPS::SequenceNumber & get_seq() const
Definition: Sedp.h:460
DDS::ReturnCode_t write_volatile_message(DDS::Security::ParticipantVolatileMessageSecure &msg, const DCPS::GUID_t &reader)
Definition: Sedp.cpp:4766
DDS::ReturnCode_t write_publication_data_unsecure(const DCPS::GUID_t &rid, LocalPublication &pub, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:4854
bool locators_changed(const ParticipantProxy_t &x, const ParticipantProxy_t &y)
Definition: Sedp.cpp:5982
DiscoveredSubscriptionMap discovered_subscriptions_
Definition: Sedp.h:1235
static DDS::BuiltinTopicKey_t get_key(const DiscoveredPublication &pub)
Definition: Sedp.h:1009
const DCPS::NetworkAddress & multicast_group() const
Definition: Sedp.cpp:946
TypeLookupReplyWriter_rch type_lookup_reply_writer_
Definition: Sedp.h:1293
void set_handle_registry(const Security::HandleRegistry_rch &hr)
Definition: Sedp.h:1221
bool ready(const DiscoveredParticipant &participant, const GUID_t &local_id, const GUID_t &remote_id, bool local_tokens_sent) const
Definition: Sedp.cpp:1022
bool remote_has_local_endpoint_token_i(const GUID_t &local, bool local_tokens_sent, const GUID_t &remote) const
Definition: Sedp.cpp:6581
LocalSubscriptionMap local_subscriptions_
Definition: Sedp.h:1233
virtual bool is_expectant_opendds(const GUID_t &endpoint) const
Definition: Sedp.cpp:2912
DCPS::TransportInst_rch transport_inst_
Definition: Sedp.h:770
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59
void rtps_relay_only_now(bool f)
Definition: Sedp.cpp:5905
DiscoveredSubscriptionMap::iterator DiscoveredSubscriptionIter
Definition: Sedp.h:272
DDS::ReturnCode_t add_publication_i(const DCPS::GUID_t &rid, LocalPublication &pub)
Definition: Sedp.cpp:4806
CORBA::Long get_priority_value(const DCPS::AssociationData &) const
Definition: Sedp.h:374
String to_dds_string(unsigned short to_convert)
DiscoveryReader_rch publications_secure_reader_
Definition: Sedp.h:1300
DDS::Security::ParticipantCryptoHandle participant_crypto_handle_
Definition: Sedp.h:427
RepoIdSet ignored_guids_
Definition: Sedp.h:1230
SecurityReader(const DCPS::GUID_t &sub_id, Sedp &sedp)
Definition: Sedp.h:677
TypeLookupRequestWriter_rch type_lookup_request_secure_writer_
Definition: Sedp.h:1295
void generate_remote_matched_crypto_handles(DiscoveredParticipant &participant)
Definition: Sedp.cpp:1334
void received_stateless_message(DCPS::MessageId message_id, const DDS::Security::ParticipantStatelessMessage &data)
Definition: Sedp.cpp:2846
SequenceNumber rpc_seqnum_complete
Definition: Sedp.h:1069
void process_association_records_i(DiscoveredParticipant &participant)
Definition: Sedp.cpp:1264
GuidSet RepoIdSet
Definition: GuidUtils.h:113
DDS::ReturnCode_t init(const DCPS::GUID_t &guid, const RtpsDiscovery &disco, DDS::DomainId_t domainId, XTypes::TypeLookupService_rch tls)
Definition: Sedp.cpp:378
MatchingDataMap matching_data_buffer_
Definition: Sedp.h:1242
DCPS::TopicStatus remove_topic(const GUID_t &topicId)
Definition: Sedp.cpp:6105
virtual bool deferrable() const
Definition: Sedp.h:599
DDS::Security::ParticipantCryptoHandle crypto_handle_
Definition: Sedp.h:1264
DCPS::TopicDetailsMap topics_
Definition: Sedp.h:1236
DCPS::RcHandle< TypeLookupReplyWriter > TypeLookupReplyWriter_rch
Definition: Sedp.h:605
void update_publication_locators(const GUID_t &publicationId, const DCPS::TransportLocatorSeq &transInfo)
Definition: Sedp.cpp:6245
void notify_publication_lost(const DCPS::ReaderIdSeq &)
Definition: Sedp.h:455
sequence< Locator_t > LocatorSeq
DCPS::RcHandle< DiscoveryReader > DiscoveryReader_rch
Definition: Sedp.h:656
XTypes::TypeLookupService_rch type_lookup_service_
Definition: Sedp.h:1240
DDS::Security::CryptoKeyExchange_var crypto_key_exchange_
Definition: Sedp.h:1260
void received_participant_message_data_secure(DCPS::MessageId message_id, const ParticipantMessageData &data)
Definition: Sedp.cpp:2729
bool should_drop_stateless_message(const DDS::Security::ParticipantGenericMessage &msg)
Definition: Sedp.cpp:2752
DCPS::SequenceNumber type_lookup_service_sequence_number_
Definition: Sedp.h:1245
DiscoveryReader_rch subscriptions_reader_
Definition: Sedp.h:1302
key GuidPrefix_t guidPrefix
Definition: DdsDcpsGuid.idl:58
octet EntityKey_t[3]
Definition: DdsDcpsGuid.idl:22
sequence< TransportLocator > TransportLocatorSeq
void match_endpoints(GUID_t repoId, const DCPS::TopicDetails &td, bool remove=false)
Definition: Sedp.cpp:6673
DDS::Security::CryptoKeyFactory_var get_crypto_key_factory() const
Definition: Sedp.h:1206
std::pair< XTypes::OctetSeq32, XTypes::TypeIdentifierSeq > ContinuationPair
Definition: Sedp.h:752
void remove_from_bit_i(const DiscoveredPublication &pub)
Definition: Sedp.cpp:1828
Security::HandleRegistry_rch get_handle_registry() const
Definition: Sedp.h:257
typedef OPENDDS_MAP(SequenceNumber, TypeIdOrigSeqNumber) OrigSeqNumberMap
void set_access_control(DDS::Security::AccessControl_var acl)
Definition: Sedp.h:1191
void disassociate(const GUID_t &peerId)
DDS::ReturnCode_t write_publication_data_secure(const DCPS::GUID_t &rid, LocalPublication &pub, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:4904
DDS::PublicationBuiltinTopicData ddsPublicationData
void retrieve_inline_qos_data(InlineQosData &) const
Definition: Sedp.h:458
void remove_assoc(const GUID_t &remove_from, const GUID_t &removing)
Definition: Sedp.cpp:6790
bool remote_is_authenticated_i(const GUID_t &local, const GUID_t &remote, const DiscoveredParticipant &participant) const
Definition: Sedp.cpp:6455
DDS::SubscriptionBuiltinTopicData ddsSubscriptionData
Security::HandleRegistry_rch handle_registry_
Definition: Sedp.h:1261
Sedp(const DCPS::GUID_t &participant_id, Spdp &owner, ACE_Thread_Mutex &lock)
Definition: Sedp.cpp:283
void write_durable_dcps_participant_secure(const DCPS::GUID_t &reader)
Definition: Sedp.cpp:4775
DCPS::DiscoveredWriterData writer_data_
void cleanup_volatile_crypto(const DCPS::GUID_t &remote)
Definition: Sedp.cpp:1379
DCPS::JobQueue_rch job_queue_
Definition: Sedp.h:773
ReaderAddAssociation(const ReaderAssociationRecord_rch &record)
Definition: Sedp.h:1361
const bool use_xtypes_
Definition: Sedp.h:1246
void type_lookup_fini()
Definition: Sedp.h:299
DDS::ReturnCode_t add_subscription_i(const DCPS::GUID_t &rid, LocalSubscription &sub)
Definition: Sedp.cpp:4958
DCPS::RcHandle< SecurityWriter > SecurityWriter_rch
Definition: Sedp.h:527
unsigned int subscription_counter_
Definition: Sedp.h:1231
DCPS::EventDispatcher_rch event_dispatcher_
Definition: Sedp.h:774
MessageId
One byte message id (<256)
virtual void assign_topic_key(GUID_t &guid)
Definition: Sedp.h:1038
LocalSubscriptionMap::const_iterator LocalSubscriptionCIter
Definition: Sedp.h:327
TypeLookupReplyReader_rch type_lookup_reply_reader_
Definition: Sedp.h:1314
OrigSeqNumberMap orig_seq_numbers_
Definition: Sedp.h:1241
void populate_origination_locator(const GUID_t &id, DCPS::TransportLocator &tl)
Definition: Sedp.cpp:7017
RcHandle< EndpointManagerSporadic > type_lookup_reply_deadline_processor_
Definition: Sedp.h:1243
virtual void assign_subscription_key(GUID_t &rid, const GUID_t &topicId, const DDS::DataReaderQos &)
Definition: Sedp.h:1028
const octet ENTITYKIND_USER_READER_WITH_KEY
Definition: DdsDcpsGuid.idl:43
#define OPENDDS_STRING
DDS::Security::DatawriterCryptoHandle generate_remote_matched_writer_crypto_handle(const DCPS::GUID_t &writer, const DCPS::GUID_t &reader)
Definition: Sedp.cpp:5258
sequence< GUID_t > ReaderIdSeq
void stop_ice(const DCPS::GUID_t &guid, const DiscoveredPublication &dpub)
Definition: Sedp.cpp:5851
SecurityWriter(const DCPS::GUID_t &pub_id, Sedp &sedp, ACE_INT64 seq_init=1)
Definition: Sedp.h:510
const GUID_t & writer() const
Definition: Sedp.h:1106
void remove_publication(const GUID_t &publicationId)
Definition: Sedp.cpp:6218
RcHandle< PublicationAgentInfoListener > publication_agent_info_listener_
Definition: Sedp.h:1322
void write_durable_publication_data(const DCPS::GUID_t &reader, bool secure)
Definition: Sedp.cpp:4641
DCPS::RcHandle< LivelinessWriter > LivelinessWriter_rch
Definition: Sedp.h:543
DOMAINID_TYPE_NATIVE DomainId_t
const WriterAssociationRecord_rch record_
Definition: Sedp.h:1356
XTypes::TypeIdentifier type_id
Definition: Sedp.h:333
const EntityId_t ENTITYID_PARTICIPANT
Definition: GuidUtils.h:37
NativeCryptoHandle DatawriterCryptoHandle
void associate(DiscoveredParticipant &participant, const DDS::Security::ParticipantSecurityAttributes &participant_sec_attr)
Definition: Sedp.cpp:1044
GUID_t make_topic_guid()
Definition: Sedp.h:1154
LocalSubscriptionMap::iterator LocalSubscriptionIter
Definition: Sedp.h:326
MonotonicTimePoint time_added_to_map
Definition: Sedp.h:1074
MatchingPair(const GUID_t &reader, const GUID_t writer, bool reader_is_local)
Definition: Sedp.h:1087
void send_datareader_crypto_tokens(const DCPS::GUID_t &local_reader, const DCPS::GUID_t &remote_writer, const DDS::Security::DatareaderCryptoTokenSeq &drcts)
Definition: Sedp.cpp:5341
TypeLookupReplyWriter_rch type_lookup_reply_secure_writer_
Definition: Sedp.h:1296
String to_hex_dds_string(const unsigned char *data, const size_t size, const char delim, const size_t delim_every)
SequenceNumber participant_secure_sequence_
Definition: Sedp.h:1273
bool remote_has_local_participant_token_i(const GUID_t &local, const GUID_t &remote, const DiscoveredParticipant &participant) const
Definition: Sedp.cpp:6508
bool remote_knows_about_local_i(const GUID_t &local, const GUID_t &remote) const
Definition: Sedp.cpp:6408
DDS::Security::AccessControl_var access_control_
Definition: Sedp.h:1258
MatchingDataMap::iterator MatchingDataIter
Definition: Sedp.h:1119
CryptoTokenSeq DatareaderCryptoTokenSeq
TypeLookupReplyReader_rch type_lookup_reply_secure_reader_
Definition: Sedp.h:1317
OPENDDS_SET_CMP(GUID_t, GUID_tKeyLessThan) relay_only_readers_
Class to serialize and deserialize data for DDS.
Definition: Serializer.h:369
const octet ENTITYKIND_OPENDDS_TOPIC
Definition: DdsDcpsGuid.idl:49
bool is_security_enabled()
Definition: Sedp.h:1176
DDS::ReturnCode_t write_subscription_data(const DCPS::GUID_t &rid, LocalSubscription &sub, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:4982
DDS::ReturnCode_t write_subscription_data_secure(const DCPS::GUID_t &rid, LocalSubscription &sub, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:5056
const ParameterId_t PID_ENDPOINT_GUID
Definition: RtpsCore.idl:298
void set_permissions_handle(DDS::Security::PermissionsHandle h)
Definition: Sedp.h:1181
const ReaderAssociationRecord_rch record_
Definition: Sedp.h:1368
bool handle_datareader_crypto_tokens(const DDS::Security::ParticipantVolatileMessageSecure &msg)
Definition: Sedp.cpp:5476
DCPS::WeakRcHandle< ICE::Endpoint > get_ice_endpoint()
Definition: Sedp.cpp:3117
DCPS::TopicStatus find_topic(const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, GUID_t &topicId)
Definition: Sedp.cpp:6085
bool update_subscription_params(const DCPS::GUID_t &subId, const DDS::StringSeq &params)
Definition: Sedp.cpp:1977
ReaderRemoveAssociations(const ReaderAssociationRecord_rch &record)
Definition: Sedp.h:1373
LivelinessReader_rch participant_message_secure_reader_
Definition: Sedp.h:1308
sequence< TransportStatistics > TransportStatisticsSequence
Holds a data sample received by the transport.
DeferredSamples deferred_samples_
Definition: Sedp.h:478
void match_continue(const GUID_t &writer, const GUID_t &reader)
Definition: Sedp.cpp:7049
DCPS::RcHandle< LivelinessReader > LivelinessReader_rch
Definition: Sedp.h:673
DDS::Security::AccessControl_var get_access_control() const
Definition: Sedp.h:1196
void cleanup_reader_association(DCPS::DataReaderCallbacks_wrch callbacks, const GUID_t &reader, const GUID_t &writer)
Definition: Sedp.cpp:6759
key EntityKey_t entityKey
Definition: DdsDcpsGuid.idl:27
NativeCryptoHandle DatareaderCryptoHandle
DiscoveryWriter(const DCPS::GUID_t &pub_id, Sedp &sedp, ACE_INT64 seq_init=1)
Definition: Sedp.h:547
OPENDDS_STRING get_instance_name(const DCPS::GUID_t &id) const
Definition: Sedp.h:405
void associate_volatile(DiscoveredParticipant &participant)
Definition: Sedp.cpp:1385
DDS::Security::NativeCryptoHandle get_endpoint_crypto_handle() const
Definition: Sedp.h:395
DDS::Security::DatareaderCryptoHandle generate_remote_matched_reader_crypto_handle(const DCPS::GUID_t &reader, const DCPS::GUID_t &writer, bool relay_only)
Definition: Sedp.cpp:5291
LivelinessWriter_rch participant_message_writer_
Definition: Sedp.h:1284
Endpoint(const DCPS::GUID_t &repo_id, Sedp &sedp)
Definition: Sedp.h:346
LivelinessReader(const DCPS::GUID_t &sub_id, Sedp &sedp)
Definition: Sedp.h:660
typedef OPENDDS_MAP_CMP(GUID_t, DiscoveredSubscription, GUID_tKeyLessThan) DiscoveredSubscriptionMap
void notify_publication_reconnected(const DCPS::ReaderIdSeq &)
Definition: Sedp.h:454
TypeLookupReplyReader(const DCPS::GUID_t &sub_id, Sedp &sedp)
Definition: Sedp.h:727
LocalPublicationMap::const_iterator LocalPublicationCIter
Definition: Sedp.h:322
void notify_subscription_disconnected(const DCPS::WriterIdSeq &)
Definition: Sedp.h:625
void disassociate(DiscoveredParticipant &participant)
Definition: Sedp.cpp:1544
DDS::Security::CryptoKeyExchange_var get_crypto_key_exchange() const
Definition: Sedp.h:1216
void update_subscription_locators(const GUID_t &subscriptionId, const DCPS::TransportLocatorSeq &transInfo)
Definition: Sedp.cpp:6391
virtual DDS::ReturnCode_t remove_publication_i(const DCPS::GUID_t &publicationId, LocalPublication &pub)
Definition: Sedp.cpp:1878
SecurityReader_rch participant_volatile_message_secure_reader_
Definition: Sedp.h:1310
TimePoint_T< MonotonicClock > MonotonicTimePoint
Definition: TimeTypes.h:51
ACE_CDR::UShort UShort
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: Sedp.cpp:6122
GUID_t participant_id_
Definition: Sedp.h:1229
void process_discovered_reader_data(DCPS::MessageId message_id, const DCPS::DiscoveredReaderData &rdata, const DCPS::GUID_t &guid, const XTypes::TypeInformation &type_info, bool have_ice_agent_info, const ICE::AgentInfo &ice_agent_info, const DDS::Security::EndpointSecurityInfo *security_info=NULL)
Definition: Sedp.cpp:2336
SecurityReader_rch participant_stateless_message_reader_
Definition: Sedp.h:1309
DCPS::SequenceNumber local_participant_manual_liveliness_sn_secure_
Definition: Sedp.h:1254
sequence< GUID_t > WriterIdSeq
bool local_has_remote_endpoint_token_i(const GUID_t &local, const GUID_t &remote) const
Definition: Sedp.cpp:6536
DDS::DomainId_t domain_id() const
Definition: Sedp.h:369
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: Sedp.cpp:6261
const bool use_xtypes_complete_
Definition: Sedp.h:1247
void remove_associations(const DCPS::ReaderIdSeq &, bool)
Definition: Sedp.h:456
DCPS::DiscoveredReaderData reader_data_
void signal_liveliness_unsecure(DDS::LivelinessQosPolicyKind kind)
Definition: Sedp.cpp:3036
void write_durable_participant_message_data_secure(const DCPS::GUID_t &reader)
Definition: Sedp.cpp:4736
unsigned int publication_counter_
Definition: Sedp.h:1231
void association_complete_i(const DCPS::GUID_t &localId, const DCPS::GUID_t &remoteId)
Definition: Sedp.cpp:2920
const octet ENTITYKIND_USER_WRITER_NO_KEY
Definition: DdsDcpsGuid.idl:41
DCPS::SequenceNumber local_participant_automatic_liveliness_sn_secure_
Definition: Sedp.h:1253
The End User API.
bool need_minimal_and_or_complete_types(const XTypes::TypeInformation *type_info, bool &need_minimal, bool &need_complete) const
Definition: Sedp.cpp:6964
void request_remote_complete_type_objects(const GUID_t &remote_entity, const XTypes::TypeInformation &remote_type_info, DCPS::TypeObjReqCond &cond)
Definition: Sedp.cpp:6925
void use_rtps_relay_now(bool f)
Definition: Sedp.cpp:5911
DDS::Security::NativeCryptoHandle endpoint_crypto_handle_
Definition: Sedp.h:428
void remove_expired_endpoints(const MonotonicTimePoint &)
Definition: Sedp.cpp:6978
DiscoveryReader(const DCPS::GUID_t &sub_id, Sedp &sedp)
Definition: Sedp.h:643
DiscoveryWriter_rch subscriptions_writer_
Definition: Sedp.h:1280
LivelinessReader_rch participant_message_reader_
Definition: Sedp.h:1306
TypeLookupRequestReader(const DCPS::GUID_t &sub_id, Sedp &sedp)
Definition: Sedp.h:694
AtomicBool shutting_down_
Definition: Sedp.h:425
void match(const GUID_t &writer, const GUID_t &reader)
Definition: Sedp.cpp:6824
DCPS::SequenceNumber local_participant_automatic_liveliness_sn_
Definition: Sedp.h:1250
Reader(const DCPS::GUID_t &sub_id, Sedp &sedp)
Definition: Sedp.h:612
void purge_dead_topic(const String &topic_name)
Definition: Sedp.h:307
DCPS::RepoIdSet associated_participants_
Definition: Sedp.h:864
static void set_inline_qos(DCPS::TransportLocatorSeq &locators)
Definition: Sedp.cpp:5159
TypeLookupRequestReader_rch type_lookup_request_secure_reader_
Definition: Sedp.h:1316
void get_remote_type_objects(const XTypes::TypeIdentifierWithDependencies &tid_with_deps, MatchingData &md, bool get_minimal, const GUID_t &remote_id, bool is_discovery_protected)
Definition: Sedp.cpp:7529
void data_acked_i(const DCPS::GUID_t &local_id, const DCPS::GUID_t &remote_id)
Definition: Sedp.cpp:2977
void notify_subscription_lost(const DCPS::WriterIdSeq &)
Definition: Sedp.h:627
DiscoveryReader_rch dcps_participant_secure_reader_
Definition: Sedp.h:1311
Mix-in class for DDS entities which directly use the transport layer.
sequence< Parameter > ParameterList
void create_and_send_datareader_crypto_tokens(const DDS::Security::DatareaderCryptoHandle &drch, const DCPS::GUID_t &local_reader, const DDS::Security::DatawriterCryptoHandle &dwch, const DCPS::GUID_t &remote_writer)
Definition: Sedp.cpp:1462
DDS::ReturnCode_t write_subscription_data_unsecure(const DCPS::GUID_t &rid, LocalSubscription &sub, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:5006
ACE_TEXT("TCP_Factory")
DCPS::RcHandle< TypeLookupRequestReader > TypeLookupRequestReader_rch
Definition: Sedp.h:723
DatareaderCryptoTokenSeqMap pending_remote_reader_crypto_tokens_
Definition: Sedp.h:1268
bool got_minimal
Whether all minimal types are obtained.
Definition: Sedp.h:1065
void set_crypto_key_exchange(DDS::Security::CryptoKeyExchange_var ckf)
Definition: Sedp.h:1211
void assign_bit_key(DiscoveredPublication &pub)
Definition: Sedp.cpp:954
LivelinessWriter_rch participant_message_secure_writer_
Definition: Sedp.h:1286
WriterRemoveAssociations(const WriterAssociationRecord_rch &record)
Definition: Sedp.h:1349
DCPS::JobQueue_rch job_queue() const
Definition: Sedp.h:199
void populate_discovered_writer_msg(DCPS::DiscoveredWriterData &dwd, const DCPS::GUID_t &publication_id, const LocalPublication &pub)
Definition: Sedp.cpp:4551
void remove_assoc_i(const DCPS::GUID_t &local_guid, const LocalPublication &lpub, const DCPS::GUID_t &remote_guid)
Definition: Sedp.cpp:5635
bool check_transport_qos(const DCPS::TransportInst &)
Definition: Sedp.h:359
TypeLookupRequestWriter_rch type_lookup_request_writer_
Definition: Sedp.h:1292
bool should_drop_volatile_message(const DDS::Security::ParticipantGenericMessage &msg)
Definition: Sedp.cpp:2779
void use_ice_now(bool f)
Definition: Sedp.cpp:5917
#define OPENDDS_VECTOR(T)
DiscoveryWriter_rch subscriptions_secure_writer_
Definition: Sedp.h:1282
virtual void assign_publication_key(GUID_t &rid, const GUID_t &topicId, const DDS::DataWriterQos &)
Definition: Sedp.h:1018
bool local_has_remote_participant_token_i(const GUID_t &local, const GUID_t &remote) const
Definition: Sedp.cpp:6481
void write_durable_participant_message_data(const DCPS::GUID_t &reader)
Definition: Sedp.cpp:4713
const octet ENTITYKIND_USER_WRITER_WITH_KEY
Definition: DdsDcpsGuid.idl:40
sequence< octet, 32 > OctetSeq32
Definition: TypeLookup.idl:45
void replay_durable_data_for(const DCPS::GUID_t &remote_sub_id)
Definition: Sedp.cpp:1634
TypeLookupReplyWriter(const DCPS::GUID_t &pub_id, Sedp &sedp, ACE_INT64 seq_init=1)
Definition: Sedp.h:588
void send_datawriter_crypto_tokens(const DCPS::GUID_t &local_writer, const DCPS::GUID_t &remote_reader, const DDS::Security::DatawriterCryptoTokenSeq &dwcts)
Definition: Sedp.cpp:5385
SecurityWriter_rch participant_volatile_message_secure_writer_
Definition: Sedp.h:1290
void append_transport_statistics(DCPS::TransportStatisticsSequence &seq)
Definition: Sedp.cpp:5977
void remove_from_bit(const DiscoveredPublication &pub)
Definition: Sedp.h:1144
MonotonicTimePoint time_started
Definition: Sedp.h:336
Sequence number abstraction. Only allows positive 64 bit values.
void ignore(const GUID_t &to_ignore)
Definition: Sedp.cpp:5988
octet GuidPrefix_t[12]
Definition: DdsDcpsGuid.idl:19
DCPS::RcHandle< TypeLookupRequestWriter > TypeLookupRequestWriter_rch
Definition: Sedp.h:584
void request_type_objects(const XTypes::TypeInformation *type_info, const MatchingPair &mp, bool is_discovery_protected, bool get_minimal, bool get_complete)
Definition: Sedp.cpp:7484
void write_durable_subscription_data(const DCPS::GUID_t &reader, bool secure)
Definition: Sedp.cpp:4677
void notify_liveliness(const ParticipantMessageData &pmd)
Definition: Sedp.cpp:2671
DiscoveredPublicationMap discovered_publications_
Definition: Sedp.h:1234
DCPS::RcHandle< ICE::Agent > ice_agent_
Definition: Sedp.h:1321
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
RcHandle< SubscriptionAgentInfoListener > subscription_agent_info_listener_
Definition: Sedp.h:1323
unsigned int topic_counter_
Definition: Sedp.h:1231
void generate_remote_matched_crypto_handle(const BuiltinAssociationRecord &record)
Definition: Sedp.cpp:1012
DCPS::TopicStatus assert_topic(GUID_t &topicId, const char *topicName, const char *dataTypeName, const DDS::TopicQos &qos, bool hasDcpsKey, DCPS::TopicCallbacks *topic_callbacks)
Definition: Sedp.cpp:6060
bool ignoring(const GUID_t &guid) const
Definition: Sedp.h:205
bool has_dcps_key(const GUID_t &topicId) const
Definition: Sedp.h:1163
const ReaderAssociationRecord_rch record_
Definition: Sedp.h:1380
bool should_drop_message(const char *unsecure_topic_name)
Definition: Sedp.cpp:2825
void send_builtin_crypto_tokens(const DCPS::GUID_t &remoteId)
Definition: Sedp.cpp:1512
DCPS::ReactorTask_rch reactor_task() const
Definition: Sedp.h:197
void type_lookup_init(DCPS::ReactorInterceptor_rch reactor_interceptor)
Definition: Sedp.h:290
DDS::DomainId_t get_domain_id() const
Definition: Sedp.cpp:5538
void disassociate_volatile(DiscoveredParticipant &participant)
Definition: Sedp.cpp:1345
void remove_entities_belonging_to(Map &m, DCPS::GUID_t participant, bool subscription, OPENDDS_VECTOR(typename Map::mapped_type)&to_remove_from_bit)
Definition: Sedp.cpp:1795
DiscoveryReader_rch publications_reader_
Definition: Sedp.h:1298
void process_discovered_writer_data(DCPS::MessageId message_id, const DCPS::DiscoveredWriterData &wdata, const DCPS::GUID_t &guid, const XTypes::TypeInformation &type_info, bool have_ice_agent_info, const ICE::AgentInfo &ice_agent_info, const DDS::Security::EndpointSecurityInfo *security_info=NULL)
Definition: Sedp.cpp:2042
bool update_subscription_qos(const DCPS::GUID_t &subscriptionId, const DDS::DataReaderQos &qos, const DDS::SubscriberQos &subscriberQos)
Definition: Sedp.cpp:1951
bool ignoring(const char *topic_name) const
Definition: Sedp.h:209
DDS::Security::PermissionsHandle permissions_handle_
Definition: Sedp.h:1263
const DCPS::NetworkAddress & local_address() const
Definition: Sedp.cpp:928
long long ACE_INT64
void stun_server_address(const ACE_INET_Addr &address)
Definition: Sedp.cpp:5969
LocalPublicationMap local_publications_
Definition: Sedp.h:1232
void assign(EntityId_t &dest, const EntityId_t &src)
Definition: GuidUtils.h:157
DCPS::LocatorSeq multicast_locators() const
Definition: Sedp.cpp:920
TopicNameMap topic_names_
Definition: Sedp.h:1237
SequenceNumber rpc_seqnum_minimal
Sequence number of the first request for remote minimal types.
Definition: Sedp.h:1062
void enable_transport_using_config(bool reliable, bool durable, const TransportConfig_rch &tc)
DCPS::GUID_t repo_id_
Definition: Sedp.h:423
DDS::ReturnCode_t write_publication_data(const DCPS::GUID_t &rid, LocalPublication &pub, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:4830
DatawriterCryptoTokenSeqMap pending_remote_writer_crypto_tokens_
Definition: Sedp.h:1271
DCPS::RcHandle< Reader > Reader_rch
Definition: Sedp.h:639
GUID_t make_id(const GuidPrefix_t &prefix, const EntityId_t &entity)
Definition: GuidUtils.h:200
TypeLookupRequestReader_rch type_lookup_request_reader_
Definition: Sedp.h:1313
void set_crypto_handles(DDS::Security::ParticipantCryptoHandle p, DDS::Security::NativeCryptoHandle e=DDS::HANDLE_NIL)
Definition: Sedp.h:383
void signal_liveliness(DDS::LivelinessQosPolicyKind kind)
Definition: Sedp.cpp:2997
virtual void populate_transport_locator_sequence(DCPS::TransportLocatorSeq &tls, DiscoveredSubscriptionIter &iter, const DCPS::GUID_t &reader)
Definition: Sedp.cpp:5176
WriterAddAssociation(const WriterAssociationRecord_rch &record)
Definition: Sedp.h:1337
DCPS::ReactorTask_rch reactor_task_
Definition: Sedp.h:772
virtual bool shutting_down() const
Definition: Sedp.cpp:5170
const octet ENTITYKIND_USER_READER_NO_KEY
Definition: DdsDcpsGuid.idl:42
DCPS::RcHandle< SecurityReader > SecurityReader_rch
Definition: Sedp.h:690
virtual DDS::ReturnCode_t remove_subscription_i(const DCPS::GUID_t &subscriptionId, LocalSubscription &sub)
Definition: Sedp.cpp:1927
void signal_liveliness_secure(DDS::LivelinessQosPolicyKind kind)
Definition: Sedp.cpp:3089
bool operator<(const MatchingPair &other) const
Definition: Sedp.h:1111
void resend_user_crypto_tokens(const DCPS::GUID_t &remote_participant)
Definition: Sedp.cpp:5542
Defines the interface for Discovery callbacks into the Topic.
#define TheServiceParticipant
void match_continue_security_enabled(const GUID_t &writer, const GUID_t &reader, bool call_writer, bool call_reader)
Definition: Sedp.cpp:7570
void data_received(DCPS::MessageId message_id, const DiscoveredPublication &wdata)
Definition: Sedp.cpp:2279
void update_locators(const ParticipantData_t &pdata)
Definition: Sedp.cpp:1659
LM_ERROR
DCPS::PmfSporadicTask< Sedp > EndpointManagerSporadic
Definition: Sedp.h:1121
void create_datawriter_crypto_tokens(const DDS::Security::DatawriterCryptoHandle &dwch, const DDS::Security::DatareaderCryptoHandle &drch, DDS::Security::DatawriterCryptoTokenSeq &dwcts)
Definition: Sedp.cpp:5369
bool update_publication_qos(const DCPS::GUID_t &publicationId, const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos)
Definition: Sedp.cpp:1901
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
SecurityWriter_rch participant_stateless_message_writer_
Definition: Sedp.h:1287
void create_and_send_datawriter_crypto_tokens(const DDS::Security::DatawriterCryptoHandle &dwch, const DCPS::GUID_t &local_writer, const DDS::Security::DatareaderCryptoHandle &drch, const DCPS::GUID_t &remote_reader)
Definition: Sedp.cpp:1481
CryptoTokenSeq DatawriterCryptoTokenSeq
TypeLookupRequestWriter(const DCPS::GUID_t &pub_id, Sedp &sedp, ACE_INT64 seq_init=1)
Definition: Sedp.h:565
void cleanup_type_lookup_data(const DCPS::GUID_t &guid, const XTypes::TypeIdentifier &ti, bool secure)
Definition: Sedp.cpp:4050
DDS::ReturnCode_t write_dcps_participant_secure(const Security::SPDPdiscoveredParticipantData &msg, const DCPS::GUID_t &part)
Definition: Sedp.cpp:4787
void cleanup_secure_writer(const GUID_t &publicationId)
Definition: Sedp.cpp:6617
DCPS::TypeObjReqCond * type_obj_req_cond
Definition: Sedp.h:1085
DDS::Security::ParticipantCryptoHandle get_crypto_handle() const
Definition: Sedp.h:390
static DDS::BuiltinTopicKey_t get_key(const DiscoveredSubscription &sub)
Definition: Sedp.h:1013
DCPS::SequenceNumber local_participant_manual_liveliness_sn_
Definition: Sedp.h:1251
bool handle_datawriter_crypto_tokens(const DDS::Security::ParticipantVolatileMessageSecure &msg)
Definition: Sedp.cpp:5413
void notify_subscription_reconnected(const DCPS::WriterIdSeq &)
Definition: Sedp.h:626
void add_assoc_i(const DCPS::GUID_t &local_guid, const LocalPublication &lpub, const DCPS::GUID_t &remote_guid, const DiscoveredSubscription &dsub)
Definition: Sedp.cpp:5616
void remove_remote_crypto_handle(const DCPS::GUID_t &participant, const EntityId_t &entity)
Definition: Sedp.cpp:1421
LivelinessQosPolicyKind
MatchingPair(const GUID_t &remote, bool remote_is_reader, DCPS::TypeObjReqCond *type_obj_req_cond)
Definition: Sedp.h:1094
DiscoveredPublicationMap::iterator DiscoveredPublicationIter
Definition: Sedp.h:276
bool update_topic_qos(const DCPS::GUID_t &topicId, const DDS::TopicQos &qos)
Definition: Sedp.cpp:1840
key EntityId_t entityId
Definition: DdsDcpsGuid.idl:59
DDS::ReturnCode_t init_security(DDS::Security::IdentityHandle id_handle, DDS::Security::PermissionsHandle perm_handle, DDS::Security::ParticipantCryptoHandle crypto_handle)
Definition: Sedp.cpp:579
void set_crypto_key_factory(DDS::Security::CryptoKeyFactory_var ckf)
Definition: Sedp.h:1201
void cleanup_writer_association(DCPS::DataWriterCallbacks_wrch callbacks, const GUID_t &writer, const GUID_t &reader)
Definition: Sedp.cpp:6728
sequence< string > StringSeq
Definition: DdsDcpsCore.idl:50
extensibility(MUTABLE) struct TypeLookup_getTypes_In
Definition: TypeLookup.idl:29
DCPS::SequenceNumber seq_
Definition: Sedp.h:505
void start_ice(const DCPS::GUID_t &guid, const LocalPublication &lpub)
Definition: Sedp.cpp:5740
Discovery Strategy class that implements RTPS discovery.
Definition: RtpsDiscovery.h:55
DiscoveryWriter_rch publications_writer_
Definition: Sedp.h:1276
DDS::ReturnCode_t write_participant_message_data_secure(const DCPS::GUID_t &rid, DCPS::SequenceNumber &sn, const DCPS::GUID_t &reader=GUID_UNKNOWN)
Definition: Sedp.cpp:5135
DDS::Security::CryptoKeyFactory_var crypto_key_factory_
Definition: Sedp.h:1259
LocalPublicationMap::iterator LocalPublicationIter
Definition: Sedp.h:321
void remove_associations(const DCPS::WriterIdSeq &, bool)
Definition: Sedp.h:628
void rtps_relay_address(const ACE_INET_Addr &address)
Definition: Sedp.cpp:5958
void received_volatile_message_secure(DCPS::MessageId message_id, const DDS::Security::ParticipantVolatileMessageSecure &data)
Definition: Sedp.cpp:2876
void remove_subscription(const GUID_t &subscriptionId)
Definition: Sedp.cpp:6364
virtual bool deferrable() const
Definition: Sedp.h:500
DCPS::LocatorSeq unicast_locators() const
Definition: Sedp.cpp:912