OpenDDS::RTPS::Sedp Class Reference

#include <Sedp.h>

Inheritance diagram for OpenDDS::RTPS::Sedp:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::RTPS::Sedp:
Collaboration graph
[legend]

List of all members.

Classes

class  Endpoint
struct  LocalParticipantMessage
struct  Msg
class  Reader
struct  Task
class  Writer

Public Member Functions

 Sedp (const DCPS::RepoId &participant_id, Spdp &owner, ACE_Thread_Mutex &lock)
DDS::ReturnCode_t init (const DCPS::RepoId &guid, const RtpsDiscovery &disco, DDS::DomainId_t domainId)
void acknowledge ()
 request for acknowledgement from all Sedp threads (Task)
void shutdown ()
void unicast_locators (DCPS::LocatorSeq &locators) const
const ACE_INET_Addrlocal_address () const
const ACE_INET_Addrmulticast_group () const
bool map_ipv4_to_ipv6 () const
void associate (const Security::SPDPdiscoveredParticipantData &pdata)
bool disassociate (const Security::SPDPdiscoveredParticipantData &pdata)
DDS::ReturnCode_t write_dcps_participant_dispose (const DCPS::RepoId &part)
bool update_topic_qos (const DCPS::RepoId &topicId, const DDS::TopicQos &qos, OPENDDS_STRING &name)
bool update_publication_qos (const DCPS::RepoId &publicationId, const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos)
bool update_subscription_qos (const DCPS::RepoId &subscriptionId, const DDS::DataReaderQos &qos, const DDS::SubscriberQos &subscriberQos)
bool update_subscription_params (const DCPS::RepoId &subId, const DDS::StringSeq &params)
void association_complete (const DCPS::RepoId &localId, const DCPS::RepoId &remoteId)
void signal_liveliness (DDS::LivelinessQosPolicyKind kind)
void signal_liveliness_unsecure (DDS::LivelinessQosPolicyKind kind)
template<typename Map >
void remove_entities_belonging_to (Map &m, RepoId participant)

Static Public Attributes

static const bool host_is_bigendian_

Private Types

typedef DCPS::RcHandle< ReaderReader_rch
typedef
LocalParticipantMessageMap::iterator 
LocalParticipantMessageIter
typedef
LocalParticipantMessageMap::const_iterator 
LocalParticipantMessageCIter
typedef std::pair
< DCPS::MessageId,
DCPS::DiscoveredWriterData
MsgIdWtrDataPair
typedef std::pair
< DCPS::MessageId,
DCPS::DiscoveredReaderData
MsgIdRdrDataPair

Private Member Functions

DCPS::TopicBuiltinTopicDataDataReaderImpltopic_bit ()
DCPS::PublicationBuiltinTopicDataDataReaderImplpub_bit ()
DCPS::SubscriptionBuiltinTopicDataDataReaderImplsub_bit ()
void populate_discovered_writer_msg (DCPS::DiscoveredWriterData &dwd, const DCPS::RepoId &publication_id, const LocalPublication &pub)
void populate_discovered_reader_msg (DCPS::DiscoveredReaderData &drd, const DCPS::RepoId &subscription_id, const LocalSubscription &sub)
typedef OPENDDS_MAP_CMP (DCPS::RepoId, LocalParticipantMessage, DCPS::GUID_tKeyLessThan) LocalParticipantMessageMap
void process_discovered_writer_data (DCPS::MessageId message_id, const DCPS::DiscoveredWriterData &wdata, const DCPS::RepoId &guid, const DDS::Security::EndpointSecurityInfo *security_info=NULL)
void data_received (DCPS::MessageId message_id, const DCPS::DiscoveredWriterData &wdata)
void process_discovered_reader_data (DCPS::MessageId message_id, const DCPS::DiscoveredReaderData &rdata, const DCPS::RepoId &guid, const DDS::Security::EndpointSecurityInfo *security_info=NULL)
void data_received (DCPS::MessageId message_id, const DCPS::DiscoveredReaderData &rdata)
void data_received (DCPS::MessageId message_id, const ParticipantMessageData &data)
typedef OPENDDS_MAP_CMP (DCPS::RepoId, MsgIdWtrDataPair, DCPS::GUID_tKeyLessThan) DeferredPublicationMap
typedef OPENDDS_MAP_CMP (DCPS::RepoId, MsgIdRdrDataPair, DCPS::GUID_tKeyLessThan) DeferredSubscriptionMap
void assign_bit_key (DiscoveredPublication &pub)
void assign_bit_key (DiscoveredSubscription &sub)
template<typename Map >
void remove_entities_belonging_to (Map &m, DCPS::RepoId participant)
void remove_from_bit_i (const DiscoveredPublication &pub)
void remove_from_bit_i (const DiscoveredSubscription &sub)
virtual DDS::ReturnCode_t remove_publication_i (const DCPS::RepoId &publicationId)
virtual DDS::ReturnCode_t remove_subscription_i (const DCPS::RepoId &subscriptionId)
void inconsistent_topic (const DCPS::RepoIdSet &endpoints) const
virtual bool shutting_down () const
virtual void populate_transport_locator_sequence (DCPS::TransportLocatorSeq *&tls, DiscoveredSubscriptionIter &iter, const DCPS::RepoId &reader)
virtual void populate_transport_locator_sequence (DCPS::TransportLocatorSeq *&tls, DiscoveredPublicationIter &iter, const DCPS::RepoId &writer)
virtual bool defer_writer (const DCPS::RepoId &writer, const DCPS::RepoId &writer_participant)
virtual bool defer_reader (const DCPS::RepoId &reader, const DCPS::RepoId &reader_participant)
void write_durable_publication_data (const DCPS::RepoId &reader)
void write_durable_subscription_data (const DCPS::RepoId &reader)
void write_durable_participant_message_data (const DCPS::RepoId &reader)
DDS::ReturnCode_t write_publication_data (const DCPS::RepoId &rid, LocalPublication &pub, const DCPS::RepoId &reader=DCPS::GUID_UNKNOWN)
DDS::ReturnCode_t write_publication_data_unsecure (const DCPS::RepoId &rid, LocalPublication &pub, const DCPS::RepoId &reader=DCPS::GUID_UNKNOWN)
DDS::ReturnCode_t write_subscription_data (const DCPS::RepoId &rid, LocalSubscription &pub, const DCPS::RepoId &reader=DCPS::GUID_UNKNOWN)
DDS::ReturnCode_t write_subscription_data_unsecure (const DCPS::RepoId &rid, LocalSubscription &pub, const DCPS::RepoId &reader=DCPS::GUID_UNKNOWN)
DDS::ReturnCode_t write_participant_message_data (const DCPS::RepoId &rid, LocalParticipantMessage &part, const DCPS::RepoId &reader=DCPS::GUID_UNKNOWN)
bool is_opendds (const GUID_t &endpoint) const

Static Private Member Functions

static DCPS::RepoId make_id (const DCPS::RepoId &participant_id, const EntityId_t &entity)
static void set_inline_qos (DCPS::TransportLocatorSeq &locators)

Private Attributes

Spdpspdp_
DDS::Security::ParticipantSecurityAttributes participant_sec_attr_
Writer publications_writer_
Writer subscriptions_writer_
Writer participant_message_writer_
Reader_rch publications_reader_
Reader_rch subscriptions_reader_
Reader_rch participant_message_reader_
OpenDDS::RTPS::Sedp::Task task_
DCPS::TransportInst_rch transport_inst_
LocalParticipantMessageMap local_participant_messages_
DeferredPublicationMap deferred_publications_
DeferredSubscriptionMap deferred_subscriptions_
DCPS::RepoIdSet defer_match_endpoints_
DCPS::RepoIdSet associated_participants_
DCPS::SequenceNumber automatic_liveliness_seq_
DCPS::SequenceNumber manual_liveliness_seq_

Detailed Description

Definition at line 60 of file Sedp.h.


Member Typedef Documentation

typedef LocalParticipantMessageMap::const_iterator OpenDDS::RTPS::Sedp::LocalParticipantMessageCIter [private]

Definition at line 495 of file Sedp.h.

typedef LocalParticipantMessageMap::iterator OpenDDS::RTPS::Sedp::LocalParticipantMessageIter [private]

Definition at line 494 of file Sedp.h.

Definition at line 547 of file Sedp.h.

Definition at line 542 of file Sedp.h.

Definition at line 388 of file Sedp.h.


Constructor & Destructor Documentation

OpenDDS::RTPS::Sedp::Sedp ( const DCPS::RepoId participant_id,
Spdp owner,
ACE_Thread_Mutex lock 
)

Member Function Documentation

void OpenDDS::RTPS::Sedp::acknowledge (  ) 

request for acknowledgement from all Sedp threads (Task)

Definition at line 3485 of file Sedp.cpp.

References OpenDDS::RTPS::Sedp::Task::acknowledge(), and task_.

Referenced by OpenDDS::RTPS::Spdp::fini_bit().

03486 {
03487   task_.acknowledge();
03488 }

Here is the call graph for this function:

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::assign_bit_key ( DiscoveredSubscription &  sub  )  [private]

Definition at line 683 of file Sedp.cpp.

References OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::increment_key(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::sub_bit_key_, and OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::sub_key_to_id_.

00684 {
00685   increment_key(sub_bit_key_);
00686   sub_key_to_id_[sub_bit_key_] = sub.reader_data_.readerProxy.remoteReaderGuid;
00687   sub.reader_data_.ddsSubscriptionData.key = sub_bit_key_;
00688 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::assign_bit_key ( DiscoveredPublication &  pub  )  [private]

Definition at line 675 of file Sedp.cpp.

References OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::increment_key(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::pub_bit_key_, and OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::pub_key_to_id_.

00676 {
00677   increment_key(pub_bit_key_);
00678   pub_key_to_id_[pub_bit_key_] = pub.writer_data_.writerProxy.remoteWriterGuid;
00679   pub.writer_data_.ddsPublicationData.key = pub_bit_key_;
00680 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::associate ( const Security::SPDPdiscoveredParticipantData pdata  ) 

Definition at line 755 of file Sedp.cpp.

References OpenDDS::RTPS::ParticipantProxy_t::availableBuiltinEndpoints, OpenDDS::RTPS::BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_WRITER, OpenDDS::RTPS::create_association_data_proto(), OpenDDS::RTPS::DISC_BUILTIN_ENDPOINT_PUBLICATION_ANNOUNCER, OpenDDS::RTPS::DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_ANNOUNCER, OpenDDS::RTPS::Sedp::Task::enqueue(), OpenDDS::DCPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER, OpenDDS::DCPS::ENTITYID_SEDP_BUILTIN_PUBLICATIONS_WRITER, OpenDDS::DCPS::ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_WRITER, OpenDDS::DCPS::move(), participant_message_reader_, OpenDDS::Security::SPDPdiscoveredParticipantData::participantProxy, publications_reader_, OpenDDS::DCPS::AssociationData::remote_id_, OpenDDS::DCPS::SAMPLE_DATA, subscriptions_reader_, and task_.

Referenced by OpenDDS::RTPS::Spdp::match_unauthenticated().

00756 {
00757   // First create a 'prototypical' instance of AssociationData.  It will
00758   // be copied and modified for each of the (up to) four SEDP Endpoints.
00759   DCPS::AssociationData proto;
00760   create_association_data_proto(proto, pdata);
00761 
00762   const BuiltinEndpointSet_t& avail =
00763     pdata.participantProxy.availableBuiltinEndpoints;
00764 
00765   // See RTPS v2.1 section 8.5.5.1
00766   if (avail & DISC_BUILTIN_ENDPOINT_PUBLICATION_ANNOUNCER) {
00767     DCPS::AssociationData peer = proto;
00768     peer.remote_id_.entityId = ENTITYID_SEDP_BUILTIN_PUBLICATIONS_WRITER;
00769     publications_reader_->assoc(peer);
00770   }
00771   if (avail & DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_ANNOUNCER) {
00772     DCPS::AssociationData peer = proto;
00773     peer.remote_id_.entityId = ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_WRITER;
00774     subscriptions_reader_->assoc(peer);
00775   }
00776   if (avail & BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_WRITER) {
00777     DCPS::AssociationData peer = proto;
00778     peer.remote_id_.entityId = ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER;
00779     participant_message_reader_->assoc(peer);
00780   }
00781 
00782   DCPS::unique_ptr<Security::SPDPdiscoveredParticipantData> dpd(
00783     new Security::SPDPdiscoveredParticipantData(pdata));
00784 
00785   task_.enqueue(DCPS::SAMPLE_DATA, move(dpd));
00786 }

Here is the call graph for this function:

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::association_complete ( const DCPS::RepoId localId,
const DCPS::RepoId remoteId 
) [virtual]
void OpenDDS::RTPS::Sedp::data_received ( DCPS::MessageId  message_id,
const ParticipantMessageData data 
) [private]

Definition at line 2159 of file Sedp.cpp.

References OpenDDS::DCPS::GUID_t::entityId, OpenDDS::DCPS::ENTITYID_PARTICIPANT, OpenDDS::RTPS::Spdp::has_discovered_participant(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::ignoring(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::local_subscriptions_, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::lock_, OpenDDS::RTPS::ParticipantMessageData::participantGuid, OpenDDS::RTPS::Spdp::shutting_down(), and spdp_.

02161 {
02162   if (spdp_.shutting_down()) { return; }
02163 
02164   const RepoId& guid = data.participantGuid;
02165   RepoId guid_participant = guid;
02166   guid_participant.entityId = ENTITYID_PARTICIPANT;
02167   RepoId prefix = data.participantGuid;
02168   prefix.entityId = EntityId_t(); // Clear the entityId so lower bound will work.
02169 
02170   ACE_GUARD(ACE_Thread_Mutex, g, lock_);
02171 
02172   if (ignoring(guid)
02173       || ignoring(guid_participant)) {
02174     return;
02175   }
02176 
02177   if (!spdp_.has_discovered_participant(guid_participant)) {
02178     return;
02179   }
02180 
02181   for (LocalSubscriptionMap::const_iterator sub_pos = local_subscriptions_.begin(),
02182          sub_limit = local_subscriptions_.end();
02183        sub_pos != sub_limit; ++sub_pos) {
02184     const DCPS::RepoIdSet::const_iterator pos =
02185       sub_pos->second.matched_endpoints_.lower_bound(prefix);
02186     if (pos != sub_pos->second.matched_endpoints_.end() &&
02187         DCPS::GuidPrefixEqual()(pos->guidPrefix, prefix.guidPrefix)) {
02188       sub_pos->second.subscription_->signal_liveliness(guid_participant);
02189     }
02190   }
02191 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::data_received ( DCPS::MessageId  message_id,
const DCPS::DiscoveredReaderData rdata 
) [private]

Definition at line 2089 of file Sedp.cpp.

References OpenDDS::DCPS::DiscoveredReaderData::ddsSubscriptionData, deferred_subscriptions_, OpenDDS::DCPS::ENTITYID_PARTICIPANT, OpenDDS::RTPS::Spdp::has_discovered_participant(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::ignoring(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::lock_, process_discovered_reader_data(), OpenDDS::DCPS::DiscoveredReaderData::readerProxy, OpenDDS::RTPS::Spdp::shutting_down(), spdp_, and DDS::SubscriptionBuiltinTopicData::topic_name.

02091 {
02092   if (spdp_.shutting_down()) { return; }
02093 
02094   const RepoId& guid = rdata.readerProxy.remoteReaderGuid;
02095   RepoId guid_participant = guid;
02096   guid_participant.entityId = ENTITYID_PARTICIPANT;
02097 
02098   ACE_GUARD(ACE_Thread_Mutex, g, lock_);
02099 
02100   if (ignoring(guid)
02101       || ignoring(guid_participant)
02102       || ignoring(rdata.ddsSubscriptionData.topic_name)) {
02103     return;
02104   }
02105 
02106 #if defined(OPENDDS_SECURITY)
02107   if (should_drop_message(rdata.ddsSubscriptionData.topic_name)) {
02108     return;
02109   }
02110 #endif
02111 
02112   if (!spdp_.has_discovered_participant(guid_participant)) {
02113     deferred_subscriptions_[guid] = std::make_pair(message_id, rdata);
02114     return;
02115   }
02116 
02117   process_discovered_reader_data(message_id, rdata, guid);
02118 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::data_received ( DCPS::MessageId  message_id,
const DCPS::DiscoveredWriterData wdata 
) [private]

Definition at line 1754 of file Sedp.cpp.

References OpenDDS::DCPS::DiscoveredWriterData::ddsPublicationData, deferred_publications_, OpenDDS::DCPS::ENTITYID_PARTICIPANT, OpenDDS::RTPS::Spdp::has_discovered_participant(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::ignoring(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::lock_, process_discovered_writer_data(), OpenDDS::RTPS::Spdp::shutting_down(), spdp_, DDS::PublicationBuiltinTopicData::topic_name, and OpenDDS::DCPS::DiscoveredWriterData::writerProxy.

Referenced by OpenDDS::RTPS::Sedp::Task::svc_i().

01756 {
01757   if (spdp_.shutting_down()) { return; }
01758 
01759   const RepoId& guid = wdata.writerProxy.remoteWriterGuid;
01760   RepoId guid_participant = guid;
01761   guid_participant.entityId = ENTITYID_PARTICIPANT;
01762 
01763   ACE_GUARD(ACE_Thread_Mutex, g, lock_);
01764 
01765   if (ignoring(guid)
01766       || ignoring(guid_participant)
01767       || ignoring(wdata.ddsPublicationData.topic_name)) {
01768     return;
01769   }
01770 
01771 #if defined(OPENDDS_SECURITY)
01772   if (should_drop_message(wdata.ddsPublicationData.topic_name)) {
01773     return;
01774   }
01775 #endif
01776 
01777   if (!spdp_.has_discovered_participant(guid_participant)) {
01778     deferred_publications_[guid] = std::make_pair(message_id, wdata);
01779     return;
01780   }
01781 
01782   process_discovered_writer_data(message_id, wdata, guid);
01783 }

Here is the call graph for this function:

Here is the caller graph for this function:

virtual bool OpenDDS::RTPS::Sedp::defer_reader ( const DCPS::RepoId reader,
const DCPS::RepoId reader_participant 
) [private, virtual]
virtual bool OpenDDS::RTPS::Sedp::defer_writer ( const DCPS::RepoId writer,
const DCPS::RepoId writer_participant 
) [private, virtual]
bool OpenDDS::RTPS::Sedp::disassociate ( const Security::SPDPdiscoveredParticipantData pdata  )  [virtual]

Implements OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >.

Definition at line 1137 of file Sedp.cpp.

References associated_participants_, OpenDDS::RTPS::ParticipantProxy_t::availableBuiltinEndpoints, OpenDDS::RTPS::BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_READER, OpenDDS::RTPS::BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_WRITER, DDS::Security::BUILTIN_PARTICIPANT_STATELESS_MESSAGE_READER, DDS::Security::BUILTIN_PARTICIPANT_STATELESS_MESSAGE_WRITER, OpenDDS::RTPS::DISC_BUILTIN_ENDPOINT_PUBLICATION_ANNOUNCER, OpenDDS::RTPS::DISC_BUILTIN_ENDPOINT_PUBLICATION_DETECTOR, OpenDDS::RTPS::DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_ANNOUNCER, OpenDDS::RTPS::DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_DETECTOR, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::discovered_publications_, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::discovered_subscriptions_, OpenDDS::DCPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER, OpenDDS::RTPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_SECURE_READER, OpenDDS::RTPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_SECURE_WRITER, OpenDDS::DCPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER, OpenDDS::RTPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_STATELESS_READER, OpenDDS::RTPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_STATELESS_WRITER, OpenDDS::RTPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_VOLATILE_SECURE_READER, OpenDDS::RTPS::ENTITYID_P2P_BUILTIN_PARTICIPANT_VOLATILE_SECURE_WRITER, OpenDDS::DCPS::ENTITYID_PARTICIPANT, OpenDDS::DCPS::ENTITYID_SEDP_BUILTIN_PUBLICATIONS_READER, OpenDDS::RTPS::ENTITYID_SEDP_BUILTIN_PUBLICATIONS_SECURE_READER, OpenDDS::RTPS::ENTITYID_SEDP_BUILTIN_PUBLICATIONS_SECURE_WRITER, OpenDDS::DCPS::ENTITYID_SEDP_BUILTIN_PUBLICATIONS_WRITER, OpenDDS::DCPS::ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_READER, OpenDDS::RTPS::ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_READER, OpenDDS::RTPS::ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_WRITER, OpenDDS::DCPS::ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_WRITER, OpenDDS::RTPS::ENTITYID_SPDP_RELIABLE_BUILTIN_PARTICIPANT_SECURE_READER, OpenDDS::RTPS::ENTITYID_SPDP_RELIABLE_BUILTIN_PARTICIPANT_SECURE_WRITER, OpenDDS::RTPS::ParticipantProxy_t::guidPrefix, OpenDDS::RTPS::Spdp::has_discovered_participant(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::lock_, participant_message_reader_, participant_message_writer_, OpenDDS::Security::SPDPdiscoveredParticipantData::participantProxy, publications_reader_, publications_writer_, remove_entities_belonging_to(), spdp_, subscriptions_reader_, and subscriptions_writer_.

01138 {
01139   RepoId part;
01140   std::memcpy(part.guidPrefix, pdata.participantProxy.guidPrefix,
01141               sizeof(GuidPrefix_t));
01142   part.entityId = ENTITYID_PARTICIPANT;
01143   associated_participants_.erase(part);
01144   const BuiltinEndpointSet_t avail =
01145     pdata.participantProxy.availableBuiltinEndpoints;
01146 
01147   { // Release lock, so we can call into transport
01148     ACE_Reverse_Lock<ACE_Thread_Mutex> rev_lock(lock_);
01149     ACE_GUARD_RETURN(ACE_Reverse_Lock< ACE_Thread_Mutex>, rg, rev_lock, false);
01150 
01151     disassociate_helper(avail, DISC_BUILTIN_ENDPOINT_PUBLICATION_DETECTOR, part,
01152       ENTITYID_SEDP_BUILTIN_PUBLICATIONS_READER, publications_writer_);
01153     disassociate_helper(avail, DISC_BUILTIN_ENDPOINT_PUBLICATION_ANNOUNCER, part,
01154       ENTITYID_SEDP_BUILTIN_PUBLICATIONS_WRITER, *publications_reader_);
01155 
01156     disassociate_helper(avail, DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_DETECTOR, part,
01157       ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_READER, subscriptions_writer_);
01158     disassociate_helper(avail, DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_ANNOUNCER, part,
01159       ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_WRITER, *subscriptions_reader_);
01160 
01161     disassociate_helper(avail, BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_READER, part,
01162       ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER, participant_message_writer_);
01163     disassociate_helper(avail, BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_WRITER, part,
01164       ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER, *participant_message_reader_);
01165 
01166     //FUTURE: if/when topic propagation is supported, add it here
01167 
01168 #if defined(OPENDDS_SECURITY)
01169     using namespace DDS::Security;
01170 
01171     disassociate_helper(avail, SEDP_BUILTIN_PUBLICATIONS_SECURE_READER, part,
01172       ENTITYID_SEDP_BUILTIN_PUBLICATIONS_SECURE_READER, publications_secure_writer_);
01173     disassociate_helper(avail, SEDP_BUILTIN_PUBLICATIONS_SECURE_WRITER, part,
01174       ENTITYID_SEDP_BUILTIN_PUBLICATIONS_SECURE_WRITER, *publications_secure_reader_);
01175 
01176     disassociate_helper(avail, SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_READER, part,
01177       ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_READER, subscriptions_secure_writer_);
01178     disassociate_helper(avail, SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_WRITER, part,
01179       ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_WRITER, *subscriptions_secure_reader_);
01180 
01181     disassociate_helper(avail, BUILTIN_PARTICIPANT_MESSAGE_SECURE_READER, part,
01182       ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_SECURE_READER, participant_message_secure_writer_);
01183     disassociate_helper(avail, BUILTIN_PARTICIPANT_MESSAGE_SECURE_WRITER, part,
01184       ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_SECURE_WRITER, *participant_message_secure_reader_);
01185 
01186     disassociate_helper(avail, BUILTIN_PARTICIPANT_STATELESS_MESSAGE_READER, part,
01187       ENTITYID_P2P_BUILTIN_PARTICIPANT_STATELESS_READER, participant_stateless_message_writer_);
01188     disassociate_helper(avail, BUILTIN_PARTICIPANT_STATELESS_MESSAGE_WRITER, part,
01189       ENTITYID_P2P_BUILTIN_PARTICIPANT_STATELESS_WRITER, *participant_stateless_message_reader_);
01190 
01191     disassociate_helper(avail, BUILTIN_PARTICIPANT_VOLATILE_MESSAGE_SECURE_READER, part,
01192       ENTITYID_P2P_BUILTIN_PARTICIPANT_VOLATILE_SECURE_READER, participant_volatile_message_secure_writer_);
01193     disassociate_helper(avail, BUILTIN_PARTICIPANT_VOLATILE_MESSAGE_SECURE_WRITER, part,
01194       ENTITYID_P2P_BUILTIN_PARTICIPANT_VOLATILE_SECURE_WRITER, *participant_volatile_message_secure_reader_);
01195 
01196     disassociate_helper(avail, SPDP_BUILTIN_PARTICIPANT_SECURE_READER, part,
01197       ENTITYID_SPDP_RELIABLE_BUILTIN_PARTICIPANT_SECURE_READER, dcps_participant_secure_writer_);
01198     disassociate_helper(avail, SPDP_BUILTIN_PARTICIPANT_SECURE_WRITER, part,
01199       ENTITYID_SPDP_RELIABLE_BUILTIN_PARTICIPANT_SECURE_WRITER, *dcps_participant_secure_reader_);
01200 #endif
01201 
01202   }
01203 
01204   if (spdp_.has_discovered_participant(part)) {
01205     remove_entities_belonging_to(discovered_publications_, part);
01206     remove_entities_belonging_to(discovered_subscriptions_, part);
01207     return true;
01208   } else {
01209     return false;
01210   }
01211 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::inconsistent_topic ( const DCPS::RepoIdSet &  endpoints  )  const [private]

Definition at line 1376 of file Sedp.cpp.

References OpenDDS::DCPS::GUID_t::guidPrefix, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::local_publications_, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::local_subscriptions_, and OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::participant_id_.

01377 {
01378   using DCPS::RepoIdSet;
01379   for (RepoIdSet::const_iterator iter(eps.begin()); iter != eps.end(); ++iter) {
01380     if (0 == std::memcmp(participant_id_.guidPrefix, iter->guidPrefix,
01381                          sizeof(GuidPrefix_t))) {
01382       const bool reader = iter->entityId.entityKind & 4;
01383       if (reader) {
01384         const LocalSubscriptionCIter lsi = local_subscriptions_.find(*iter);
01385         if (lsi != local_subscriptions_.end()) {
01386           lsi->second.subscription_->inconsistent_topic();
01387           // Only make one callback per inconsistent topic, even if we have
01388           // more than one reader/writer on the topic -- it's the Topic object
01389           // that will actually see the InconsistentTopicStatus change.
01390           return;
01391         }
01392       } else {
01393         const LocalPublicationCIter lpi = local_publications_.find(*iter);
01394         if (lpi != local_publications_.end()) {
01395           lpi->second.publication_->inconsistent_topic();
01396           return; // see comment above
01397         }
01398       }
01399     }
01400   }
01401 }

DDS::ReturnCode_t OpenDDS::RTPS::Sedp::init ( const DCPS::RepoId guid,
const RtpsDiscovery disco,
DDS::DomainId_t  domainId 
)

Referenced by OpenDDS::RTPS::Spdp::init().

Here is the caller graph for this function:

bool OpenDDS::RTPS::Sedp::is_opendds ( const GUID_t &  endpoint  )  const [private]

Definition at line 2372 of file Sedp.cpp.

References OpenDDS::DCPS::ENTITYID_PARTICIPANT, OpenDDS::RTPS::Spdp::is_opendds(), and spdp_.

02373 {
02374   GUID_t participant = endpoint;
02375   participant.entityId = DCPS::ENTITYID_PARTICIPANT;
02376   return spdp_.is_opendds(participant);
02377 }

Here is the call graph for this function:

const ACE_INET_Addr & OpenDDS::RTPS::Sedp::local_address (  )  const

Definition at line 650 of file Sedp.cpp.

References OpenDDS::DCPS::static_rchandle_cast(), and transport_inst_.

Referenced by map_ipv4_to_ipv6().

00651 {
00652   DCPS::RtpsUdpInst_rch rtps_inst =
00653       DCPS::static_rchandle_cast<DCPS::RtpsUdpInst>(transport_inst_);
00654   return rtps_inst->local_address_;
00655 }

Here is the call graph for this function:

Here is the caller graph for this function:

static DCPS::RepoId OpenDDS::RTPS::Sedp::make_id ( const DCPS::RepoId participant_id,
const EntityId_t &  entity 
) [static, private]
bool OpenDDS::RTPS::Sedp::map_ipv4_to_ipv6 (  )  const

Definition at line 665 of file Sedp.cpp.

References local_address().

00666 {
00667   bool map = false;
00668   if (local_address().get_type() != AF_INET) {
00669     map = true;
00670   }
00671   return map;
00672 }

Here is the call graph for this function:

const ACE_INET_Addr & OpenDDS::RTPS::Sedp::multicast_group (  )  const

Definition at line 658 of file Sedp.cpp.

References OpenDDS::DCPS::static_rchandle_cast(), and transport_inst_.

Referenced by OpenDDS::RTPS::Spdp::init().

00659 {
00660   DCPS::RtpsUdpInst_rch rtps_inst =
00661       DCPS::static_rchandle_cast<DCPS::RtpsUdpInst>(transport_inst_);
00662   return rtps_inst->multicast_group_address_;
00663 }

Here is the call graph for this function:

Here is the caller graph for this function:

typedef OpenDDS::RTPS::Sedp::OPENDDS_MAP_CMP ( DCPS::RepoId  ,
MsgIdRdrDataPair  ,
DCPS::GUID_tKeyLessThan   
) [private]
typedef OpenDDS::RTPS::Sedp::OPENDDS_MAP_CMP ( DCPS::RepoId  ,
MsgIdWtrDataPair  ,
DCPS::GUID_tKeyLessThan   
) [private]
typedef OpenDDS::RTPS::Sedp::OPENDDS_MAP_CMP ( DCPS::RepoId  ,
LocalParticipantMessage  ,
DCPS::GUID_tKeyLessThan   
) [private]
void OpenDDS::RTPS::Sedp::populate_discovered_reader_msg ( DCPS::DiscoveredReaderData drd,
const DCPS::RepoId subscription_id,
const LocalSubscription &  sub 
) [private]
void OpenDDS::RTPS::Sedp::populate_discovered_writer_msg ( DCPS::DiscoveredWriterData dwd,
const DCPS::RepoId publication_id,
const LocalPublication &  pub 
) [private]
virtual void OpenDDS::RTPS::Sedp::populate_transport_locator_sequence ( DCPS::TransportLocatorSeq *&  tls,
DiscoveredPublicationIter iter,
const DCPS::RepoId writer 
) [private, virtual]
virtual void OpenDDS::RTPS::Sedp::populate_transport_locator_sequence ( DCPS::TransportLocatorSeq *&  tls,
DiscoveredSubscriptionIter iter,
const DCPS::RepoId reader 
) [private, virtual]
void OpenDDS::RTPS::Sedp::process_discovered_reader_data ( DCPS::MessageId  message_id,
const DCPS::DiscoveredReaderData rdata,
const DCPS::RepoId guid,
const DDS::Security::EndpointSecurityInfo security_info = NULL 
) [private]

Referenced by data_received().

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::process_discovered_writer_data ( DCPS::MessageId  message_id,
const DCPS::DiscoveredWriterData wdata,
const DCPS::RepoId guid,
const DDS::Security::EndpointSecurityInfo security_info = NULL 
) [private]

Referenced by data_received().

Here is the caller graph for this function:

DCPS::PublicationBuiltinTopicDataDataReaderImpl * OpenDDS::RTPS::Sedp::pub_bit (  )  [private]

Definition at line 1309 of file Sedp.cpp.

References OpenDDS::DCPS::LocalParticipant< EndpointManagerType >::bit_subscriber(), OpenDDS::DCPS::BUILT_IN_PUBLICATION_TOPIC, and spdp_.

Referenced by OpenDDS::RTPS::Sedp::Task::svc_i().

01310 {
01311   DDS::Subscriber_var sub = spdp_.bit_subscriber();
01312   if (!sub.in())
01313     return 0;
01314 
01315   DDS::DataReader_var d =
01316     sub->lookup_datareader(DCPS::BUILT_IN_PUBLICATION_TOPIC);
01317   return dynamic_cast<DCPS::PublicationBuiltinTopicDataDataReaderImpl*>(d.in());
01318 }

Here is the call graph for this function:

Here is the caller graph for this function:

template<typename Map >
void OpenDDS::RTPS::Sedp::remove_entities_belonging_to ( Map &  m,
RepoId  participant 
) [inline]

Definition at line 1215 of file Sedp.cpp.

References ACE_TEXT(), OpenDDS::DCPS::DCPS_debug_level, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::get_topic_name(), LM_DEBUG, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::match_endpoints(), OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::OPENDDS_MAP(), OPENDDS_STRING, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::remove_from_bit(), OpenDDS::RTPS::Spdp::shutting_down(), and spdp_.

01216 {
01217   participant.entityId.entityKey[0] = 0;
01218   participant.entityId.entityKey[1] = 0;
01219   participant.entityId.entityKey[2] = 0;
01220   participant.entityId.entityKind = 0;
01221   for (typename Map::iterator i = m.lower_bound(participant);
01222        i != m.end() && 0 == std::memcmp(i->first.guidPrefix,
01223                                         participant.guidPrefix,
01224                                         sizeof(GuidPrefix_t));) {
01225     OPENDDS_STRING topic_name = get_topic_name(i->second);
01226     OPENDDS_MAP(OPENDDS_STRING, TopicDetails)::iterator top_it =
01227       topics_.find(topic_name);
01228     if (top_it != topics_.end()) {
01229       top_it->second.endpoints_.erase(i->first);
01230       if (DCPS::DCPS_debug_level > 3) {
01231         ACE_DEBUG((LM_DEBUG,
01232                    ACE_TEXT("(%P|%t) Sedp::remove_entities_belonging_to - ")
01233                    ACE_TEXT("calling match_endpoints remove\n")));
01234       }
01235       match_endpoints(i->first, top_it->second, true /*remove*/);
01236       if (spdp_.shutting_down()) { return; }
01237     }
01238     remove_from_bit(i->second);
01239     m.erase(i++);
01240   }
01241 }

Here is the call graph for this function:

template<typename Map >
void OpenDDS::RTPS::Sedp::remove_entities_belonging_to ( Map &  m,
DCPS::RepoId  participant 
) [inline, private]

Referenced by disassociate().

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::remove_from_bit_i ( const DiscoveredSubscription &  sub  )  [private, virtual]

Reimplemented from OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >.

Definition at line 1254 of file Sedp.cpp.

References OpenDDS::RTPS::Sedp::Task::enqueue(), OpenDDS::RTPS::Sedp::Msg::MSG_REMOVE_FROM_SUB_BIT, and task_.

01255 {
01256 #ifndef DDS_HAS_MINIMUM_BIT
01257   task_.enqueue(Msg::MSG_REMOVE_FROM_SUB_BIT, sub.bit_ih_);
01258 #else
01259   ACE_UNUSED_ARG(sub);
01260 #endif /* DDS_HAS_MINIMUM_BIT */
01261 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::remove_from_bit_i ( const DiscoveredPublication &  pub  )  [private, virtual]

Reimplemented from OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >.

Definition at line 1244 of file Sedp.cpp.

References OpenDDS::RTPS::Sedp::Task::enqueue(), OpenDDS::RTPS::Sedp::Msg::MSG_REMOVE_FROM_PUB_BIT, and task_.

01245 {
01246 #ifndef DDS_HAS_MINIMUM_BIT
01247   task_.enqueue(Msg::MSG_REMOVE_FROM_PUB_BIT, pub.bit_ih_);
01248 #else
01249   ACE_UNUSED_ARG(pub);
01250 #endif /* DDS_HAS_MINIMUM_BIT */
01251 }

Here is the call graph for this function:

virtual DDS::ReturnCode_t OpenDDS::RTPS::Sedp::remove_publication_i ( const DCPS::RepoId publicationId  )  [private, virtual]
virtual DDS::ReturnCode_t OpenDDS::RTPS::Sedp::remove_subscription_i ( const DCPS::RepoId subscriptionId  )  [private, virtual]
void OpenDDS::RTPS::Sedp::set_inline_qos ( DCPS::TransportLocatorSeq locators  )  [static, private]

Definition at line 3472 of file Sedp.cpp.

References OPENDDS_STRING.

Referenced by OpenDDS::RTPS::Sedp::Reader::data_received().

03473 {
03474   const OPENDDS_STRING rtps_udp = "rtps_udp";
03475   for (CORBA::ULong i = 0; i < locators.length(); ++i) {
03476     if (locators[i].transport_type.in() == rtps_udp) {
03477       const CORBA::ULong len = locators[i].data.length();
03478       locators[i].data.length(len + 1);
03479       locators[i].data[len] = CORBA::Octet(1);
03480     }
03481   }
03482 }

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::shutdown ( void   ) 

Definition at line 1498 of file Sedp.cpp.

References participant_message_reader_, publications_reader_, OpenDDS::RTPS::Sedp::Task::shutdown(), subscriptions_reader_, and task_.

Referenced by OpenDDS::RTPS::Spdp::~Spdp().

01499 {
01500   task_.shutdown();
01501   publications_reader_->shutting_down_ = true;
01502   subscriptions_reader_->shutting_down_ = true;
01503   participant_message_reader_->shutting_down_ = true;
01504 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool OpenDDS::RTPS::Sedp::shutting_down ( void   )  const [private, virtual]

Implements OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >.

Definition at line 3673 of file Sedp.cpp.

References OpenDDS::RTPS::Spdp::shutting_down(), and spdp_.

03674 {
03675   return spdp_.shutting_down();
03676 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::signal_liveliness ( DDS::LivelinessQosPolicyKind  kind  ) 

Definition at line 2399 of file Sedp.cpp.

References ACE_TEXT(), DDS::Security::SecurityException::code, DDS::Security::TopicSecurityAttributes::is_liveliness_protected, LM_WARNING, DDS::Security::SecurityException::message, DDS::Security::SecurityException::minor_code, and signal_liveliness_unsecure().

Referenced by OpenDDS::RTPS::Spdp::signal_liveliness().

02400 {
02401 
02402 #if defined(OPENDDS_SECURITY)
02403   DDS::Security::SecurityException se = {"", 0, 0};
02404   DDS::Security::TopicSecurityAttributes attribs;
02405 
02406   if (is_security_enabled()) {
02407     // TODO: Pending issue DDSSEC12-28 Topic security attributes
02408     // may get changed to a different set of security attributes.
02409     bool ok = get_access_control()->get_topic_sec_attributes(
02410       get_permissions_handle(), "DCPSParticipantMessageSecure", attribs, se);
02411 
02412     if (ok) {
02413 
02414       if (attribs.is_liveliness_protected) {
02415         signal_liveliness_secure(kind);
02416 
02417       } else {
02418         signal_liveliness_unsecure(kind);
02419       }
02420 
02421     } else {
02422       ACE_DEBUG((LM_WARNING, ACE_TEXT("(%P|%t) WARNING: Sedp::signal_liveliness() - ")
02423         ACE_TEXT("Failure calling get_topic_sec_attributes(). Security Exception[%d.%d]: %C\n"),
02424           se.code, se.minor_code, se.message.in()));
02425     }
02426 
02427   } else {
02428 #endif
02429 
02430     signal_liveliness_unsecure(kind);
02431 
02432 #if defined(OPENDDS_SECURITY)
02433   }
02434 #endif
02435 }

Here is the call graph for this function:

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::signal_liveliness_unsecure ( DDS::LivelinessQosPolicyKind  kind  ) 

Definition at line 2438 of file Sedp.cpp.

References DDS::AUTOMATIC_LIVELINESS_QOS, automatic_liveliness_seq_, OpenDDS::DCPS::GUID_t::entityId, OpenDDS::DCPS::GUID_UNKNOWN, DDS::MANUAL_BY_PARTICIPANT_LIVELINESS_QOS, DDS::MANUAL_BY_TOPIC_LIVELINESS_QOS, manual_liveliness_seq_, OpenDDS::DCPS::EndpointManager< Security::SPDPdiscoveredParticipantData >::participant_id_, OpenDDS::RTPS::PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE, OpenDDS::RTPS::PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE, participant_message_writer_, OpenDDS::RTPS::ParticipantMessageData::participantGuid, and OpenDDS::RTPS::Sedp::Writer::write_participant_message().

Referenced by signal_liveliness().

02439 {
02440   ParticipantMessageData data;
02441   data.participantGuid = participant_id_;
02442 
02443   switch (kind) {
02444   case DDS::AUTOMATIC_LIVELINESS_QOS:
02445     data.participantGuid.entityId = DCPS::EntityIdConverter(PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE);
02446     participant_message_writer_.write_participant_message(data, GUID_UNKNOWN, automatic_liveliness_seq_);
02447     break;
02448 
02449   case DDS::MANUAL_BY_PARTICIPANT_LIVELINESS_QOS:
02450     data.participantGuid.entityId = DCPS::EntityIdConverter(PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE);
02451     participant_message_writer_.write_participant_message(data, GUID_UNKNOWN, manual_liveliness_seq_);
02452     break;
02453 
02454   case DDS::MANUAL_BY_TOPIC_LIVELINESS_QOS:
02455     // Do nothing.
02456     break;
02457   }
02458 }

Here is the call graph for this function:

Here is the caller graph for this function:

DCPS::SubscriptionBuiltinTopicDataDataReaderImpl * OpenDDS::RTPS::Sedp::sub_bit (  )  [private]

Definition at line 1321 of file Sedp.cpp.

References OpenDDS::DCPS::LocalParticipant< EndpointManagerType >::bit_subscriber(), OpenDDS::DCPS::BUILT_IN_SUBSCRIPTION_TOPIC, and spdp_.

Referenced by OpenDDS::RTPS::Sedp::Task::svc_i().

01322 {
01323   DDS::Subscriber_var sub = spdp_.bit_subscriber();
01324   if (!sub.in())
01325     return 0;
01326 
01327   DDS::DataReader_var d =
01328     sub->lookup_datareader(DCPS::BUILT_IN_SUBSCRIPTION_TOPIC);
01329   return dynamic_cast<DCPS::SubscriptionBuiltinTopicDataDataReaderImpl*>(d.in());
01330 }

Here is the call graph for this function:

Here is the caller graph for this function:

DCPS::TopicBuiltinTopicDataDataReaderImpl * OpenDDS::RTPS::Sedp::topic_bit (  )  [private]

Definition at line 1297 of file Sedp.cpp.

References OpenDDS::DCPS::LocalParticipant< EndpointManagerType >::bit_subscriber(), OpenDDS::DCPS::BUILT_IN_TOPIC_TOPIC, and spdp_.

01298 {
01299   DDS::Subscriber_var sub = spdp_.bit_subscriber();
01300   if (!sub.in())
01301     return 0;
01302 
01303   DDS::DataReader_var d =
01304     sub->lookup_datareader(DCPS::BUILT_IN_TOPIC_TOPIC);
01305   return dynamic_cast<DCPS::TopicBuiltinTopicDataDataReaderImpl*>(d.in());
01306 }

Here is the call graph for this function:

void OpenDDS::RTPS::Sedp::unicast_locators ( DCPS::LocatorSeq locators  )  const

Definition at line 602 of file Sedp.cpp.

References OpenDDS::RTPS::address_to_bytes(), OpenDDS::RTPS::address_to_kind(), OpenDDS::DCPS::get_interface_addrs(), OPENDDS_VECTOR, OpenDDS::DCPS::static_rchandle_cast(), TheServiceParticipant, and transport_inst_.

Referenced by OpenDDS::RTPS::Spdp::init().

00603 {
00604   DCPS::RtpsUdpInst_rch rtps_inst =
00605     DCPS::static_rchandle_cast<DCPS::RtpsUdpInst>(transport_inst_);
00606   using namespace OpenDDS::RTPS;
00607 
00608   CORBA::ULong idx = 0;
00609 
00610   // multicast first so it's preferred by remote peers
00611   if (rtps_inst->use_multicast_ && rtps_inst->multicast_group_address_ != ACE_INET_Addr()) {
00612     idx = locators.length();
00613     locators.length(idx + 1);
00614     locators[idx].kind = address_to_kind(rtps_inst->multicast_group_address_);
00615     locators[idx].port = rtps_inst->multicast_group_address_.get_port_number();
00616     RTPS::address_to_bytes(locators[idx].address,
00617       rtps_inst->multicast_group_address_);
00618   }
00619 
00620   //if local_address_string is empty, or only the port has been set
00621   //need to get interface addresses to populate into the locator
00622   if (rtps_inst->local_address_config_str_.empty() ||
00623       rtps_inst->local_address_config_str_.rfind(':') == 0) {
00624     typedef OPENDDS_VECTOR(ACE_INET_Addr) AddrVector;
00625     AddrVector addrs;
00626     if (TheServiceParticipant->default_address ().empty ()) {
00627       DCPS::get_interface_addrs(addrs);
00628     } else {
00629       addrs.push_back(ACE_INET_Addr(static_cast<u_short>(0), TheServiceParticipant->default_address().c_str()));
00630     }
00631     for (AddrVector::iterator adr_it = addrs.begin(); adr_it != addrs.end(); ++adr_it) {
00632       idx = locators.length();
00633       locators.length(idx + 1);
00634       locators[idx].kind = address_to_kind(*adr_it);
00635       locators[idx].port = rtps_inst->local_address_.get_port_number();
00636       RTPS::address_to_bytes(locators[idx].address,
00637         *adr_it);
00638     }
00639   } else {
00640     idx = locators.length();
00641     locators.length(idx + 1);
00642     locators[idx].kind = address_to_kind(rtps_inst->local_address_);
00643     locators[idx].port = rtps_inst->local_address_.get_port_number();
00644     RTPS::address_to_bytes(locators[idx].address,
00645       rtps_inst->local_address_);
00646   }
00647 }

Here is the call graph for this function:

Here is the caller graph for this function:

bool OpenDDS::RTPS::Sedp::update_publication_qos ( const DCPS::RepoId publicationId,
const DDS::DataWriterQos qos,
const DDS::PublisherQos publisherQos 
) [virtual]
bool OpenDDS::RTPS::Sedp::update_subscription_params ( const DCPS::RepoId subId,
const DDS::StringSeq params 
) [virtual]
bool OpenDDS::RTPS::Sedp::update_subscription_qos ( const DCPS::RepoId subscriptionId,
const DDS::DataReaderQos qos,
const DDS::SubscriberQos subscriberQos 
) [virtual]
bool OpenDDS::RTPS::Sedp::update_topic_qos ( const DCPS::RepoId topicId,
const DDS::TopicQos qos,
OPENDDS_STRING &  name 
) [virtual]
DDS::ReturnCode_t OpenDDS::RTPS::Sedp::write_dcps_participant_dispose ( const DCPS::RepoId part  ) 
void OpenDDS::RTPS::Sedp::write_durable_participant_message_data ( const DCPS::RepoId reader  )  [private]

Referenced by OpenDDS::RTPS::Sedp::Task::svc_i().

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::write_durable_publication_data ( const DCPS::RepoId reader  )  [private]

Referenced by OpenDDS::RTPS::Sedp::Task::svc_i().

Here is the caller graph for this function:

void OpenDDS::RTPS::Sedp::write_durable_subscription_data ( const DCPS::RepoId reader  )  [private]

Referenced by OpenDDS::RTPS::Sedp::Task::svc_i().

Here is the caller graph for this function:

DDS::ReturnCode_t OpenDDS::RTPS::Sedp::write_participant_message_data ( const DCPS::RepoId rid,
LocalParticipantMessage part,
const DCPS::RepoId reader = DCPS::GUID_UNKNOWN 
) [private]
DDS::ReturnCode_t OpenDDS::RTPS::Sedp::write_publication_data ( const DCPS::RepoId rid,
LocalPublication &  pub,
const DCPS::RepoId reader = DCPS::GUID_UNKNOWN 
) [private, virtual]
DDS::ReturnCode_t OpenDDS::RTPS::Sedp::write_publication_data_unsecure ( const DCPS::RepoId rid,
LocalPublication &  pub,
const DCPS::RepoId reader = DCPS::GUID_UNKNOWN 
) [private]
DDS::ReturnCode_t OpenDDS::RTPS::Sedp::write_subscription_data ( const DCPS::RepoId rid,
LocalSubscription &  pub,
const DCPS::RepoId reader = DCPS::GUID_UNKNOWN 
) [private, virtual]
DDS::ReturnCode_t OpenDDS::RTPS::Sedp::write_subscription_data_unsecure ( const DCPS::RepoId rid,
LocalSubscription &  pub,
const DCPS::RepoId reader = DCPS::GUID_UNKNOWN 
) [private]

Member Data Documentation

Definition at line 566 of file Sedp.h.

Referenced by disassociate(), and OpenDDS::RTPS::Sedp::Task::svc_i().

Definition at line 646 of file Sedp.h.

Referenced by signal_liveliness_unsecure().

Definition at line 566 of file Sedp.h.

Referenced by OpenDDS::RTPS::Sedp::Task::svc_i().

DeferredPublicationMap OpenDDS::RTPS::Sedp::deferred_publications_ [private]

Definition at line 545 of file Sedp.h.

Referenced by data_received(), and OpenDDS::RTPS::Sedp::Task::svc_i().

DeferredSubscriptionMap OpenDDS::RTPS::Sedp::deferred_subscriptions_ [private]

Definition at line 550 of file Sedp.h.

Referenced by data_received(), and OpenDDS::RTPS::Sedp::Task::svc_i().

Definition at line 142 of file Sedp.h.

LocalParticipantMessageMap OpenDDS::RTPS::Sedp::local_participant_messages_ [private]

Definition at line 496 of file Sedp.h.

Definition at line 647 of file Sedp.h.

Referenced by signal_liveliness_unsecure().

Definition at line 402 of file Sedp.h.

Referenced by associate(), disassociate(), and shutdown().

Definition at line 145 of file Sedp.h.

Definition at line 390 of file Sedp.h.

Referenced by associate(), disassociate(), and shutdown().

Definition at line 341 of file Sedp.h.

Referenced by disassociate(), and OpenDDS::RTPS::Sedp::Task::svc_i().

Definition at line 396 of file Sedp.h.

Referenced by associate(), disassociate(), and shutdown().

Definition at line 347 of file Sedp.h.

Referenced by disassociate(), and OpenDDS::RTPS::Sedp::Task::svc_i().

Definition at line 472 of file Sedp.h.

Referenced by local_address(), multicast_group(), and unicast_locators().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1