OpenDDS  Snapshot(2023/04/07-19:43)
Classes | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
OpenDDS::DCPS::InfoRepoDiscovery Class Reference

Discovery Strategy class that implements InfoRepo discovery. More...

#include <InfoRepoDiscovery.h>

Inheritance diagram for OpenDDS::DCPS::InfoRepoDiscovery:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::InfoRepoDiscovery:
Collaboration graph
[legend]

Classes

class  Config
 
struct  OrbRunner
 
class  StaticInitializer
 

Public Member Functions

 InfoRepoDiscovery (const RepoKey &key, const std::string &ior)
 
 InfoRepoDiscovery (const RepoKey &key, const DCPSInfo_var &info)
 
virtual ~InfoRepoDiscovery ()
 
std::string get_stringified_dcps_info_ior ()
 
DCPSInfo_var get_dcps_info ()
 
virtual bool active ()
 
int bit_transport_port () const
 
void bit_transport_port (int port)
 
std::string bit_transport_ip () const
 
void bit_transport_ip (const std::string &ip)
 
bool set_ORB (CORBA::ORB_ptr orb)
 
virtual RcHandle< BitSubscriberinit_bit (DomainParticipantImpl *participant)
 
virtual void fini_bit (DCPS::DomainParticipantImpl *participant)
 
virtual bool attach_participant (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId)
 
virtual OpenDDS::DCPS::GUID_t generate_participant_guid ()
 
virtual OpenDDS::DCPS::AddDomainStatus add_domain_participant (DDS::DomainId_t domain, const DDS::DomainParticipantQos &qos, XTypes::TypeLookupService_rch tls)
 
virtual OpenDDS::DCPS::AddDomainStatus add_domain_participant_secure (DDS::DomainId_t domain, const DDS::DomainParticipantQos &qos, XTypes::TypeLookupService_rch tls, const OpenDDS::DCPS::GUID_t &guid, DDS::Security::IdentityHandle id, DDS::Security::PermissionsHandle perm, DDS::Security::ParticipantCryptoHandle part_crypto)
 
virtual bool remove_domain_participant (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId)
 
virtual bool ignore_domain_participant (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &myParticipantId, const OpenDDS::DCPS::GUID_t &ignoreId)
 
virtual bool update_domain_participant_qos (DDS::DomainId_t domain, const OpenDDS::DCPS::GUID_t &participantId, const DDS::DomainParticipantQos &qos)
 
virtual OpenDDS::DCPS::TopicStatus assert_topic (OpenDDS::DCPS::GUID_t_out topicId, DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const char *topicName, const char *dataTypeName, const DDS::TopicQos &qos, bool hasDcpsKey, TopicCallbacks *topic_callbacks)
 
virtual OpenDDS::DCPS::TopicStatus find_topic (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, OpenDDS::DCPS::GUID_t_out topicId)
 
virtual OpenDDS::DCPS::TopicStatus remove_topic (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const OpenDDS::DCPS::GUID_t &topicId)
 
virtual bool ignore_topic (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &myParticipantId, const OpenDDS::DCPS::GUID_t &ignoreId)
 
virtual bool update_topic_qos (const OpenDDS::DCPS::GUID_t &topicId, DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const DDS::TopicQos &qos)
 
virtual OpenDDS::DCPS::GUID_t add_publication (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const OpenDDS::DCPS::GUID_t &topicId, OpenDDS::DCPS::DataWriterCallbacks_rch publication, const DDS::DataWriterQos &qos, const OpenDDS::DCPS::TransportLocatorSeq &transInfo, const DDS::PublisherQos &publisherQos, const XTypes::TypeInformation &type_info)
 
virtual bool remove_publication (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const OpenDDS::DCPS::GUID_t &publicationId)
 
virtual bool ignore_publication (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &myParticipantId, const OpenDDS::DCPS::GUID_t &ignoreId)
 
virtual bool update_publication_qos (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &partId, const OpenDDS::DCPS::GUID_t &dwId, const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos)
 
virtual OpenDDS::DCPS::GUID_t add_subscription (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const OpenDDS::DCPS::GUID_t &topicId, OpenDDS::DCPS::DataReaderCallbacks_rch subscription, const DDS::DataReaderQos &qos, const OpenDDS::DCPS::TransportLocatorSeq &transInfo, const DDS::SubscriberQos &subscriberQos, const char *filterClassName, const char *filterExpression, const DDS::StringSeq &exprParams, const XTypes::TypeInformation &type_info)
 
virtual bool remove_subscription (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const OpenDDS::DCPS::GUID_t &subscriptionId)
 
virtual bool ignore_subscription (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &myParticipantId, const OpenDDS::DCPS::GUID_t &ignoreId)
 
virtual bool update_subscription_qos (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &partId, const OpenDDS::DCPS::GUID_t &drId, const DDS::DataReaderQos &qos, const DDS::SubscriberQos &subscriberQos)
 
virtual bool update_subscription_params (DDS::DomainId_t domainId, const OpenDDS::DCPS::GUID_t &participantId, const OpenDDS::DCPS::GUID_t &subscriptionId, const DDS::StringSeq &params)
 
- Public Member Functions inherited from OpenDDS::DCPS::Discovery
 Discovery (const RepoKey &key)
 
RepoKey key () const
 
virtual TopicStatus assert_topic (GUID_t_out topicId, DDS::DomainId_t domainId, const GUID_t &participantId, const char *topicName, const char *dataTypeName, const DDS::TopicQos &qos, bool hasDcpsKey, TopicCallbacks *topic_callbacks)=0
 
virtual TopicStatus find_topic (DDS::DomainId_t domainId, const GUID_t &participantId, const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, GUID_t_out topicId)=0
 
virtual void pre_writer (DataWriterImpl *)
 
virtual void update_publication_locators (DDS::DomainId_t domainId, const GUID_t &partId, const GUID_t &dwId, const TransportLocatorSeq &transInfo)
 
virtual void pre_reader (DataReaderImpl *)
 
virtual void update_subscription_locators (DDS::DomainId_t domainId, const GUID_t &partId, const GUID_t &drId, const TransportLocatorSeq &transInfo)
 
virtual bool supports_liveliness () const
 
virtual void signal_liveliness (const DDS::DomainId_t, const GUID_t &, DDS::LivelinessQosPolicyKind)
 
virtual void request_remote_complete_type_objects (DDS::DomainId_t, const GUID_t &, const GUID_t &, const XTypes::TypeInformation &, TypeObjReqCond &cond)
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 

Private Member Functions

TransportConfig_rch bit_config ()
 
void removeDataReaderRemote (const GUID_t &subscriptionId)
 
void removeDataWriterRemote (const GUID_t &publicationId)
 
typedef OPENDDS_MAP_CMP (GUID_t, DataReaderRemote_var, DCPS::GUID_tKeyLessThan) DataReaderMap
 
typedef OPENDDS_MAP_CMP (GUID_t, DataWriterRemote_var, DCPS::GUID_tKeyLessThan) DataWriterMap
 

Private Attributes

std::string ior_
 
DCPSInfo_var info_
 
std::string bit_transport_ip_
 The builtin topic transport address. More...
 
int bit_transport_port_
 The builtin topic transport port number. More...
 
bool use_local_bit_config_
 
TransportConfig_rch bit_config_
 
CORBA::ORB_var orb_
 
bool orb_from_user_
 
DataReaderMap dataReaderMap_
 
DataWriterMap dataWriterMap_
 
ACE_Thread_Mutex lock_
 

Static Private Attributes

static OrbRunnerorb_runner_
 
static ACE_Thread_Mutex mtx_orb_runner_
 

Additional Inherited Members

- Public Types inherited from OpenDDS::DCPS::Discovery
typedef OPENDDS_STRING RepoKey
 
- Static Public Attributes inherited from OpenDDS::DCPS::Discovery
static const char * DEFAULT_REPO = "DEFAULT_REPO"
 Key value for the default repository IOR. More...
 
static const char * DEFAULT_RTPS = "DEFAULT_RTPS"
 
static const char * DEFAULT_STATIC = "DEFAULT_STATIC"
 
- Protected Member Functions inherited from OpenDDS::DCPS::Discovery
DDS::ReturnCode_t create_bit_topics (DomainParticipantImpl *participant)
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 

Detailed Description

Discovery Strategy class that implements InfoRepo discovery.

This class implements the Discovery interface for InfoRepo-based discovery.

Definition at line 46 of file InfoRepoDiscovery.h.

Constructor & Destructor Documentation

◆ InfoRepoDiscovery() [1/2]

OpenDDS::DCPS::InfoRepoDiscovery::InfoRepoDiscovery ( const RepoKey key,
const std::string &  ior 
)

Definition at line 137 of file InfoRepoDiscovery.cpp.

139  : Discovery(key),
140  ior_(ior),
142  use_local_bit_config_(false),
143  orb_from_user_(false)
144 {
145 }
sequence< octet > key
int bit_transport_port_
The builtin topic transport port number.
Discovery(const RepoKey &key)
Definition: Discovery.h:82

◆ InfoRepoDiscovery() [2/2]

OpenDDS::DCPS::InfoRepoDiscovery::InfoRepoDiscovery ( const RepoKey key,
const DCPSInfo_var &  info 
)

Definition at line 147 of file InfoRepoDiscovery.cpp.

149  : Discovery(key),
150  info_(info),
152  use_local_bit_config_(false),
153  orb_from_user_(false)
154 {
155 }
sequence< octet > key
int bit_transport_port_
The builtin topic transport port number.
Discovery(const RepoKey &key)
Definition: Discovery.h:82

◆ ~InfoRepoDiscovery()

OpenDDS::DCPS::InfoRepoDiscovery::~InfoRepoDiscovery ( )
virtual

Definition at line 157 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_info(), ACE_ERROR, ACE_TEXT(), ACE_String_Base< char >::c_str(), LM_ERROR, orb_from_user_, orb_runner_, OpenDDS::DCPS::InfoRepoDiscovery::OrbRunner::shutdown(), and OpenDDS::DCPS::InfoRepoDiscovery::OrbRunner::use_count_.

158 {
159  if (!orb_from_user_ && orb_runner_) {
160  if (0 == --orb_runner_->use_count_) {
161  try {
163  }
164  catch (const CORBA::Exception& ex) {
165  ACE_ERROR((LM_ERROR,
166  ACE_TEXT("ERROR: InfoRepoDiscovery::~InfoRepoDiscovery - ")
167  ACE_TEXT("Exception caught during ORB shutdown: %C.\n"),
168  ex._info().c_str()));
169  }
170 
171  delete orb_runner_;
172  orb_runner_ = 0;
173  }
174  }
175 }
#define ACE_ERROR(X)
const char * c_str(void) const
virtual ACE_CString _info(void) const=0
ACE_TEXT("TCP_Factory")

Member Function Documentation

◆ active()

bool OpenDDS::DCPS::InfoRepoDiscovery::active ( void  )
virtual

Reimplemented from OpenDDS::DCPS::Discovery.

Definition at line 421 of file InfoRepoDiscovery.cpp.

References get_dcps_info().

422 {
423  try {
424  // invoke a CORBA call, if we are active then there will be no exception
425  get_dcps_info()->_is_a("Not_An_IDL_Type");
426  return true;
427  } catch (const CORBA::Exception&) {
428  return false;
429  }
430 }

◆ add_domain_participant()

DCPS::AddDomainStatus OpenDDS::DCPS::InfoRepoDiscovery::add_domain_participant ( DDS::DomainId_t  domain,
const DDS::DomainParticipantQos qos,
XTypes::TypeLookupService_rch  tls 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 453 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), get_dcps_info(), OpenDDS::DCPS::GUID_UNKNOWN, and CORBA::is_nil().

456 {
457  try {
458  const DCPSInfo_var info = get_dcps_info();
459  if (!CORBA::is_nil(info)) {
460  return info->add_domain_participant(domainId, qos);
461  }
462  } catch (const CORBA::Exception& ex) {
463  ex._tao_print_exception("ERROR: InfoRepoDiscovery::add_domain_participant: ");
464  }
465  const DCPS::AddDomainStatus ads = {OpenDDS::DCPS::GUID_UNKNOWN, false /*federated*/};
466  return ads;
467 }
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82
Boolean is_nil(T x)

◆ add_domain_participant_secure()

DCPS::AddDomainStatus OpenDDS::DCPS::InfoRepoDiscovery::add_domain_participant_secure ( DDS::DomainId_t  domain,
const DDS::DomainParticipantQos qos,
XTypes::TypeLookupService_rch  tls,
const OpenDDS::DCPS::GUID_t guid,
DDS::Security::IdentityHandle  id,
DDS::Security::PermissionsHandle  perm,
DDS::Security::ParticipantCryptoHandle  part_crypto 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 471 of file InfoRepoDiscovery.cpp.

References OpenDDS::DCPS::GUID_UNKNOWN.

479 {
480  const DCPS::AddDomainStatus ads = {OpenDDS::DCPS::GUID_UNKNOWN, false /*federated*/};
481  return ads;
482 }
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59

◆ add_publication()

GUID_t OpenDDS::DCPS::InfoRepoDiscovery::add_publication ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const OpenDDS::DCPS::GUID_t topicId,
OpenDDS::DCPS::DataWriterCallbacks_rch  publication,
const DDS::DataWriterQos qos,
const OpenDDS::DCPS::TransportLocatorSeq transInfo,
const DDS::PublisherQos publisherQos,
const XTypes::TypeInformation type_info 
)
virtual

add the passed in publication into discovery. Discovery does not participate in memory management for the publication pointer, so it requires that the publication pointer remain valid until remove_publication is called.

Implements OpenDDS::DCPS::Discovery.

Definition at line 599 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_GUARD_RETURN, ACE_NEW_RETURN, dataWriterMap_, get_dcps_info(), OpenDDS::DCPS::GUID_UNKNOWN, lock_, orb_, and OpenDDS::XTypes::serialize_type_info().

607 {
608  GUID_t pubId;
609 
610  try {
611  DCPS::DataWriterRemoteImpl* writer_remote_impl = 0;
612  ACE_NEW_RETURN(writer_remote_impl,
613  DataWriterRemoteImpl(*publication),
615 
616  //this is taking ownership of the DataWriterRemoteImpl (server side) allocated above
617  PortableServer::ServantBase_var writer_remote(writer_remote_impl);
618 
619  //this is the client reference to the DataWriterRemoteImpl
620  OpenDDS::DCPS::DataWriterRemote_var dr_remote_obj =
621  servant_to_remote_reference(writer_remote_impl, orb_);
622  //turn into a octet seq to pass through generated files
623  DDS::OctetSeq serializedTypeInfo;
624  XTypes::serialize_type_info(type_info, serializedTypeInfo);
625 
626  pubId = get_dcps_info()->add_publication(domainId, participantId, topicId,
627  dr_remote_obj, qos, transInfo, publisherQos, serializedTypeInfo);
628 
630  // take ownership of the client allocated above
631  dataWriterMap_[pubId] = dr_remote_obj;
632 
633  } catch (const CORBA::Exception& ex) {
634  ex._tao_print_exception("ERROR: InfoRepoDiscovery::add_publication: ");
635  pubId = DCPS::GUID_UNKNOWN;
636  }
637 
638  return pubId;
639 }
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
void serialize_type_info(const TypeInformation &type_info, T &seq, const DCPS::Encoding *encoding_option=0)
Definition: TypeObject.h:3382
sequence< octet > OctetSeq
Definition: DdsDcpsCore.idl:64
#define ACE_NEW_RETURN(POINTER, CONSTRUCTOR, RET_VAL)
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ add_subscription()

GUID_t OpenDDS::DCPS::InfoRepoDiscovery::add_subscription ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const OpenDDS::DCPS::GUID_t topicId,
OpenDDS::DCPS::DataReaderCallbacks_rch  subscription,
const DDS::DataReaderQos qos,
const OpenDDS::DCPS::TransportLocatorSeq transInfo,
const DDS::SubscriberQos subscriberQos,
const char *  filterClassName,
const char *  filterExpression,
const DDS::StringSeq exprParams,
const XTypes::TypeInformation type_info 
)
virtual

add the passed in subscription into discovery. Discovery does not participate in memory management for the subscription pointer, so it requires that the subscription pointer remain valid until remove_subscription is called.

Implements OpenDDS::DCPS::Discovery.

Definition at line 695 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_GUARD_RETURN, ACE_NEW_RETURN, dataReaderMap_, get_dcps_info(), OpenDDS::DCPS::GUID_UNKNOWN, lock_, orb_, and OpenDDS::XTypes::serialize_type_info().

706 {
707  GUID_t subId;
708 
709  try {
710  DCPS::DataReaderRemoteImpl* reader_remote_impl = 0;
711  ACE_NEW_RETURN(reader_remote_impl,
712  DataReaderRemoteImpl(*subscription),
714 
715  //this is taking ownership of the DataReaderRemoteImpl (server side) allocated above
716  PortableServer::ServantBase_var reader_remote(reader_remote_impl);
717 
718  //this is the client reference to the DataReaderRemoteImpl
719  OpenDDS::DCPS::DataReaderRemote_var dr_remote_obj =
720  servant_to_remote_reference(reader_remote_impl, orb_);
721  //turn into a octet seq to pass through generated files
722  DDS::OctetSeq serializedTypeInfo;
723  XTypes::serialize_type_info(type_info, serializedTypeInfo);
724 
725  subId = get_dcps_info()->add_subscription(domainId, participantId, topicId,
726  dr_remote_obj, qos, transInfo, subscriberQos,
727  filterClassName, filterExpr, params,
728  serializedTypeInfo);
729 
731  // take ownership of the client allocated above
732  dataReaderMap_[subId] = dr_remote_obj;
733 
734  } catch (const CORBA::Exception& ex) {
735  ex._tao_print_exception("ERROR: InfoRepoDiscovery::add_subscription: ");
736  subId = DCPS::GUID_UNKNOWN;
737  }
738  return subId;
739 }
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
void serialize_type_info(const TypeInformation &type_info, T &seq, const DCPS::Encoding *encoding_option=0)
Definition: TypeObject.h:3382
sequence< octet > OctetSeq
Definition: DdsDcpsCore.idl:64
#define ACE_NEW_RETURN(POINTER, CONSTRUCTOR, RET_VAL)
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ assert_topic()

DCPS::TopicStatus OpenDDS::DCPS::InfoRepoDiscovery::assert_topic ( OpenDDS::DCPS::GUID_t_out  topicId,
DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const char *  topicName,
const char *  dataTypeName,
const DDS::TopicQos qos,
bool  hasDcpsKey,
TopicCallbacks topic_callbacks 
)
virtual

Definition at line 528 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), get_dcps_info(), and OpenDDS::DCPS::INTERNAL_ERROR.

532 {
533  try {
534  return get_dcps_info()->assert_topic(topicId, domainId, participantId, topicName,
535  dataTypeName, qos, hasDcpsKey);
536  } catch (const CORBA::Exception& ex) {
537  ex._tao_print_exception("ERROR: InfoRepoDiscovery::assert_topic: ");
538  return DCPS::INTERNAL_ERROR;
539  }
540 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ attach_participant()

bool OpenDDS::DCPS::InfoRepoDiscovery::attach_participant ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 435 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

437 {
438  try {
439  return get_dcps_info()->attach_participant(domainId, participantId);
440  } catch (const CORBA::Exception& ex) {
441  ex._tao_print_exception("ERROR: InfoRepoDiscovery::attach_participant: ");
442  return false;
443  }
444 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ bit_config()

TransportConfig_rch OpenDDS::DCPS::InfoRepoDiscovery::bit_config ( )
private

Definition at line 267 of file InfoRepoDiscovery.cpp.

References ACE_DEBUG, ACE_TEXT(), bit_config_, bit_transport_ip_, bit_transport_port_, OpenDDS::DCPS::TransportRegistry::create_config(), OpenDDS::DCPS::TransportRegistry::create_inst(), OpenDDS::DCPS::DCPS_debug_level, OpenDDS::DCPS::TransportRegistry::DEFAULT_INST_PREFIX, OpenDDS::DCPS::TransportRegistry::instance(), OpenDDS::DCPS::TransportConfig::instances_, OpenDDS::DCPS::RcHandle< T >::is_nil(), OpenDDS::DCPS::Discovery::key(), LM_INFO, lock_, OpenDDS::DCPS::static_rchandle_cast(), TheServiceParticipant, and use_local_bit_config_.

Referenced by init_bit().

268 {
269 #if !defined (DDS_HAS_MINIMUM_BIT)
271  if (bit_config_.is_nil()) {
272  const std::string cfg_name = TransportRegistry::DEFAULT_INST_PREFIX +
273  std::string("_BITTransportConfig_") + key();
275 
276  const std::string inst_name = TransportRegistry::DEFAULT_INST_PREFIX +
277  std::string("_BITTCPTransportInst_") + key();
278  TransportInst_rch inst =
279  TransportRegistry::instance()->create_inst(inst_name, "tcp");
280  bit_config_->instances_.push_back(inst);
281 
282  if (!use_local_bit_config_) {
283  bit_transport_ip_ = TheServiceParticipant->bit_transport_ip();
284  bit_transport_port_ = TheServiceParticipant->bit_transport_port();
285  }
286 
287  // Use a static cast to avoid dependency on the Tcp library
288  TcpInst_rch tcp_inst = static_rchandle_cast<TcpInst>(inst);
289 
290  tcp_inst->datalink_release_delay_ = 0;
291  if (!bit_transport_ip_.empty()) {
292  tcp_inst->local_address(bit_transport_port_,
293  bit_transport_ip_.c_str());
294  } else {
295  tcp_inst->local_address_set_port(bit_transport_port_);
296  }
297 
298  if (DCPS_debug_level) {
299  ACE_DEBUG((LM_INFO, ACE_TEXT("(%P|%t) InfoRepoDiscovery::bit_config")
300  ACE_TEXT(" - BIT tcp transport %C\n"), tcp_inst->local_address_string().c_str()));
301  }
302  }
303  return bit_config_;
304 #else
305  return TransportConfig_rch();
306 #endif
307 }
#define ACE_DEBUG(X)
RcHandle< T > static_rchandle_cast(const RcHandle< U > &h)
Definition: RcHandle_T.h:202
TransportConfig_rch create_config(const OPENDDS_STRING &name)
RcHandle< TcpInst > TcpInst_rch
Definition: TcpInst_rch.h:18
TransportInst_rch create_inst(const OPENDDS_STRING &name, const OPENDDS_STRING &transport_type)
static const char DEFAULT_INST_PREFIX[]
static TransportRegistry * instance()
Return a singleton instance of this class.
RepoKey key() const
Definition: Discovery.h:96
std::string bit_transport_ip_
The builtin topic transport address.
RcHandle< TransportInst > TransportInst_rch
The type definition for the smart-pointer to the underlying type.
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
int bit_transport_port_
The builtin topic transport port number.
ACE_TEXT("TCP_Factory")
#define TheServiceParticipant
RcHandle< TransportConfig > TransportConfig_rch

◆ bit_transport_ip() [1/2]

std::string OpenDDS::DCPS::InfoRepoDiscovery::bit_transport_ip ( ) const
inline

Definition at line 64 of file InfoRepoDiscovery.h.

64 { return bit_transport_ip_; }
std::string bit_transport_ip_
The builtin topic transport address.

◆ bit_transport_ip() [2/2]

void OpenDDS::DCPS::InfoRepoDiscovery::bit_transport_ip ( const std::string &  ip)
inline

Definition at line 65 of file InfoRepoDiscovery.h.

65  {
67  use_local_bit_config_ = true;
68  }
std::string bit_transport_ip_
The builtin topic transport address.

◆ bit_transport_port() [1/2]

int OpenDDS::DCPS::InfoRepoDiscovery::bit_transport_port ( ) const
inline

Definition at line 58 of file InfoRepoDiscovery.h.

58 { return bit_transport_port_; }
int bit_transport_port_
The builtin topic transport port number.

◆ bit_transport_port() [2/2]

void OpenDDS::DCPS::InfoRepoDiscovery::bit_transport_port ( int  port)
inline

Definition at line 59 of file InfoRepoDiscovery.h.

59  {
60  bit_transport_port_ = port;
61  use_local_bit_config_ = true;
62  }
int bit_transport_port_
The builtin topic transport port number.

◆ find_topic()

DCPS::TopicStatus OpenDDS::DCPS::InfoRepoDiscovery::find_topic ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const char *  topicName,
CORBA::String_out  dataTypeName,
DDS::TopicQos_out  qos,
OpenDDS::DCPS::GUID_t_out  topicId 
)
virtual

Definition at line 543 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), get_dcps_info(), and OpenDDS::DCPS::INTERNAL_ERROR.

549 {
550  try {
551  return get_dcps_info()->find_topic(domainId, topicName, dataTypeName, qos, topicId);
552  } catch (const CORBA::Exception& ex) {
553  ex._tao_print_exception("ERROR: InfoRepoDiscovery::find_topic: ");
554  return DCPS::INTERNAL_ERROR;
555  }
556 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ fini_bit()

void OpenDDS::DCPS::InfoRepoDiscovery::fini_bit ( DCPS::DomainParticipantImpl participant)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 415 of file InfoRepoDiscovery.cpp.

416 {
417  // nothing to do for DCPSInfoRepo
418 }

◆ generate_participant_guid()

OpenDDS::DCPS::GUID_t OpenDDS::DCPS::InfoRepoDiscovery::generate_participant_guid ( )
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 447 of file InfoRepoDiscovery.cpp.

References OpenDDS::DCPS::GUID_UNKNOWN.

448 {
449  return GUID_UNKNOWN;
450 }
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59

◆ get_dcps_info()

DCPSInfo_var OpenDDS::DCPS::InfoRepoDiscovery::get_dcps_info ( )

Definition at line 211 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_ERROR, ACE_GUARD_RETURN, ACE_TEXT(), ACE_Task_Base::activate(), ACE_ARGV_T< CHAR_TYPE >::argc(), ACE_ARGV_T< CHAR_TYPE >::argv(), OpenDDS::DCPS::DEFAULT_ORB_NAME, info_, ior_, CORBA::is_nil(), OpenDDS::DCPS::Discovery::key(), LM_ERROR, lock_, mtx_orb_runner_, orb_, OpenDDS::DCPS::InfoRepoDiscovery::OrbRunner::orb_, CORBA::ORB_init(), orb_runner_, TheServiceParticipant, and OpenDDS::DCPS::InfoRepoDiscovery::OrbRunner::use_count_.

Referenced by active(), add_domain_participant(), add_publication(), add_subscription(), assert_topic(), attach_participant(), find_topic(), ignore_domain_participant(), ignore_publication(), ignore_subscription(), ignore_topic(), remove_domain_participant(), remove_publication(), remove_subscription(), remove_topic(), update_domain_participant_qos(), update_publication_qos(), update_subscription_params(), update_subscription_qos(), and update_topic_qos().

212 {
214  if (CORBA::is_nil(this->info_.in())) {
215 
216  if (!orb_) {
218  if (!orb_runner_) {
219  orb_runner_ = new OrbRunner;
220  ACE_ARGV* argv = TheServiceParticipant->ORB_argv();
221  int argc = argv->argc();
222  orb_runner_->orb_ =
223  CORBA::ORB_init(argc, argv->argv(), DEFAULT_ORB_NAME);
224  orb_runner_->use_count_ = 1;
226 
227  CORBA::Object_var rp =
228  orb_runner_->orb_->resolve_initial_references(ROOT_POA);
229  PortableServer::POA_var poa = PortableServer::POA::_narrow(rp);
230  PortableServer::POAManager_var poa_manager = poa->the_POAManager();
231  poa_manager->activate();
232  } else {
234  }
235  orb_ = orb_runner_->orb_;
236  }
237 
238  try {
239  this->info_ = get_repo(this->ior_.c_str(), orb_);
240 
241  if (CORBA::is_nil(this->info_.in())) {
242  ACE_ERROR((LM_ERROR,
243  ACE_TEXT("(%P|%t) ERROR: InfoRepoDiscovery::get_dcps_info: ")
244  ACE_TEXT("unable to narrow DCPSInfo (%C) for key %C.\n"),
245  this->ior_.c_str(),
246  this->key().c_str()));
247  return DCPSInfo::_nil();
248  }
249 
250  } catch (const CORBA::Exception& ex) {
251  ex._tao_print_exception("ERROR: InfoRepoDiscovery::get_dcps_info: failed to resolve ior - ");
252  return DCPSInfo::_nil();
253  }
254  }
255 
256  return this->info_;
257 }
#define ACE_ERROR(X)
RepoKey key() const
Definition: Discovery.h:96
static ACE_Thread_Mutex mtx_orb_runner_
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
int argc(void) const
const char DEFAULT_ORB_NAME[]
ACE_TEXT("TCP_Factory")
CHAR_TYPE ** argv(void)
ORB_ptr ORB_init(int &argc, char *argv[], const char *orb_name=0)
virtual int activate(long flags=THR_NEW_LWP|THR_JOINABLE|THR_INHERIT_SCHED, int n_threads=1, int force_active=0, long priority=ACE_DEFAULT_THREAD_PRIORITY, int grp_id=-1, ACE_Task_Base *task=0, ACE_hthread_t thread_handles[]=0, void *stack[]=0, size_t stack_size[]=0, ACE_thread_t thread_ids[]=0, const char *thr_name[]=0)
#define TheServiceParticipant
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82
Boolean is_nil(T x)

◆ get_stringified_dcps_info_ior()

std::string OpenDDS::DCPS::InfoRepoDiscovery::get_stringified_dcps_info_ior ( )

Definition at line 260 of file InfoRepoDiscovery.cpp.

References ior_, and lock_.

◆ ignore_domain_participant()

bool OpenDDS::DCPS::InfoRepoDiscovery::ignore_domain_participant ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t myParticipantId,
const OpenDDS::DCPS::GUID_t ignoreId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 499 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

502 {
503  try {
504  get_dcps_info()->ignore_domain_participant(domainId, myParticipantId, ignoreId);
505  return true;
506  } catch (const CORBA::Exception& ex) {
507  ex._tao_print_exception("ERROR: InfoRepoDiscovery::ignore_domain_participant: ");
508  return false;
509  }
510 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ ignore_publication()

bool OpenDDS::DCPS::InfoRepoDiscovery::ignore_publication ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t myParticipantId,
const OpenDDS::DCPS::GUID_t ignoreId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 662 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

665 {
666  try {
667  get_dcps_info()->ignore_publication(domainId, participantId, ignoreId);
668  return true;
669  } catch (const CORBA::Exception& ex) {
670  ex._tao_print_exception("ERROR: InfoRepoDiscovery::ignore_publication: ");
671  return false;
672  }
673 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ ignore_subscription()

bool OpenDDS::DCPS::InfoRepoDiscovery::ignore_subscription ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t myParticipantId,
const OpenDDS::DCPS::GUID_t ignoreId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 762 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

765 {
766  try {
767  get_dcps_info()->ignore_subscription(domainId, participantId, ignoreId);
768  return true;
769  } catch (const CORBA::Exception& ex) {
770  ex._tao_print_exception("ERROR: InfoRepoDiscovery::ignore_subscription: ");
771  return false;
772  }
773 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ ignore_topic()

bool OpenDDS::DCPS::InfoRepoDiscovery::ignore_topic ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t myParticipantId,
const OpenDDS::DCPS::GUID_t ignoreId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 571 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

573 {
574  try {
575  get_dcps_info()->ignore_topic(domainId, myParticipantId, ignoreId);
576  return true;
577  } catch (const CORBA::Exception& ex) {
578  ex._tao_print_exception("ERROR: InfoRepoDiscovery::ignore_topic: ");
579  return false;
580  }
581 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ init_bit()

RcHandle< BitSubscriber > OpenDDS::DCPS::InfoRepoDiscovery::init_bit ( DomainParticipantImpl participant)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 310 of file InfoRepoDiscovery.cpp.

References ACE_DEBUG, ACE_ERROR, ACE_TEXT(), OpenDDS::DCPS::TransportRegistry::bind_config(), bit_config(), OpenDDS::DCPS::BUILT_IN_PARTICIPANT_TOPIC, OpenDDS::DCPS::BUILT_IN_PUBLICATION_TOPIC, OpenDDS::DCPS::BUILT_IN_SUBSCRIPTION_TOPIC, OpenDDS::DCPS::BUILT_IN_TOPIC_TOPIC, OpenDDS::DCPS::Discovery::create_bit_topics(), OpenDDS::DCPS::DomainParticipantImpl::create_subscriber(), OpenDDS::DCPS::DCPS_debug_level, OpenDDS::DCPS::DEFAULT_STATUS_MASK, DDS::DataReaderQos::durability, OpenDDS::DCPS::DomainParticipantImpl::federated(), OpenDDS::DCPS::TransportRegistry::instance(), OpenDDS::DCPS::Discovery::key(), DDS::DurabilityQosPolicy::kind, DDS::LivelinessQosPolicy::lease_duration, DDS::DataReaderQos::liveliness, LM_ERROR, LM_INFO, OpenDDS::DCPS::DomainParticipantImpl::lookup_topicdescription(), DDS::Duration_t::nanosec, DDS::RETCODE_OK, OpenDDS::DCPS::retcode_to_string(), DDS::Duration_t::sec, SUBSCRIBER_QOS_DEFAULT, TheServiceParticipant, and DDS::TRANSIENT_LOCAL_DURABILITY_QOS.

311 {
312 #if defined (DDS_HAS_MINIMUM_BIT)
313  ACE_UNUSED_ARG(participant);
314  return RcHandle<BitSubscriber>();
315 #else
316  if (!TheServiceParticipant->get_BIT()) {
317  return RcHandle<BitSubscriber>();
318  }
319 
320  if (create_bit_topics(participant) != DDS::RETCODE_OK) {
321  return RcHandle<BitSubscriber>();
322  }
323 
324  DDS::Subscriber_var bit_subscriber =
325  participant->create_subscriber(SUBSCRIBER_QOS_DEFAULT,
326  DDS::SubscriberListener::_nil(),
328  try {
329  TransportConfig_rch config = bit_config();
330  TransportRegistry::instance()->bind_config(config, bit_subscriber);
331 
332  } catch (const Transport::Exception&) {
333  ACE_ERROR((LM_ERROR, "(%P|%t) InfoRepoDiscovery::init_bit, "
334  "exception during transport initialization\n"));
335  return RcHandle<BitSubscriber>();
336  }
337 
338  // DataReaders
339  try {
340  DDS::DataReaderQos participantReaderQos;
341  bit_subscriber->get_default_datareader_qos(participantReaderQos);
342  participantReaderQos.durability.kind = DDS::TRANSIENT_LOCAL_DURABILITY_QOS;
343 
344  if (participant->federated()) {
345  participantReaderQos.liveliness.lease_duration.nanosec = 0;
346  participantReaderQos.liveliness.lease_duration.sec =
347  TheServiceParticipant->federation_liveliness();
348  }
349 
350  DDS::TopicDescription_var bit_part_topic =
351  participant->lookup_topicdescription(BUILT_IN_PARTICIPANT_TOPIC);
352 
353  DDS::DataReader_var dr =
354  bit_subscriber->create_datareader(bit_part_topic,
355  participantReaderQos,
356  DDS::DataReaderListener::_nil(),
358 
359  if (participant->federated()) {
360  DDS::ParticipantBuiltinTopicDataDataReader_var pbit_dr =
361  DDS::ParticipantBuiltinTopicDataDataReader::_narrow(dr.in());
362 
363  DataReaderListener_var failover = new FailoverListener(key());
364  pbit_dr->set_listener(failover, DEFAULT_STATUS_MASK);
365  // No need to invoke the listener.
366  }
367 
368  DDS::DataReaderQos dr_qos;
369  bit_subscriber->get_default_datareader_qos(dr_qos);
371 
372  DDS::TopicDescription_var bit_topic_topic =
373  participant->lookup_topicdescription(BUILT_IN_TOPIC_TOPIC);
374 
375  dr = bit_subscriber->create_datareader(bit_topic_topic,
376  dr_qos,
377  DDS::DataReaderListener::_nil(),
379 
380  DDS::TopicDescription_var bit_pub_topic =
381  participant->lookup_topicdescription(BUILT_IN_PUBLICATION_TOPIC);
382 
383  dr = bit_subscriber->create_datareader(bit_pub_topic,
384  dr_qos,
385  DDS::DataReaderListener::_nil(),
387 
388  DDS::TopicDescription_var bit_sub_topic =
389  participant->lookup_topicdescription(BUILT_IN_SUBSCRIPTION_TOPIC);
390 
391  dr = bit_subscriber->create_datareader(bit_sub_topic,
392  dr_qos,
393  DDS::DataReaderListener::_nil(),
395 
396  const DDS::ReturnCode_t ret = bit_subscriber->enable();
397  if (ret != DDS::RETCODE_OK) {
398  if (DCPS_debug_level) {
399  ACE_DEBUG((LM_INFO, ACE_TEXT("(%P|%t) InfoRepoDiscovery::init_bit")
400  ACE_TEXT(" - Error <%C> enabling subscriber\n"), retcode_to_string(ret)));
401  }
402  return RcHandle<BitSubscriber>();
403  }
404 
405  } catch (const CORBA::Exception&) {
406  ACE_ERROR((LM_ERROR, "(%P|%t) InfoRepoDiscovery::init_bit, "
407  "exception during DataReader initialization\n"));
408  return RcHandle<BitSubscriber>();
409  }
410  return make_rch<BitSubscriber>(bit_subscriber);
411 #endif
412 }
#define ACE_DEBUG(X)
#define ACE_ERROR(X)
const char * retcode_to_string(DDS::ReturnCode_t value)
Definition: DCPS_Utils.cpp:29
const ReturnCode_t RETCODE_OK
LivelinessQosPolicy liveliness
const DDS::StatusMask DEFAULT_STATUS_MASK
const char *const BUILT_IN_PARTICIPANT_TOPIC
static TransportRegistry * instance()
Return a singleton instance of this class.
RepoKey key() const
Definition: Discovery.h:96
const char *const BUILT_IN_PUBLICATION_TOPIC
DurabilityQosPolicy durability
DurabilityQosPolicyKind kind
unsigned long nanosec
Definition: DdsDcpsCore.idl:69
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30
ACE_TEXT("TCP_Factory")
#define SUBSCRIBER_QOS_DEFAULT
const char *const BUILT_IN_SUBSCRIPTION_TOPIC
void bind_config(const OPENDDS_STRING &name, DDS::Entity_ptr entity)
DDS::ReturnCode_t create_bit_topics(DomainParticipantImpl *participant)
Definition: Discovery.cpp:51
const char *const BUILT_IN_TOPIC_TOPIC
#define TheServiceParticipant
RcHandle< TransportConfig > TransportConfig_rch

◆ OPENDDS_MAP_CMP() [1/2]

typedef OpenDDS::DCPS::InfoRepoDiscovery::OPENDDS_MAP_CMP ( GUID_t  ,
DataReaderRemote_var  ,
DCPS::GUID_tKeyLessThan   
)
private

◆ OPENDDS_MAP_CMP() [2/2]

typedef OpenDDS::DCPS::InfoRepoDiscovery::OPENDDS_MAP_CMP ( GUID_t  ,
DataWriterRemote_var  ,
DCPS::GUID_tKeyLessThan   
)
private

◆ remove_domain_participant()

bool OpenDDS::DCPS::InfoRepoDiscovery::remove_domain_participant ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 486 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

488 {
489  try {
490  get_dcps_info()->remove_domain_participant(domainId, participantId);
491  return true;
492  } catch (const CORBA::Exception& ex) {
493  ex._tao_print_exception("ERROR: InfoRepoDiscovery::remove_domain_participant: ");
494  return false;
495  }
496 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ remove_publication()

bool OpenDDS::DCPS::InfoRepoDiscovery::remove_publication ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const OpenDDS::DCPS::GUID_t publicationId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 642 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_GUARD_RETURN, get_dcps_info(), lock_, and removeDataWriterRemote().

645 {
646  {
647  ACE_GUARD_RETURN(ACE_Thread_Mutex, g, this->lock_, false);
648  removeDataWriterRemote(publicationId);
649  }
650  bool removed = false;
651  try {
652  get_dcps_info()->remove_publication(domainId, participantId, publicationId);
653  removed = true;
654  } catch (const CORBA::Exception& ex) {
655  ex._tao_print_exception("ERROR: InfoRepoDiscovery::remove_publication: ");
656  }
657 
658  return removed;
659 }
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82
void removeDataWriterRemote(const GUID_t &publicationId)

◆ remove_subscription()

bool OpenDDS::DCPS::InfoRepoDiscovery::remove_subscription ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const OpenDDS::DCPS::GUID_t subscriptionId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 742 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), ACE_GUARD_RETURN, get_dcps_info(), lock_, and removeDataReaderRemote().

745 {
746  {
747  ACE_GUARD_RETURN(ACE_Thread_Mutex, g, this->lock_, false);
748  removeDataReaderRemote(subscriptionId);
749  }
750  bool removed = false;
751  try {
752  get_dcps_info()->remove_subscription(domainId, participantId, subscriptionId);
753  removed = true;
754  } catch (const CORBA::Exception& ex) {
755  ex._tao_print_exception("ERROR: InfoRepoDiscovery::remove_subscription: ");
756  }
757 
758  return removed;
759 }
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
void removeDataReaderRemote(const GUID_t &subscriptionId)
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ remove_topic()

DCPS::TopicStatus OpenDDS::DCPS::InfoRepoDiscovery::remove_topic ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const OpenDDS::DCPS::GUID_t topicId 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 559 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), get_dcps_info(), and OpenDDS::DCPS::INTERNAL_ERROR.

561 {
562  try {
563  return get_dcps_info()->remove_topic(domainId, participantId, topicId);
564  } catch (const CORBA::Exception& ex) {
565  ex._tao_print_exception("ERROR: InfoRepoDiscovery::remove_topic: ");
566  return DCPS::INTERNAL_ERROR;
567  }
568 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ removeDataReaderRemote()

void OpenDDS::DCPS::InfoRepoDiscovery::removeDataReaderRemote ( const GUID_t subscriptionId)
private

Definition at line 811 of file InfoRepoDiscovery.cpp.

References ACE_ERROR, ACE_TEXT(), dataReaderMap_, OpenDDS::DCPS::DataReaderRemoteImpl::detach_parent(), LM_ERROR, and orb_.

Referenced by remove_subscription().

812 {
813  DataReaderMap::iterator drr = dataReaderMap_.find(subscriptionId);
814  if (drr == dataReaderMap_.end()) {
815  ACE_ERROR((LM_ERROR,
816  ACE_TEXT("(%P|%t) ERROR: InfoRepoDiscovery::removeDataReaderRemote: ")
817  ACE_TEXT(" could not find DataReader for subscriptionId.\n")));
818  return;
819  }
820 
821  try {
822  DataReaderRemoteImpl* impl =
823  remote_reference_to_servant<DataReaderRemoteImpl>(drr->second.in(), orb_);
824  impl->detach_parent();
825  deactivate_remote_object(drr->second.in(), orb_);
826  } catch (const CORBA::BAD_INV_ORDER&) {
827  // The orb may throw ::CORBA::BAD_INV_ORDER when is has been shutdown.
828  // Ignore it anyway.
829  } catch (const CORBA::OBJECT_NOT_EXIST&) {
830  // Same for CORBA::OBJECT_NOT_EXIST
831  }
832 
833  dataReaderMap_.erase(drr);
834 }
#define ACE_ERROR(X)
ACE_TEXT("TCP_Factory")

◆ removeDataWriterRemote()

void OpenDDS::DCPS::InfoRepoDiscovery::removeDataWriterRemote ( const GUID_t publicationId)
private

Definition at line 837 of file InfoRepoDiscovery.cpp.

References ACE_ERROR, ACE_TEXT(), dataWriterMap_, OpenDDS::DCPS::DataWriterRemoteImpl::detach_parent(), LM_ERROR, orb_, and OpenDDS::DCPS::REPO_SECTION_NAME.

Referenced by remove_publication().

838 {
839  DataWriterMap::iterator dwr = dataWriterMap_.find(publicationId);
840  if (dwr == dataWriterMap_.end()) {
841  ACE_ERROR((LM_ERROR,
842  ACE_TEXT("(%P|%t) ERROR: InfoRepoDiscovery::removeDataWriterRemote: ")
843  ACE_TEXT(" could not find DataWriter for publicationId.\n")));
844  return;
845  }
846 
847  try {
848  DataWriterRemoteImpl* impl =
849  remote_reference_to_servant<DataWriterRemoteImpl>(dwr->second.in(), orb_);
850  impl->detach_parent();
851  deactivate_remote_object(dwr->second.in(), orb_);
852  } catch (const CORBA::BAD_INV_ORDER&) {
853  // The orb may throw ::CORBA::BAD_INV_ORDER when is has been shutdown.
854  // Ignore it anyway.
855  } catch (const CORBA::OBJECT_NOT_EXIST&) {
856  // Same for CORBA::OBJECT_NOT_EXIST
857  }
858 
859  dataWriterMap_.erase(dwr);
860 }
#define ACE_ERROR(X)
ACE_TEXT("TCP_Factory")

◆ set_ORB()

bool OpenDDS::DCPS::InfoRepoDiscovery::set_ORB ( CORBA::ORB_ptr  orb)

User provides an ORB for OpenDDS to use.

Note
The user is responsible for running the ORB. true if the operation succeeds

Definition at line 178 of file InfoRepoDiscovery.cpp.

References CORBA::ORB::_duplicate(), TAO_Pseudo_Var_T< ORB >::in(), TAO_Pseudo_Var_T< Object >::in(), CORBA::is_nil(), orb_, orb_from_user_, and CORBA::ORB::string_to_object().

179 {
180  if (!CORBA::is_nil (orb_.in()) || CORBA::is_nil (orb)) {
181  return false;
182  }
183 
185  orb_from_user_ = true;
186  return true;
187 }
static CORBA::ORB_ptr _duplicate(CORBA::ORB_ptr orb)
_in_type in(void) const
Boolean is_nil(T x)

◆ update_domain_participant_qos()

bool OpenDDS::DCPS::InfoRepoDiscovery::update_domain_participant_qos ( DDS::DomainId_t  domain,
const OpenDDS::DCPS::GUID_t participantId,
const DDS::DomainParticipantQos qos 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 513 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

516 {
517  try {
518  return get_dcps_info()->update_domain_participant_qos(domainId, participant, qos);
519  } catch (const CORBA::Exception& ex) {
520  ex._tao_print_exception("ERROR: InfoRepoDiscovery::update_domain_participant_qos: ");
521  return false;
522  }
523 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ update_publication_qos()

bool OpenDDS::DCPS::InfoRepoDiscovery::update_publication_qos ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t partId,
const OpenDDS::DCPS::GUID_t dwId,
const DDS::DataWriterQos qos,
const DDS::PublisherQos publisherQos 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 676 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

681 {
682  try {
683  return get_dcps_info()->update_publication_qos(domainId, participantId, dwId,
684  qos, publisherQos);
685  } catch (const CORBA::Exception& ex) {
686  ex._tao_print_exception("ERROR: InfoRepoDiscovery::update_publication_qos: ");
687  return false;
688  }
689 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ update_subscription_params()

bool OpenDDS::DCPS::InfoRepoDiscovery::update_subscription_params ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const OpenDDS::DCPS::GUID_t subscriptionId,
const DDS::StringSeq params 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 792 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

797 {
798  try {
799  return get_dcps_info()->update_subscription_params(domainId, participantId,
800  subId, params);
801  } catch (const CORBA::Exception& ex) {
802  ex._tao_print_exception("ERROR: InfoRepoDiscovery::update_subscription_params: ");
803  return false;
804  }
805 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ update_subscription_qos()

bool OpenDDS::DCPS::InfoRepoDiscovery::update_subscription_qos ( DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t partId,
const OpenDDS::DCPS::GUID_t drId,
const DDS::DataReaderQos qos,
const DDS::SubscriberQos subscriberQos 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 776 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

781 {
782  try {
783  return get_dcps_info()->update_subscription_qos(domainId, participantId,
784  drId, qos, subQos);
785  } catch (const CORBA::Exception& ex) {
786  ex._tao_print_exception("ERROR: InfoRepoDiscovery::update_subscription_qos: ");
787  return false;
788  }
789 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

◆ update_topic_qos()

bool OpenDDS::DCPS::InfoRepoDiscovery::update_topic_qos ( const OpenDDS::DCPS::GUID_t topicId,
DDS::DomainId_t  domainId,
const OpenDDS::DCPS::GUID_t participantId,
const DDS::TopicQos qos 
)
virtual

Implements OpenDDS::DCPS::Discovery.

Definition at line 584 of file InfoRepoDiscovery.cpp.

References CORBA::Exception::_tao_print_exception(), and get_dcps_info().

586 {
587  try {
588  return get_dcps_info()->update_topic_qos(topicId, domainId, participantId, qos);
589  } catch (const CORBA::Exception& ex) {
590  ex._tao_print_exception("ERROR: InfoRepoDiscovery::update_topic_qos: ");
591  return false;
592  }
593 }
void _tao_print_exception(const char *info, FILE *f=stdout) const
Definition: Exception.cpp:82

Member Data Documentation

◆ bit_config_

TransportConfig_rch OpenDDS::DCPS::InfoRepoDiscovery::bit_config_
private

Definition at line 238 of file InfoRepoDiscovery.h.

Referenced by bit_config().

◆ bit_transport_ip_

std::string OpenDDS::DCPS::InfoRepoDiscovery::bit_transport_ip_
private

The builtin topic transport address.

Definition at line 232 of file InfoRepoDiscovery.h.

Referenced by bit_config().

◆ bit_transport_port_

int OpenDDS::DCPS::InfoRepoDiscovery::bit_transport_port_
private

The builtin topic transport port number.

Definition at line 235 of file InfoRepoDiscovery.h.

Referenced by bit_config().

◆ dataReaderMap_

DataReaderMap OpenDDS::DCPS::InfoRepoDiscovery::dataReaderMap_
private

Definition at line 260 of file InfoRepoDiscovery.h.

Referenced by add_subscription(), and removeDataReaderRemote().

◆ dataWriterMap_

DataWriterMap OpenDDS::DCPS::InfoRepoDiscovery::dataWriterMap_
private

Definition at line 264 of file InfoRepoDiscovery.h.

Referenced by add_publication(), and removeDataWriterRemote().

◆ info_

DCPSInfo_var OpenDDS::DCPS::InfoRepoDiscovery::info_
private

Definition at line 229 of file InfoRepoDiscovery.h.

Referenced by get_dcps_info().

◆ ior_

std::string OpenDDS::DCPS::InfoRepoDiscovery::ior_
private

Definition at line 228 of file InfoRepoDiscovery.h.

Referenced by get_dcps_info(), and get_stringified_dcps_info_ior().

◆ lock_

ACE_Thread_Mutex OpenDDS::DCPS::InfoRepoDiscovery::lock_
mutableprivate

◆ mtx_orb_runner_

ACE_Thread_Mutex OpenDDS::DCPS::InfoRepoDiscovery::mtx_orb_runner_
staticprivate

◆ orb_

CORBA::ORB_var OpenDDS::DCPS::InfoRepoDiscovery::orb_
private

◆ orb_from_user_

bool OpenDDS::DCPS::InfoRepoDiscovery::orb_from_user_
private

Definition at line 241 of file InfoRepoDiscovery.h.

Referenced by set_ORB(), and ~InfoRepoDiscovery().

◆ orb_runner_

InfoRepoDiscovery::OrbRunner * OpenDDS::DCPS::InfoRepoDiscovery::orb_runner_
staticprivate

◆ use_local_bit_config_

bool OpenDDS::DCPS::InfoRepoDiscovery::use_local_bit_config_
private

Definition at line 237 of file InfoRepoDiscovery.h.

Referenced by bit_config().


The documentation for this class was generated from the following files: