26 const size_t BYTES_IN_PARTICIPANT = 6;
27 const size_t HEX_DIGITS_IN_PARTICIPANT = 2 * BYTES_IN_PARTICIPANT;
28 const size_t BYTES_IN_ENTITY = 3;
29 const size_t HEX_DIGITS_IN_ENTITY = 2 * BYTES_IN_ENTITY;
30 const size_t TYPE_NAME_MAX = 128;
38 const GUID_t& writerid = wp->first;
39 Writer& writer = wp->second;
43 const GUID_t& readerid = rp->first;
44 Reader& reader = rp->second;
59 if (
compatibleQOS(&writerStatus, &readerStatus, writer_trans_info, reader_trans_info,
60 &writer_qos, &reader_qos, &publisher_qos, &subscriber_qos)) {
82 , participant_id_(participant_id)
85 #ifndef DDS_HAS_MINIMUM_BIT
86 , participant_(participant)
88 , max_type_lookup_service_reply_period_(0)
89 , type_lookup_service_sequence_number_(0)
91 #ifdef DDS_HAS_MINIMUM_BIT 92 ACE_UNUSED_ARG(participant);
110 const GUID_t& remoteid = pos->first;
122 data.topic_name = topic_name.c_str();
124 data.type_name = topic.
type_name.c_str();
143 #ifndef DDS_HAS_MINIMUM_BIT 156 const GUID_t& remoteid = pos->first;
168 data.topic_name = topic_name.c_str();
170 data.type_name = topic.
type_name.c_str();
187 #ifndef DDS_HAS_MINIMUM_BIT 202 ACE_ERROR((
LM_ERROR,
ACE_TEXT(
"(%P|%t) ERROR: StaticEndpointManager::assign_publication_key: no user data to identify writer\n")));
224 qos2.
user_data = pos->second.qos.user_data;
229 ACE_ERROR((
LM_ERROR,
ACE_TEXT(
"(%P|%t) ERROR: StaticEndpointManager::assign_publication_key: dynamic and static QoS differ\n")));
238 ACE_ERROR((
LM_ERROR,
ACE_TEXT(
"(%P|%t) ERROR: StaticEndpointManager::assign_subscription_key: no user data to identify reader\n")));
255 qos2.
user_data = pos->second.qos.user_data;
260 ACE_ERROR((
LM_ERROR,
ACE_TEXT(
"(%P|%t) ERROR: StaticEndpointManager::assign_subscription_key: dynamic and static QoS differ\n")));
328 const GUID_t& readerid = *pos;
332 {reader.
trans_info,
TransportLocator(), 0, readerid, reader.
subscriber_qos, reader.
qos,
"",
"", 0, 0, {0, 0}};
335 pl->add_association(writerid, ra,
true);
342 const GUID_t& readerid = *pos;
369 const GUID_t& readerid = *pos;
398 const GUID_t& writerid = *pos;
407 sl->add_association(readerid, wa,
false);
414 const GUID_t& writerid = *pos;
441 const GUID_t& writerid = *pos;
491 EndpointRegistry::ReaderMapType::const_iterator reader_pos =
registry_.
reader_map.find(readerid);
497 {reader_pos->second.trans_info,
TransportLocator(), 0, readerid, reader_pos->second.subscriber_qos, reader_pos->second.qos,
499 dwr->add_association(writerid, ra,
true);
509 EndpointRegistry::ReaderMapType::const_iterator reader_pos =
registry_.
reader_map.find(readerid);
517 dwr->remove_associations(ids,
true);
527 EndpointRegistry::WriterMapType::const_iterator writer_pos =
registry_.
writer_map.find(writerid);
533 {writer_pos->second.trans_info,
TransportLocator(), 0, writerid, writer_pos->second.publisher_qos, writer_pos->second.qos,
DDS::OctetSeq(), {0,0}};
534 drr->add_association(readerid, wa,
false);
544 EndpointRegistry::WriterMapType::const_iterator writer_pos =
registry_.
writer_map.find(writerid);
552 drr->remove_associations(ids,
true);
564 #ifndef DDS_HAS_MINIMUM_BIT 592 DCPS::make_rch<StaticEndpointManagerSporadic>(
TheServiceParticipant->time_source(), reactor_interceptor,
613 TopicDetailsMap::iterator top_it =
topics_.find(topic_name);
626 const String topic_name = iter->second.get_topic_name();
644 const String topic_name = iter->second.get_topic_name();
661 ignored_topics_.insert(iter->second);
666 for (RepoIdSet::const_iterator ep = ids.begin(); ep!= ids.end(); ++ep) {
675 for (RepoIdSet::const_iterator ep = ids.begin(); ep!= ids.end(); ++ep) {
695 return ignored_topics_.count(topic_name);
699 GUID_t& topicId,
const char* topicName,
704 TopicDetailsMap::iterator iter =
topics_.find(topicName);
706 if (iter->second.local_is_set() && iter->second.local_data_type_name() != dataTypeName) {
709 topicId = iter->second.topic_id();
710 iter->second.set_local(dataTypeName, qos, hasDcpsKey, topic_callbacks);
716 td.
init(topicName, topicId);
718 td.
set_local(dataTypeName, qos, hasDcpsKey, topic_callbacks);
724 const char* topicName,
726 DDS::TopicQos_out qos,
730 TopicDetailsMap::const_iterator iter =
topics_.find(topicName);
746 TopicNameMap::iterator name_iter =
topic_names_.find(topicId);
794 ACE_TEXT(
"calling match_endpoints\n")));
809 TopicDetailsMap::iterator top_it =
topics_.find(topic_name);
812 top_it->second.remove_local_publication(publicationId);
817 ACE_TEXT(
"(%P|%t) ERROR: StaticEndpointManager::remove_publication - ")
818 ACE_TEXT(
"Failed to publish dispose msg\n")));
831 ACE_TEXT(
"(%P|%t) StaticEndpointManager::update_publication_locators - updating locators for %C\n"),
832 LogGuid(publicationId).c_str()));
834 iter->second.trans_info_ = transInfo;
845 const char* filterClassName,
846 const char* filterExpr,
879 ACE_TEXT(
"calling match_endpoints\n")));
894 TopicDetailsMap::iterator top_it =
topics_.find(topic_name);
897 top_it->second.remove_local_subscription(subscriptionId);
902 ACE_TEXT(
"(%P|%t) ERROR: StaticEndpointManager::remove_subscription - ")
903 ACE_TEXT(
"Failed to publish dispose msg\n")));
909 const GUID_t& subscriptionId,
917 ACE_TEXT(
"(%P|%t) StaticEndpointManager::update_subscription_locators updating locators for %C\n"),
918 LogGuid(subscriptionId).c_str()));
920 iter->second.trans_info_ = transInfo;
931 remove ?
"remove " :
"",
LogGuid(repoId).c_str()));
947 if (is_remote && local_endpoints.empty()) {
952 for (RepoIdSet::const_iterator iter = local_endpoints.begin();
953 iter != local_endpoints.end(); ++iter) {
959 match(reader ? *iter : repoId, reader ? repoId : *iter);
969 for (RepoIdSet::const_iterator iter = discovered_endpoints.begin();
970 iter != discovered_endpoints.end(); ++iter) {
976 match(reader ? *iter : repoId, reader ? repoId : *iter);
987 lsi->second.matched_endpoints_.erase(removing);
990 dpi->second.matched_endpoints_.erase(remove_from);
993 writer_seq.length(1);
994 writer_seq[0] = removing;
995 const size_t count = lsi->second.remote_expectant_opendds_associations_.erase(removing);
998 drr->remove_associations(writer_seq,
false );
1010 lpi->second.matched_endpoints_.erase(removing);
1013 dsi->second.matched_endpoints_.erase(remove_from);
1016 reader_seq.length(1);
1017 reader_seq[0] = removing;
1018 lpi->second.remote_expectant_opendds_associations_.erase(removing);
1021 dwr->remove_associations(reader_seq,
false );
1048 ACE_DEBUG((
LM_DEBUG,
"(%P|%t) StaticEndpointManager::remove_expired_endpoints: " 1049 "clean up type lookup data for %C\n",
1063 ACE_DEBUG((
LM_DEBUG,
"(%P|%t) StaticEndpointManager::match_continue: w: %C r: %C\n",
1094 bool writer_local =
false, already_matched =
false;
1096 writer_local =
true;
1097 dwQos = &lpi->second.qos_;
1098 pubQos = &lpi->second.publisher_qos_;
1099 wTls = &lpi->second.trans_info_;
1100 wTransportContext = lpi->second.transport_context_;
1101 already_matched = lpi->second.matched_endpoints_.count(reader);
1102 writer_type_info = &lpi->second.type_info_;
1104 writer_participant_discovered_at = lpi->second.participant_discovered_at_;
1106 wTls = &dpi->second.writer_data_.writerProxy.allLocators;
1107 wTransportContext = dpi->second.transport_context_;
1108 writer_type_info = &dpi->second.type_info_;
1109 topic_name = dpi->second.get_topic_name();
1110 writer_participant_discovered_at = dpi->second.participant_discovered_at_;
1113 dpi->second.writer_data_.ddsPublicationData;
1140 pubQos = &tempPubQos;
1157 bool reader_local =
false;
1159 reader_local =
true;
1160 drQos = &lsi->second.qos_;
1161 subQos = &lsi->second.subscriber_qos_;
1162 rTls = &lsi->second.trans_info_;
1163 rTransportContext = lsi->second.transport_context_;
1164 reader_type_info = &lsi->second.type_info_;
1165 if (lsi->second.filterProperties.filterExpression[0] != 0) {
1170 if (!already_matched) {
1171 already_matched = lsi->second.matched_endpoints_.count(writer);
1173 reader_participant_discovered_at = lsi->second.participant_discovered_at_;
1175 rTls = &dsi->second.reader_data_.readerProxy.allLocators;
1178 rTransportContext = dsi->second.transport_context_;
1181 dsi->second.reader_data_.ddsSubscriptionData;
1205 subQos = &tempSubQos;
1207 cfProp = &dsi->second.reader_data_.contentFilterProperty;
1208 reader_type_info = &dsi->second.type_info_;
1209 reader_participant_discovered_at = dsi->second.participant_discovered_at_;
1215 bool consistent =
false;
1217 TopicDetailsMap::iterator td_iter =
topics_.find(topic_name);
1218 if (td_iter ==
topics_.end()) {
1220 ACE_TEXT(
"(%P|%t) StaticEndpointManager::match_continue - ERROR ")
1221 ACE_TEXT(
"Didn't find topic for consistency check\n")));
1227 if (!writer_local || !reader_local) {
1236 ACE_TEXT(
"StaticEndpointManager::match_continue: ")
1237 ACE_TEXT(
"Encountered unsupported combination of XCDR1 encoding and appendable extensibility\n")));
1251 consistent = ta.
assignable(reader_type_id, writer_type_id);
1254 consistent = reader_type_id == writer_type_id;
1265 writer_type_name = td_iter->second.local_data_type_name();
1267 writer_type_name = dpi->second.get_type_name();
1270 reader_type_name = td_iter->second.local_data_type_name();
1272 reader_type_name = dsi->second.get_type_name();
1274 consistent = writer_type_name == reader_type_name;
1279 td_iter->second.increment_inconsistent();
1282 ACE_TEXT(
"(%P|%t) StaticEndpointManager::match_continue - WARNING ")
1283 ACE_TEXT(
"Data types of topic %C does not match (inconsistent)\n"),
1284 topic_name.c_str()));
1302 dwr = lpi->second.publication_;
1307 drr = lsi->second.subscription_;
1315 if (
compatibleQOS(&writerStatus, &readerStatus, *wTls, *rTls,
1316 dwQos, drQos, pubQos, subQos)) {
1318 bool call_writer =
false, call_reader =
false;
1321 call_writer = lpi->second.matched_endpoints_.insert(reader).second;
1322 dwr = lpi->second.publication_;
1323 if (!reader_local) {
1324 dsi->second.matched_endpoints_.insert(writer);
1328 call_reader = lsi->second.matched_endpoints_.insert(writer).second;
1329 drr = lsi->second.subscription_;
1330 if (!writer_local) {
1331 dpi->second.matched_endpoints_.insert(reader);
1335 if (writer_local && !reader_local) {
1336 add_assoc_i(writer, lpi->second, reader, dsi->second);
1338 if (reader_local && !writer_local) {
1339 add_assoc_i(reader, lsi->second, writer, dpi->second);
1342 if (!call_writer && !call_reader) {
1351 #ifndef OPENDDS_NO_CONTENT_FILTERED_TOPIC 1357 octet_seq_type_info_reader,
1358 reader_participant_discovered_at
1365 octet_seq_type_info_writer,
1366 writer_participant_discovered_at
1370 static const bool writer_active =
true;
1375 ACE_TEXT(
"adding writer %C association for reader %C\n"),
LogGuid(writer).c_str(),
1383 DcpsUpcalls thr(drr_lock, reader, wa, !writer_active, dwr_lock);
1385 dwr_lock->add_association(writer, ra, writer_active);
1389 dwr_lock->add_association(writer, ra, writer_active);
1392 }
else if (call_reader) {
1395 ACE_TEXT(
"adding reader %C association for writer %C\n"),
1400 drr_lock->add_association(reader, wa, !writer_active);
1404 }
else if (already_matched) {
1406 lpi->second.matched_endpoints_.erase(reader);
1407 lpi->second.remote_expectant_opendds_associations_.erase(reader);
1409 dsi->second.matched_endpoints_.erase(writer);
1413 lsi->second.matched_endpoints_.erase(writer);
1414 lsi->second.remote_expectant_opendds_associations_.erase(writer);
1416 dpi->second.matched_endpoints_.erase(reader);
1419 if (writer_local && !reader_local) {
1422 if (reader_local && !writer_local) {
1428 reader_seq.length(1);
1429 reader_seq[0] = reader;
1432 dwr_lock->remove_associations(reader_seq,
false );
1437 writer_seq.length(1);
1438 writer_seq[0] = writer;
1441 drr_lock->remove_associations(writer_seq,
false );
1449 ACE_TEXT(
"writer incompatible\n")));
1453 dwr_lock->update_incompatible_qos(writerStatus);
1459 ACE_TEXT(
"reader incompatible\n")));
1463 drr_lock->update_incompatible_qos(readerStatus);
1478 ACE_TEXT(
"(%P|%t) ERROR: StaticEndpointManager::make_topic_guid: ")
1479 ACE_TEXT(
"Exceeded Maximum number of topic entity keys!")
1480 ACE_TEXT(
"Next key will be a duplicate!\n")));
1493 TopicDetailsMap::const_iterator td =
topics_.find(tn->second);
1494 if (td ==
topics_.end())
return false;
1496 return td->second.has_dcps_key();
1504 unsigned char hextobyte(
unsigned char c)
1506 if (c >=
'0' && c <=
'9') {
1509 if (c >=
'a' && c <=
'f') {
1510 return 10 + c -
'a';
1512 if (c >=
'A' && c <=
'F') {
1513 return 10 + c -
'A';
1521 return (hextobyte(x[idx * 2]) << 4) | (hextobyte(x[idx * 2 + 1]));
1527 const unsigned char entity_kind)
1539 const unsigned char* participant_id,
1558 id.entityId = entity_id;
1577 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::add_domain_participant ")
1578 ACE_TEXT(
"No userdata to identify participant\n")));
1587 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::add_domain_participant ")
1588 ACE_TEXT(
"Duplicate participant\n")));
1599 participant->type_lookup_service(tls);
1605 #if defined(OPENDDS_SECURITY) 1618 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::add_domain_participant_secure ")
1619 ACE_TEXT(
"Security not supported for static discovery.\n")));
1634 if (value ==
"DURATION_INFINITE_SEC") {
1637 x =
atoi(value.c_str());
1643 if (value ==
"DURATION_INFINITE_NANOSEC") {
1646 x =
atoi(value.c_str());
1652 if (value ==
"true") {
1655 }
else if (value ==
"false") {
1665 const char* start = value.c_str();
1666 while (
const char* next_comma = std::strchr(start,
',')) {
1667 const size_t size = next_comma - start;
1670 x.
name.length(x.
name.length() + 1);
1671 x.
name[x.
name.length() - 1] = temp.c_str();
1673 start = next_comma + 1;
1676 x.
name.length(x.
name.length() + 1);
1677 x.
name[x.
name.length() - 1] = start;
1704 if (cf.
open_section(root, TOPIC_SECTION_NAME,
false, section) != 0) {
1709 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_topics ")
1711 TOPIC_SECTION_NAME));
1721 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_topics ")
1722 ACE_TEXT(
"[topic] sections must have a subsection name\n")),
1729 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_topics ")
1730 ACE_TEXT(
"too many nesting layers in the [topic] section.\n")),
1735 for (KeyList::const_iterator it = keys.begin(); it != keys.end(); ++it) {
1740 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_topics ")
1741 ACE_TEXT(
"processing [topic/%C] section.\n"),
1742 topic_name.c_str()));
1749 bool name_specified =
false,
1750 type_name_specified =
false;
1752 for (ValueMap::const_iterator it = values.begin(); it != values.end(); ++it) {
1756 if (name ==
"name") {
1758 name_specified =
true;
1759 }
else if (name ==
"type_name") {
1760 if (value.size() >= TYPE_NAME_MAX) {
1762 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_topics ")
1763 ACE_TEXT(
"type_name (%C) must be less than 128 characters in [topic/%C] section.\n"),
1764 value.c_str(), topic_name.c_str()),
1768 type_name_specified =
true;
1774 if (!name_specified) {
1775 topic.
name = topic_name;
1778 if (!type_name_specified) {
1780 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_topics ")
1781 ACE_TEXT(
"No type_name specified for [topic/%C] section.\n"),
1782 topic_name.c_str()),
1798 if (cf.
open_section(root, DATAWRITERQOS_SECTION_NAME,
false, section) != 0) {
1803 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_datawriterqos ")
1805 DATAWRITERQOS_SECTION_NAME));
1815 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1816 ACE_TEXT(
"[datawriterqos] sections must have a subsection name\n")),
1823 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1824 ACE_TEXT(
"too many nesting layers in the [datawriterqos] section.\n")),
1829 for (KeyList::const_iterator it = keys.begin(); it != keys.end(); ++it) {
1834 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_datawriterqos ")
1835 ACE_TEXT(
"processing [datawriterqos/%C] section.\n"),
1836 datawriterqos_name.c_str()));
1844 for (ValueMap::const_iterator it = values.begin(); it != values.end(); ++it) {
1848 if (name ==
"durability.kind") {
1849 if (value ==
"VOLATILE") {
1851 }
else if (value ==
"TRANSIENT_LOCAL") {
1853 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE 1854 }
else if (value ==
"TRANSIENT") {
1856 }
else if (value ==
"PERSISTENT") {
1861 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1862 ACE_TEXT(
"Illegal value for durability.kind (%C) in [datawriterqos/%C] section.\n"),
1863 value.c_str(), datawriterqos_name.c_str()),
1866 }
else if (name ==
"deadline.period.sec") {
1867 parse_second(datawriterqos.deadline.period.sec, value);
1868 }
else if (name ==
"deadline.period.nanosec") {
1869 parse_nanosecond(datawriterqos.deadline.period.nanosec, value);
1870 }
else if (name ==
"latency_budget.duration.sec") {
1871 parse_second(datawriterqos.latency_budget.duration.sec, value);
1872 }
else if (name ==
"latency_budget.duration.nanosec") {
1873 parse_nanosecond(datawriterqos.latency_budget.duration.nanosec, value);
1874 }
else if (name ==
"liveliness.kind") {
1875 if (value ==
"AUTOMATIC") {
1877 }
else if (value ==
"MANUAL_BY_TOPIC") {
1879 }
else if (value ==
"MANUAL_BY_PARTICIPANT") {
1883 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1884 ACE_TEXT(
"Illegal value for liveliness.kind (%C) in [datawriterqos/%C] section.\n"),
1885 value.c_str(), datawriterqos_name.c_str()),
1888 }
else if (name ==
"liveliness.lease_duration.sec") {
1889 parse_second(datawriterqos.liveliness.lease_duration.sec, value);
1890 }
else if (name ==
"liveliness.lease_duration.nanosec") {
1891 parse_nanosecond(datawriterqos.liveliness.lease_duration.nanosec, value);
1892 }
else if (name ==
"reliability.kind") {
1893 if (value ==
"BEST_EFFORT") {
1895 }
else if (value ==
"RELIABLE") {
1899 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1900 ACE_TEXT(
"Illegal value for reliability.kind (%C) in [datawriterqos/%C] section.\n"),
1901 value.c_str(), datawriterqos_name.c_str()),
1904 }
else if (name ==
"reliability.max_blocking_time.sec") {
1905 parse_second(datawriterqos.reliability.max_blocking_time.sec, value);
1906 }
else if (name ==
"reliability.max_blocking_time.nanosec") {
1907 parse_nanosecond(datawriterqos.reliability.max_blocking_time.nanosec, value);
1908 }
else if (name ==
"destination_order.kind") {
1909 if (value ==
"BY_RECEPTION_TIMESTAMP") {
1911 }
else if (value ==
"BY_SOURCE_TIMESTAMP") {
1915 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1916 ACE_TEXT(
"Illegal value for destination_order.kind (%C) in [datawriterqos/%C] section.\n"),
1917 value.c_str(), datawriterqos_name.c_str()),
1920 }
else if (name ==
"history.kind") {
1921 if (value ==
"KEEP_ALL") {
1923 }
else if (value ==
"KEEP_LAST") {
1927 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1928 ACE_TEXT(
"Illegal value for history.kind (%C) in [datawriterqos/%C] section.\n"),
1929 value.c_str(), datawriterqos_name.c_str()),
1932 }
else if (name ==
"history.depth") {
1933 datawriterqos.history.depth =
atoi(value.c_str());
1934 }
else if (name ==
"resource_limits.max_samples") {
1935 datawriterqos.resource_limits.max_samples =
atoi(value.c_str());
1936 }
else if (name ==
"resource_limits.max_instances") {
1937 datawriterqos.resource_limits.max_instances =
atoi(value.c_str());
1938 }
else if (name ==
"resource_limits.max_samples_per_instance") {
1939 datawriterqos.resource_limits.max_samples_per_instance =
atoi(value.c_str());
1940 }
else if (name ==
"transport_priority.value") {
1941 datawriterqos.transport_priority.value =
atoi(value.c_str());
1942 }
else if (name ==
"lifespan.duration.sec") {
1943 parse_second(datawriterqos.lifespan.duration.sec, value);
1944 }
else if (name ==
"lifespan.duration.nanosec") {
1945 parse_nanosecond(datawriterqos.lifespan.duration.nanosec, value);
1946 }
else if (name ==
"ownership.kind") {
1947 if (value ==
"SHARED") {
1949 }
else if (value ==
"EXCLUSIVE") {
1953 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1954 ACE_TEXT(
"Illegal value for ownership.kind (%C) in [datawriterqos/%C] section.\n"),
1955 value.c_str(), datawriterqos_name.c_str()),
1958 }
else if (name ==
"ownership_strength.value") {
1959 datawriterqos.ownership_strength.value =
atoi(value.c_str());
1962 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datawriterqos ")
1963 ACE_TEXT(
"Unexpected entry (%C) in [datawriterqos/%C] section.\n"),
1964 name.c_str(), datawriterqos_name.c_str()),
1981 if (cf.
open_section(root, DATAREADERQOS_SECTION_NAME,
false, section) != 0) {
1986 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_datareaderqos ")
1988 DATAREADERQOS_SECTION_NAME));
1998 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
1999 ACE_TEXT(
"[datareaderqos] sections must have a subsection name\n")),
2006 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
2007 ACE_TEXT(
"too many nesting layers in the [datareaderqos] section.\n")),
2012 for (KeyList::const_iterator it = keys.begin(); it != keys.end(); ++it) {
2017 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_datareaderqos ")
2018 ACE_TEXT(
"processing [datareaderqos/%C] section.\n"),
2019 datareaderqos_name.c_str()));
2027 for (ValueMap::const_iterator it = values.begin(); it != values.end(); ++it) {
2031 if (name ==
"durability.kind") {
2032 if (value ==
"VOLATILE") {
2034 }
else if (value ==
"TRANSIENT_LOCAL") {
2036 #ifndef OPENDDS_NO_PERSISTENCE_PROFILE 2037 }
else if (value ==
"TRANSIENT") {
2039 }
else if (value ==
"PERSISTENT") {
2044 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
2045 ACE_TEXT(
"Illegal value for durability.kind (%C) in [datareaderqos/%C] section.\n"),
2046 value.c_str(), datareaderqos_name.c_str()),
2049 }
else if (name ==
"deadline.period.sec") {
2050 parse_second(datareaderqos.deadline.period.sec, value);
2051 }
else if (name ==
"deadline.period.nanosec") {
2052 parse_nanosecond(datareaderqos.deadline.period.nanosec, value);
2053 }
else if (name ==
"latency_budget.duration.sec") {
2054 parse_second(datareaderqos.latency_budget.duration.sec, value);
2055 }
else if (name ==
"latency_budget.duration.nanosec") {
2056 parse_nanosecond(datareaderqos.latency_budget.duration.nanosec, value);
2057 }
else if (name ==
"liveliness.kind") {
2058 if (value ==
"AUTOMATIC") {
2060 }
else if (value ==
"MANUAL_BY_TOPIC") {
2062 }
else if (value ==
"MANUAL_BY_PARTICIPANT") {
2066 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
2067 ACE_TEXT(
"Illegal value for liveliness.kind (%C) in [datareaderqos/%C] section.\n"),
2068 value.c_str(), datareaderqos_name.c_str()),
2071 }
else if (name ==
"liveliness.lease_duration.sec") {
2072 parse_second(datareaderqos.liveliness.lease_duration.sec, value);
2073 }
else if (name ==
"liveliness.lease_duration.nanosec") {
2074 parse_nanosecond(datareaderqos.liveliness.lease_duration.nanosec, value);
2075 }
else if (name ==
"reliability.kind") {
2076 if (value ==
"BEST_EFFORT") {
2078 }
else if (value ==
"RELIABLE") {
2082 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
2083 ACE_TEXT(
"Illegal value for reliability.kind (%C) in [datareaderqos/%C] section.\n"),
2084 value.c_str(), datareaderqos_name.c_str()),
2087 }
else if (name ==
"reliability.max_blocking_time.sec") {
2088 parse_second(datareaderqos.reliability.max_blocking_time.sec, value);
2089 }
else if (name ==
"reliability.max_blocking_time.nanosec") {
2090 parse_nanosecond(datareaderqos.reliability.max_blocking_time.nanosec, value);
2091 }
else if (name ==
"destination_order.kind") {
2092 if (value ==
"BY_RECEPTION_TIMESTAMP") {
2094 }
else if (value ==
"BY_SOURCE_TIMESTAMP") {
2098 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
2099 ACE_TEXT(
"Illegal value for destination_order.kind (%C) in [datareaderqos/%C] section.\n"),
2100 value.c_str(), datareaderqos_name.c_str()),
2103 }
else if (name ==
"history.kind") {
2104 if (value ==
"KEEP_ALL") {
2106 }
else if (value ==
"KEEP_LAST") {
2110 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
2111 ACE_TEXT(
"Illegal value for history.kind (%C) in [datareaderqos/%C] section.\n"),
2112 value.c_str(), datareaderqos_name.c_str()),
2115 }
else if (name ==
"history.depth") {
2116 datareaderqos.history.depth =
atoi(value.c_str());
2117 }
else if (name ==
"resource_limits.max_samples") {
2118 datareaderqos.resource_limits.max_samples =
atoi(value.c_str());
2119 }
else if (name ==
"resource_limits.max_instances") {
2120 datareaderqos.resource_limits.max_instances =
atoi(value.c_str());
2121 }
else if (name ==
"resource_limits.max_samples_per_instance") {
2122 datareaderqos.resource_limits.max_samples_per_instance =
atoi(value.c_str());
2123 }
else if (name ==
"time_based_filter.minimum_separation.sec") {
2124 parse_second(datareaderqos.time_based_filter.minimum_separation.sec, value);
2125 }
else if (name ==
"time_based_filter.minimum_separation.nanosec") {
2126 parse_nanosecond(datareaderqos.time_based_filter.minimum_separation.nanosec, value);
2127 }
else if (name ==
"reader_data_lifecycle.autopurge_nowriter_samples_delay.sec") {
2128 parse_second(datareaderqos.reader_data_lifecycle.autopurge_nowriter_samples_delay.sec, value);
2129 }
else if (name ==
"reader_data_lifecycle.autopurge_nowriter_samples_delay.nanosec") {
2130 parse_nanosecond(datareaderqos.reader_data_lifecycle.autopurge_nowriter_samples_delay.nanosec, value);
2131 }
else if (name ==
"reader_data_lifecycle.autopurge_disposed_samples_delay.sec") {
2132 parse_second(datareaderqos.reader_data_lifecycle.autopurge_disposed_samples_delay.sec, value);
2133 }
else if (name ==
"reader_data_lifecycle.autopurge_disposed_samples_delay.nanosec") {
2134 parse_nanosecond(datareaderqos.reader_data_lifecycle.autopurge_disposed_samples_delay.nanosec, value);
2137 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_datareaderqos ")
2138 ACE_TEXT(
"Unexpected entry (%C) in [datareaderqos/%C] section.\n"),
2139 name.c_str(), datareaderqos_name.c_str()),
2156 if (cf.
open_section(root, PUBLISHERQOS_SECTION_NAME,
false, section) != 0) {
2161 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_publisherqos ")
2163 PUBLISHERQOS_SECTION_NAME));
2173 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_publisherqos ")
2174 ACE_TEXT(
"[publisherqos] sections must have a subsection name\n")),
2181 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_publisherqos ")
2182 ACE_TEXT(
"too many nesting layers in the [publisherqos] section.\n")),
2187 for (KeyList::const_iterator it = keys.begin(); it != keys.end(); ++it) {
2192 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_publisherqos ")
2193 ACE_TEXT(
"processing [publisherqos/%C] section.\n"),
2194 publisherqos_name.c_str()));
2202 for (ValueMap::const_iterator it = values.begin(); it != values.end(); ++it) {
2206 if (name ==
"presentation.access_scope") {
2207 if (value ==
"INSTANCE") {
2209 }
else if (value ==
"TOPIC") {
2211 }
else if (value ==
"GROUP") {
2215 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_publisherqos ")
2216 ACE_TEXT(
"Illegal value for presentation.access_scope (%C) in [publisherqos/%C] section.\n"),
2217 value.c_str(), publisherqos_name.c_str()),
2220 }
else if (name ==
"presentation.coherent_access") {
2221 if (
parse_bool(publisherqos.presentation.coherent_access, value)) {
2224 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_publisherqos ")
2225 ACE_TEXT(
"Illegal value for presentation.coherent_access (%C) in [publisherqos/%C] section.\n"),
2226 value.c_str(), publisherqos_name.c_str()),
2229 }
else if (name ==
"presentation.ordered_access") {
2230 if (
parse_bool(publisherqos.presentation.ordered_access, value)) {
2233 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_publisherqos ")
2234 ACE_TEXT(
"Illegal value for presentation.ordered_access (%C)")
2235 ACE_TEXT(
"in [publisherqos/%C] section.\n"),
2236 value.c_str(), publisherqos_name.c_str()),
2239 }
else if (name ==
"partition.name") {
2241 parse_list(publisherqos.partition, value);
2245 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_publisherqos ")
2246 ACE_TEXT(
"Exception caught while parsing partition.name (%C) ")
2247 ACE_TEXT(
"in [publisherqos/%C] section: %C.\n"),
2248 value.c_str(), publisherqos_name.c_str(), ex.
_info().
c_str()),
2253 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_publisherqos ")
2254 ACE_TEXT(
"Unexpected entry (%C) in [publisherqos/%C] section.\n"),
2255 name.c_str(), publisherqos_name.c_str()),
2272 if (cf.
open_section(root, SUBSCRIBERQOS_SECTION_NAME,
false, section) != 0) {
2277 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_subscriberqos ")
2279 SUBSCRIBERQOS_SECTION_NAME));
2289 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_subscriberqos ")
2290 ACE_TEXT(
"[subscriberqos] sections must have a subsection name\n")),
2297 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_subscriberqos ")
2298 ACE_TEXT(
"too many nesting layers in the [subscriberqos] section.\n")),
2303 for (KeyList::const_iterator it = keys.begin(); it != keys.end(); ++it) {
2308 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_subscriberqos ")
2309 ACE_TEXT(
"processing [subscriberqos/%C] section.\n"),
2310 subscriberqos_name.c_str()));
2318 for (ValueMap::const_iterator it = values.begin(); it != values.end(); ++it) {
2322 if (name ==
"presentation.access_scope") {
2323 if (value ==
"INSTANCE") {
2325 }
else if (value ==
"TOPIC") {
2327 }
else if (value ==
"GROUP") {
2331 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_subscriberqos ")
2332 ACE_TEXT(
"Illegal value for presentation.access_scope (%C) in [subscriberqos/%C] section.\n"),
2333 value.c_str(), subscriberqos_name.c_str()),
2336 }
else if (name ==
"presentation.coherent_access") {
2337 if (
parse_bool(subscriberqos.presentation.coherent_access, value)) {
2340 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_subscriberqos ")
2341 ACE_TEXT(
"Illegal value for presentation.coherent_access (%C) in [subscriberqos/%C] section.\n"),
2342 value.c_str(), subscriberqos_name.c_str()),
2345 }
else if (name ==
"presentation.ordered_access") {
2346 if (
parse_bool(subscriberqos.presentation.ordered_access, value)) {
2349 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_subscriberqos ")
2350 ACE_TEXT(
"Illegal value for presentation.ordered_access (%C) in [subscriberqos/%C] section.\n"),
2351 value.c_str(), subscriberqos_name.c_str()),
2354 }
else if (name ==
"partition.name") {
2356 parse_list(subscriberqos.partition, value);
2360 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_subscriberqos ")
2361 ACE_TEXT(
"Exception caught while parsing partition.name (%C) ")
2362 ACE_TEXT(
"in [subscriberqos/%C] section: %C.\n"),
2363 value.c_str(), subscriberqos_name.c_str(), ex.
_info().
c_str()),
2368 ACE_TEXT(
"(%P|%t) StaticDiscovery::parse_subscriberqos ")
2369 ACE_TEXT(
"Unexpected entry (%C) in [subscriberqos/%C] section.\n"),
2370 name.c_str(), subscriberqos_name.c_str()),
2387 if (cf.
open_section(root, ENDPOINT_SECTION_NAME,
false, section) != 0) {
2392 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_endpoints ")
2394 ENDPOINT_SECTION_NAME));
2404 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2405 ACE_TEXT(
"[endpoint] sections must have a subsection name\n")),
2412 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2413 ACE_TEXT(
"too many nesting layers in the [endpoint] section.\n")),
2418 for (KeyList::const_iterator it = keys.begin(); it != keys.end(); ++it) {
2423 ACE_TEXT(
"(%P|%t) NOTICE: StaticDiscovery::parse_endpoints ")
2424 ACE_TEXT(
"processing [endpoint/%C] section.\n"),
2425 endpoint_name.c_str()));
2431 unsigned char participant[6] = { 0 };
2432 unsigned char entity[3] = { 0 };
2446 bool domain_specified =
false,
2447 participant_specified =
false,
2448 entity_specified =
false,
2449 type_specified =
false,
2450 topic_name_specified =
false,
2451 config_name_specified =
false;
2453 for (ValueMap::const_iterator it = values.begin(); it != values.end(); ++it) {
2457 if (name ==
"domain") {
2459 domain_specified =
true;
2462 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2463 ACE_TEXT(
"Illegal integer value for domain (%C) in [endpoint/%C] section.\n"),
2464 value.c_str(), endpoint_name.c_str()),
2467 }
else if (name ==
"participant") {
2468 const OPENDDS_STRING::difference_type count = std::count_if(value.begin(), value.end(), isxdigit);
2469 if (value.size() != HEX_DIGITS_IN_PARTICIPANT ||
static_cast<size_t>(count) != HEX_DIGITS_IN_PARTICIPANT) {
2471 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2472 ACE_TEXT(
"participant (%C) must be 12 hexadecimal digits in [endpoint/%C] section.\n"),
2473 value.c_str(), endpoint_name.c_str()),
2477 for (
size_t idx = 0; idx != BYTES_IN_PARTICIPANT; ++idx) {
2478 participant[idx] = fromhex(value, idx);
2480 participant_specified =
true;
2481 }
else if (name ==
"entity") {
2482 const OPENDDS_STRING::difference_type count = std::count_if(value.begin(), value.end(), isxdigit);
2483 if (value.size() != HEX_DIGITS_IN_ENTITY ||
static_cast<size_t>(count) != HEX_DIGITS_IN_ENTITY) {
2485 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2486 ACE_TEXT(
"entity (%C) must be 6 hexadecimal digits in [endpoint/%C] section.\n"),
2487 value.c_str(), endpoint_name.c_str()),
2491 for (
size_t idx = 0; idx != BYTES_IN_ENTITY; ++idx) {
2492 entity[idx] = fromhex(value, idx);
2494 entity_specified =
true;
2495 }
else if (name ==
"type") {
2496 if (value ==
"reader") {
2498 type_specified =
true;
2499 }
else if (value ==
"writer") {
2501 type_specified =
true;
2504 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2505 ACE_TEXT(
"Illegal string value for type (%C) in [endpoint/%C] section.\n"),
2506 value.c_str(), endpoint_name.c_str()),
2509 }
else if (name ==
"topic") {
2510 EndpointRegistry::TopicMapType::const_iterator pos = this->
registry.
topic_map.find(value);
2512 topic_name = pos->second.name;
2513 topic_name_specified =
true;
2516 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2517 ACE_TEXT(
"Illegal topic reference (%C) in [endpoint/%C] section.\n"),
2518 value.c_str(), endpoint_name.c_str()),
2521 }
else if (name ==
"datawriterqos") {
2524 datawriterqos = pos->second;
2527 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2528 ACE_TEXT(
"Illegal datawriterqos reference (%C) in [endpoint/%C] section.\n"),
2529 value.c_str(), endpoint_name.c_str()),
2532 }
else if (name ==
"publisherqos") {
2535 publisherqos = pos->second;
2538 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2539 ACE_TEXT(
"Illegal publisherqos reference (%C) in [endpoint/%C] section.\n"),
2540 value.c_str(), endpoint_name.c_str()),
2543 }
else if (name ==
"datareaderqos") {
2546 datareaderqos = pos->second;
2549 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2550 ACE_TEXT(
"Illegal datareaderqos reference (%C) in [endpoint/%C] section.\n"),
2551 value.c_str(), endpoint_name.c_str()),
2554 }
else if (name ==
"subscriberqos") {
2557 subscriberqos = pos->second;
2560 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2561 ACE_TEXT(
"Illegal subscriberqos reference (%C) in [endpoint/%C] section.\n"),
2562 value.c_str(), endpoint_name.c_str()),
2565 }
else if (name ==
"config") {
2566 config_name =
value;
2567 config_name_specified =
true;
2570 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2571 ACE_TEXT(
"Unexpected entry (%C) in [endpoint/%C] section.\n"),
2572 name.c_str(), endpoint_name.c_str()),
2577 if (!domain_specified) {
2579 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2580 ACE_TEXT(
"No domain specified for [endpoint/%C] section.\n"),
2581 endpoint_name.c_str()),
2585 if (!participant_specified) {
2587 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2588 ACE_TEXT(
"No participant specified for [endpoint/%C] section.\n"),
2589 endpoint_name.c_str()),
2593 if (!entity_specified) {
2595 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2596 ACE_TEXT(
"No entity specified for [endpoint/%C] section.\n"),
2597 endpoint_name.c_str()),
2601 if (!type_specified) {
2603 ACE_TEXT(
"(%P|%t) ERROR:StaticDiscovery::parse_endpoints ")
2604 ACE_TEXT(
"No type specified for [endpoint/%C] section.\n"),
2605 endpoint_name.c_str()),
2609 if (!topic_name_specified) {
2611 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2612 ACE_TEXT(
"No topic specified for [endpoint/%C] section.\n"),
2613 endpoint_name.c_str()),
2619 if (config_name_specified) {
2623 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2624 ACE_TEXT(
"Illegal config reference (%C) in [endpoint/%C] section.\n"),
2625 config_name.c_str(), endpoint_name.c_str()),
2630 if (config.
is_nil() && domain_specified) {
2643 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2644 ACE_TEXT(
"Exception caught while populating locators for [endpoint/%C] section. %C\n"),
2648 if (trans_info.length() == 0) {
2650 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2651 ACE_TEXT(
"No locators for [endpoint/%C] section.\n"),
2652 endpoint_name.c_str()),
2668 datareaderqos.user_data.value.length(3);
2669 datareaderqos.user_data.value[0] = entity_id.
entityKey[0];
2670 datareaderqos.user_data.value[1] = entity_id.
entityKey[1];
2671 datareaderqos.user_data.value[2] = entity_id.
entityKey[2];
2676 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2677 ACE_TEXT(
"Section [endpoint/%C] ignored - duplicate reader.\n"),
2678 endpoint_name.c_str()),
2684 datawriterqos.user_data.value.length(3);
2685 datawriterqos.user_data.value[0] = entity_id.
entityKey[0];
2686 datawriterqos.user_data.value[1] = entity_id.
entityKey[1];
2687 datawriterqos.user_data.value[2] = entity_id.
entityKey[2];
2688 bool encapsulated_only =
false;
2689 for (
CORBA::ULong i = 0; i < trans_info.length(); ++i) {
2690 if (0 == std::strcmp(trans_info[i].transport_type,
"rtps_udp")) {
2691 encapsulated_only =
true;
2700 ACE_TEXT(
"(%P|%t) ERROR: StaticDiscovery::parse_endpoints ")
2701 ACE_TEXT(
"Section [endpoint/%C] ignored - duplicate writer.\n"),
2702 endpoint_name.c_str()),
2715 const DDS::DomainParticipant_var part = pub->get_participant();
2719 part->get_qos(partQos);
2722 const unsigned char*
const partId = partQos.
user_data.
value.get_buffer();
2728 const unsigned char*
const dwId = qos.
user_data.
value.get_buffer();
2734 const EndpointRegistry::WriterMapType::const_iterator iter =
2745 const DDS::DomainParticipant_var part = sub->get_participant();
2749 part->get_qos(partQos);
2752 const unsigned char*
const partId = partQos.
user_data.
value.get_buffer();
2758 const unsigned char*
const drId = qos.
user_data.
value.get_buffer();
2764 const EndpointRegistry::ReaderMapType::const_iterator iter =
2776 DDS::Subscriber_var bit_subscriber;
2777 #ifndef DDS_HAS_MINIMUM_BIT 2789 DDS::SubscriberListener::_nil(),
2794 ACE_TEXT(
" - Could not cast Subscriber to SubscriberImpl\n")));
2802 dr_qos.reader_data_lifecycle.autopurge_nowriter_samples_delay =
2804 dr_qos.reader_data_lifecycle.autopurge_disposed_samples_delay =
2807 DDS::TopicDescription_var bit_part_topic =
2812 DDS::TopicDescription_var bit_topic_topic =
2817 DDS::TopicDescription_var bit_pub_topic =
2822 DDS::TopicDescription_var bit_sub_topic =
2827 DDS::TopicDescription_var bit_part_loc_topic =
2832 DDS::TopicDescription_var bit_connection_record_topic =
2837 DDS::TopicDescription_var bit_internal_thread_topic =
2846 ACE_TEXT(
" - Error %d enabling subscriber\n"), ret));
2854 return make_rch<BitSubscriber>(bit_subscriber);
2875 DomainParticipantMap::iterator domain =
participants_.find(domain_id);
2879 ParticipantMap::iterator part = domain->second.find(participantId);
2880 if (part == domain->second.end()) {
2883 participant = part->second;
2884 domain->second.erase(part);
2885 if (domain->second.empty()) {
2889 participant->shutdown();
2896 get_part(domain, myParticipantId)->ignore_domain_participant(ignoreId);
2903 return get_part(domain, participant)->update_domain_participant_qos(qos);
2909 const GUID_t& participantId,
2910 const char* topicName,
2911 const char* dataTypeName,
2918 return participants_[domainId][participantId]->assert_topic(topicId, topicName,
2920 hasDcpsKey, topic_callbacks);
2925 const GUID_t& participantId,
2926 const char* topicName,
2928 DDS::TopicQos_out qos,
2932 return participants_[domainId][participantId]->find_topic(topicName, dataTypeName, qos, topicId);
2937 const GUID_t& participantId,
2942 return participants_[domainId][participantId]->remove_topic(topicId);
2948 get_part(domainId, myParticipantId)->ignore_topic(ignoreId);
2957 return participants_[domainId][participantId]->update_topic_qos(topicId, qos);
2962 const GUID_t& participantId,
2970 return get_part(domainId, participantId)->add_publication(
2971 topicId, publication, qos, transInfo, publisherQos, type_info);
2977 get_part(domainId, participantId)->remove_publication(publicationId);
2984 get_part(domainId, participantId)->ignore_publication(ignoreId);
2995 return get_part(domainId, partId)->update_publication_qos(dwId, qos,
3003 get_part(domainId, partId)->update_publication_locators(dwId, transInfo);
3008 const GUID_t& participantId,
3014 const char* filterClassName,
3015 const char* filterExpr,
3019 return get_part(domainId, participantId)->add_subscription(
3020 topicId, subscription, qos, transInfo, subscriberQos, filterClassName,
3021 filterExpr, params, type_info);
3027 get_part(domainId, participantId)->remove_subscription(subscriptionId);
3034 get_part(domainId, participantId)->ignore_subscription(ignoreId);
3045 return get_part(domainId, partId)->update_subscription_qos(drId, qos, subQos);
3051 return get_part(domainId, partId)->update_subscription_params(subId, params);
3058 get_part(domainId, partId)->update_subscription_locators(subId, transInfo);
3065 DomainParticipantMap::const_iterator domain =
participants_.find(domain_id);
3069 ParticipantMap::const_iterator part = domain->second.find(part_id);
3070 if (part == domain->second.end()) {
3073 return part->second;
3081 if (bit_topic_i == 0) {
3083 ACE_TEXT(
" - Could not cast TopicDescription to TopicDescriptionImpl\n")));
3090 if (participant_i == 0) {
3092 ACE_TEXT(
" - Could not cast DomainParticipant to DomainParticipantImpl\n")));
3096 TypeSupport_var type_support =
3099 DDS::DataReader_var dr = type_support->create_datareader();
3103 ACE_TEXT(
" - Could not cast DataReader to DataReaderImpl\n")));
3107 dri->
init(bit_topic_i, qos, 0 , 0 , participant_i, sub);
3117 GUID_t part_id = iter->first;
3118 bool removed = endpoint_manager().disassociate();
3124 #ifndef DDS_HAS_MINIMUM_BIT 3156 remove_discovered_participant_i(iter);
virtual void reader_exists(const GUID_t &readerid, const GUID_t &writerid)
const char *const BUILT_IN_SUBSCRIPTION_TOPIC_TYPE
UserDataQosPolicy user_data
#define TheTransportRegistry
PartitionQosPolicy partition
Implements the OpenDDS::DCPS::DomainParticipant interfaces.
bool ignore_sequence_bounds
RcHandle< T > rchandle_from(T *pointer)
TopicStatus assert_topic(GUID_t &topicId, const char *topicName, const char *dataTypeName, const DDS::TopicQos &qos, bool hasDcpsKey, TopicCallbacks *topic_callbacks)
void remove_discovered_subscription(const DCPS::GUID_t &guid)
DiscoveredPublicationMap::iterator DiscoveredPublicationIter
#define ACE_GUARD(MUTEX, OBJ, LOCK)
const char * c_str(void) const
DCPS::TopicStatus find_topic(DDS::DomainId_t domainId, const GUID_t &participantId, const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, GUID_t &topicId)
const LogLevel::Value value
GUID_t add_subscription(const GUID_t &topicId, DataReaderCallbacks_rch subscription, const DDS::DataReaderQos &qos, const TransportLocatorSeq &transInfo, const DDS::SubscriberQos &subscriberQos, const char *filterClassName, const char *filterExpr, const DDS::StringSeq ¶ms, const XTypes::TypeInformation &type_info)
GUID_t add_publication(DDS::DomainId_t domainId, const GUID_t &participantId, const GUID_t &topicId, DCPS::DataWriterCallbacks_rch publication, const DDS::DataWriterQos &qos, const DCPS::TransportLocatorSeq &transInfo, const DDS::PublisherQos &publisherQos, const XTypes::TypeInformation &type_info)
const InstanceHandle_t HANDLE_NIL
DiscoveredSubscriptionMap::iterator DiscoveredSubscriptionIter
void init(const OPENDDS_STRING &name, const DCPS::GUID_t &topic_id)
sequence< QosPolicyCount > QosPolicyCountSeq
const char *const BUILT_IN_CONNECTION_RECORD_TOPIC_TYPE
ReliabilityQosPolicy reliability
virtual GUID_t generate_participant_guid()
virtual DDS::ReturnCode_t remove_subscription_i(const GUID_t &, LocalSubscription &)
ContentFilterProperty_t filterProperties
GroupDataQosPolicy group_data
LocalSubscriptionMap::iterator LocalSubscriptionIter
unsigned int topic_counter_
OwnershipQosPolicy ownership
const char *const BUILT_IN_CONNECTION_RECORD_TOPIC
LocalSubscriptionMap local_subscriptions_
const long DURATION_INFINITE_SEC
DurabilityQosPolicy durability
virtual bool disassociate()
virtual DDS::Subscriber_ptr get_subscriber()
const RepoIdSet & local_publications() const
const GUID_t GUID_UNKNOWN
Nil value for GUID.
DDS::ReturnCode_t create_bit_topics(DomainParticipantImpl *participant)
XTypes::TypeInformation type_info_
bool isReader() const
Returns true if the GUID represents a reader entity.
TimeBasedFilterQosPolicy time_based_filter
virtual void writer_does_not_exist(const GUID_t &writerid, const GUID_t &readerid)
static StaticDiscovery_rch instance_
const RepoIdSet & discovered_subscriptions() const
void init(TopicDescriptionImpl *a_topic_desc, const DDS::DataReaderQos &qos, DDS::DataReaderListener_ptr a_listener, const DDS::StatusMask &mask, DomainParticipantImpl *participant, SubscriberImpl *subscriber)
void * memcpy(void *t, const void *s, size_t len)
void match_continue(const GUID_t &writer, const GUID_t &reader)
boolean ignore_member_names
boolean prevent_type_widening
TransportLocatorSeq trans_info_
virtual DDS::Subscriber_ptr create_subscriber(const DDS::SubscriberQos &qos, DDS::SubscriberListener_ptr a_listener, DDS::StatusMask mask)
SubscriptionBuiltinTopicDataDataReaderImpl * sub_bit()
OwnershipQosPolicy ownership
const char * c_str() const
TimeDuration max_type_lookup_service_reply_period_
const RepoIdSet & local_subscriptions() const
void set_instance_state(DDS::InstanceHandle_t instance, DDS::InstanceStateKind state, const SystemTimePoint ×tamp=SystemTimePoint::now(), const GUID_t &guid=GUID_UNKNOWN)
ACE_CDR::Octet kind() const
#define OPENDDS_ASSERT(C)
LivelinessQosPolicy liveliness
virtual const ACE_Configuration_Section_Key & root_section(void) const
boolean ignore_sequence_bounds
DeadlineQosPolicy deadline
void remove_expired_endpoints(const MonotonicTimePoint &)
void add_local_publication(const DCPS::GUID_t &guid)
bool ignore_topic(DDS::DomainId_t domainId, const GUID_t &myParticipantId, const GUID_t &ignoreId)
key GuidPrefix_t guidPrefix
virtual void remove_assoc_i(const GUID_t &, const LocalPublication &, const GUID_t &)
DestinationOrderQosPolicy destination_order
reference_wrapper< T > ref(T &r)
sequence< TransportLocator > TransportLocatorSeq
EntityFactoryQosPolicy entity_factory
bool compatibleQOS(OpenDDS::DCPS::IncompatibleQosStatus *writerStatus, OpenDDS::DCPS::IncompatibleQosStatus *readerStatus, const OpenDDS::DCPS::TransportLocatorSeq &pubTLS, const OpenDDS::DCPS::TransportLocatorSeq &subTLS, DDS::DataWriterQos const *const writerQos, DDS::DataReaderQos const *const readerQos, DDS::PublisherQos const *const pubQos, DDS::SubscriberQos const *const subQos)
DataRepresentationQosPolicy representation
void remove_publication(const GUID_t &publicationId)
const DCPS::GUID_t & topic_id() const
LocalPublicationMap local_publications_
RcHandle< StaticParticipant > ParticipantHandle
static EntityId_t build_id(const unsigned char *entity_key, const unsigned char entity_kind)
ACE_Guard< ACE_Thread_Mutex > lock_
int parse_topics(ACE_Configuration_Heap &cf)
LocalPublicationMap::iterator LocalPublicationIter
void set_reader_effective_data_rep_qos(DDS::DataRepresentationIdSeq &qos)
RepoIdSetType best_effort_readers
EntityFactoryQosPolicy entity_factory
virtual DDS::ReturnCode_t add_publication_i(const GUID_t &, LocalPublication &)
virtual DDS::ReturnCode_t get_default_datareader_qos(DDS::DataReaderQos &qos)
virtual void assign_publication_key(GUID_t &rid, const GUID_t &topicId, const DDS::DataWriterQos &qos)
void bind_config(const OPENDDS_STRING &name, DDS::Entity_ptr entity)
Conversion processing and value testing utilities for RTPS GUID_t types.
const DDS::StatusMask DEFAULT_STATUS_MASK
GUID_t add_publication(const GUID_t &topicId, DataWriterCallbacks_rch publication, const DDS::DataWriterQos &qos, const TransportLocatorSeq &transInfo, const DDS::PublisherQos &publisherQos, const XTypes::TypeInformation &type_info)
virtual AddDomainStatus add_domain_participant(DDS::DomainId_t domain, const DDS::DomainParticipantQos &qos, XTypes::TypeLookupService_rch tls)
TopicStatus remove_topic(const GUID_t &topicId)
LatencyBudgetQosPolicy latency_budget
void set_writer_effective_data_rep_qos(DDS::DataRepresentationIdSeq &qos, bool cdr_encapsulated)
String256 filterClassName
DiscoveredSubscriptionMap discovered_subscriptions_
static TimePoint_T< MonotonicClock > now()
void type_lookup_init(ReactorInterceptor_rch reactor_interceptor)
const char *const BUILT_IN_PUBLICATION_TOPIC
const octet ENTITYKIND_USER_READER_WITH_KEY
bool ignore_publication(DDS::DomainId_t domainId, const GUID_t &participantId, const GUID_t &ignoreId)
sequence< GUID_t > ReaderIdSeq
int parse_subscriberqos(ACE_Configuration_Heap &cf)
DurabilityServiceQosPolicy durability_service
TypeConsistencyEnforcementQosPolicy type_consistency
virtual DDS::ReturnCode_t get_qos(DDS::DataWriterQos &qos)
DOMAINID_TYPE_NATIVE DomainId_t
DataWriterQosMapType datawriterqos_map
DCPS::TopicStatus assert_topic(GUID_t &topicId, DDS::DomainId_t domainId, const GUID_t &participantId, const char *topicName, const char *dataTypeName, const DDS::TopicQos &qos, bool hasDcpsKey, DCPS::TopicCallbacks *topic_callbacks)
const EntityId_t ENTITYID_PARTICIPANT
const TypeConsistencyEnforcementQosPolicyKind_t ALLOW_TYPE_COERCION
PresentationQosPolicy presentation
bool ignore_string_bounds
const DDS::TopicQos local_qos() const
DDS::PublisherQos publisher_qos
void fini_bit(DCPS::DomainParticipantImpl *participant)
#define Registered_Data_Types
DiscoveredParticipantMap::iterator DiscoveredParticipantIter
Implements the OpenDDS::DCPS::DataWriterRemote interfaces and DDS::DataWriter interfaces.
static const char * DEFAULT_STATIC
ReliabilityQosPolicyKind kind
DCPS::TopicStatus remove_topic(DDS::DomainId_t domainId, const GUID_t &participantId, const GUID_t &topicId)
TypeIdentifierWithSize typeid_with_size
DurabilityQosPolicy durability
const octet ENTITYKIND_OPENDDS_TOPIC
OrigSeqNumberMap orig_seq_numbers_
PublicationBuiltinTopicDataDataReaderImpl * pub_bit()
DDS::StringSeq expressionParameters
OPENDDS_STRING topic_name
const char *const BUILT_IN_PARTICIPANT_LOCATION_TOPIC_TYPE
OwnershipStrengthQosPolicy ownership_strength
TopicNameMap topic_names_
virtual bool update_subscription_params(const GUID_t &, const DDS::StringSeq &)
void match(const GUID_t &writer, const GUID_t &reader)
void type_lookup_service(const XTypes::TypeLookupService_rch type_lookup_service)
DomainParticipantMap participants_
DestinationOrderQosPolicy destination_order
virtual void populate_transport_locator_sequence(TransportLocatorSeq *&, DiscoveredSubscriptionIter &, const GUID_t &)
DataRepresentationQosPolicy representation
RcHandle< StaticEndpointManagerSporadic > type_lookup_reply_deadline_processor_
long ParticipantCryptoHandle
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)
void pre_writer(DataWriterImpl *writer)
void serialize_type_info(const TypeInformation &type_info, T &seq, const DCPS::Encoding *encoding_option=0)
DDS::SubscriberQos subscriber_qos
void create_bit_dr(DDS::TopicDescription_ptr topic, const char *type, SubscriberImpl *sub, const DDS::DataReaderQos &qos)
key EntityKey_t entityKey
void pre_reader(DataReaderImpl *reader)
int parse_datawriterqos(ACE_Configuration_Heap &cf)
virtual DDS::ReturnCode_t remove_publication_i(const GUID_t &, LocalPublication &)
DataReaderQosMapType datareaderqos_map
bool update_domain_participant_qos(DDS::DomainId_t domain, const GUID_t &participant, const DDS::DomainParticipantQos &qos)
Implements the DDS::DataReader interface.
bool remove_subscription(DDS::DomainId_t domainId, const GUID_t &participantId, const GUID_t &subscriptionId)
const ViewStateKind NEW_VIEW_STATE
void populate_locators(OpenDDS::DCPS::TransportLocatorSeq &trans_info) const
bool ignore_domain_participant(DDS::DomainId_t domain, const GUID_t &myParticipantId, const GUID_t &ignoreId)
void match_endpoints(GUID_t repoId, const TopicDetails &td, bool remove=false)
SubscriberQosMapType subscriberqos_map
TransportLocatorSeq trans_info
void update_publication_locators(DDS::DomainId_t domainId, const GUID_t &partId, const GUID_t &dwId, const DCPS::TransportLocatorSeq &transInfo)
void set_local(const OPENDDS_STRING &data_type_name, const DDS::TopicQos &qos, bool has_dcps_key, TopicCallbacks *topic_callbacks)
virtual AddDomainStatus add_domain_participant_secure(DDS::DomainId_t domain, const DDS::DomainParticipantQos &qos, XTypes::TypeLookupService_rch tls, const GUID_t &guid, DDS::Security::IdentityHandle id, DDS::Security::PermissionsHandle perm, DDS::Security::ParticipantCryptoHandle part_crypto)
bool update_topic_qos(const GUID_t &topicId, DDS::DomainId_t domainId, const GUID_t &participantId, const DDS::TopicQos &qos)
ResourceLimitsQosPolicy resource_limits
bool ignoring(const GUID_t &guid) const
void update_subscription_locators(const GUID_t &subscriptionId, const TransportLocatorSeq &transInfo)
virtual ACE_CString _info(void) const=0
virtual void writer_exists(const GUID_t &writerid, const GUID_t &readerid)
const RepoIdSet & discovered_publications() const
XTypes::TypeLookupService_rch type_lookup_service_
sequence< GUID_t > WriterIdSeq
void update_publication_locators(const GUID_t &publicationId, const TransportLocatorSeq &transInfo)
int parse_endpoints(ACE_Configuration_Heap &cf)
const char *const BUILT_IN_PARTICIPANT_TOPIC
sequence< octet > OctetSeq
const char *const BUILT_IN_PARTICIPANT_LOCATION_TOPIC
virtual void assign_subscription_key(GUID_t &rid, const GUID_t &topicId, const DDS::DataReaderQos &qos)
virtual DDS::DomainId_t get_domain_id()
virtual bool is_expectant_opendds(const GUID_t &endpoint) const
bool update_subscription_params(DDS::DomainId_t domainId, const GUID_t &partId, const GUID_t &subId, const DDS::StringSeq ¶ms)
bool assignable(const TypeObject &ta, const TypeObject &tb) const
Both input type objects must be minimal.
EndpointRegistry registry
ReaderDataLifecycleQosPolicy reader_data_lifecycle
void purge_dead_topic(const String &topic_name)
virtual void add_assoc_i(const GUID_t &, const LocalPublication &, const GUID_t &, const DiscoveredSubscription &)
HANDLE_TYPE_NATIVE InstanceHandle_t
long count_since_last_send
GUID_t add_subscription(DDS::DomainId_t domainId, const GUID_t &participantId, const GUID_t &topicId, DCPS::DataReaderCallbacks_rch subscription, const DDS::DataReaderQos &qos, const DCPS::TransportLocatorSeq &transInfo, const DDS::SubscriberQos &subscriberQos, const char *filterClassName, const char *filterExpr, const DDS::StringSeq ¶ms, const XTypes::TypeInformation &type_info)
const char *const BUILT_IN_PARTICIPANT_TOPIC_TYPE
const unsigned long DURATION_INFINITE_NSEC
DDS::PublisherQos publisher_qos_
const char *const BUILT_IN_SUBSCRIPTION_TOPIC
void remove_discovered_participant(DiscoveredParticipantIter &iter)
TransportPriorityQosPolicy transport_priority
DataWriterCallbacks_wrch publication_
#define SUBSCRIBER_QOS_DEFAULT
virtual DDS::ReturnCode_t write_publication_data(const GUID_t &, LocalPublication &, const GUID_t &reader=GUID_UNKNOWN)
void remove_from_bit(const DiscoveredPublication &pub)
OpenDDS_Dcps_Export bool equal_guid_prefixes(const GuidPrefix_t &lhs, const GuidPrefix_t &rhs)
const char *const BUILT_IN_INTERNAL_THREAD_TOPIC
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
bool attach_participant(DDS::DomainId_t domainId, const GUID_t &participantId)
ReliabilityQosPolicy reliability
const octet ENTITYKIND_USER_WRITER_WITH_KEY
void add_local_subscription(const DCPS::GUID_t &guid)
DDS::Subscriber_var bit_subscriber() const
virtual DDS::DomainParticipant_ptr get_participant()
bool repr_to_encoding_kind(DDS::DataRepresentationId_t repr, Encoding::Kind &kind)
virtual DDS::Publisher_ptr get_publisher()
Implements the DDS::TopicDescription interface.
virtual bool update_topic_qos(const GUID_t &, const DDS::TopicQos &)
const char *const BUILT_IN_TOPIC_TOPIC
virtual int open_section(const ACE_Configuration_Section_Key &base, const ACE_TCHAR *sub_section, bool create, ACE_Configuration_Section_Key &result)
RepoIdSetType reliable_readers
bool parse_bool(const XMLCh *in, bool &value)
bool ignore_subscription(DDS::DomainId_t domainId, const GUID_t &participantId, const GUID_t &ignoreId)
RepoIdSetType best_effort_writers
const ReturnCode_t RETCODE_ERROR
const InstanceStateKind NOT_ALIVE_DISPOSED_INSTANCE_STATE
DataReaderCallbacks_wrch subscription_
virtual bool update_publication_qos(const GUID_t &, const DDS::DataWriterQos &, const DDS::PublisherQos &)
bool update_subscription_qos(DDS::DomainId_t domainId, const GUID_t &partId, const GUID_t &drId, const DDS::DataReaderQos &qos, const DDS::SubscriberQos &subQos)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
bool prevent_type_widening
LifespanQosPolicy lifespan
void update_subscription_locators(DDS::DomainId_t domainId, const GUID_t &partId, const GUID_t &subId, const DCPS::TransportLocatorSeq &transInfo)
void remove_discovered_publication(const DCPS::GUID_t &guid)
Discovery Strategy interface class.
virtual DDS::ReturnCode_t enable()
static TransportRegistry * instance()
Return a singleton instance of this class.
StaticParticipant & participant_
WriterDataLifecycleQosPolicy writer_data_lifecycle
int processSections(ACE_Configuration_Heap &cf, const ACE_Configuration_Section_Key &key, KeyList &subsections)
bool remove_publication(DDS::DomainId_t domainId, const GUID_t &participantId, const GUID_t &publicationId)
void remove_assoc(const GUID_t &remove_from, const GUID_t &removing)
bool update_publication_qos(DDS::DomainId_t domainId, const GUID_t &partId, const GUID_t &dwId, const DDS::DataWriterQos &qos, const DDS::PublisherQos &publisherQos)
const TypeFlag IS_APPENDABLE
const ReturnCode_t RETCODE_OK
boolean force_type_validation
DDS::InstanceHandle_t store_synthetic_data(const MessageType &sample, DDS::ViewStateKind view, const SystemTimePoint ×tamp=SystemTimePoint::now())
void assign(EntityId_t &dest, const EntityId_t &src)
const OPENDDS_STRING local_data_type_name() const
bool remove_domain_participant(DDS::DomainId_t domain_id, const GUID_t &participantId)
#define ACE_ERROR_RETURN(X, Y)
PublisherQosMapType publisherqos_map
virtual DDS::ReturnCode_t write_subscription_data(const GUID_t &, LocalSubscription &, const GUID_t &reader=GUID_UNKNOWN)
LivelinessQosPolicy liveliness
RcHandle< T > lock() const
virtual DDS::ReturnCode_t get_qos(DDS::DataReaderQos &qos)
TypeConsistencyEnforcementQosPolicyKind_t kind
DataRepresentationIdSeq value
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)
const EndpointRegistry & registry_
int pullValues(ACE_Configuration_Heap &cf, const ACE_Configuration_Section_Key &key, ValueMap &values)
GUID_t make_id(const GuidPrefix_t &prefix, const EntityId_t &entity)
UserDataQosPolicy user_data
UserDataQosPolicy user_data
DeadlineQosPolicy deadline
ParticipantHandle get_part(const DDS::DomainId_t domain_id, const GUID_t &part_id) const
const char *const BUILT_IN_INTERNAL_THREAD_TOPIC_TYPE
const GuidVendorId_t VENDORID_OCI
Vendor Id value specified for OCI is used for OpenDDS.
GroupDataQosPolicy group_data
Defines the interface for Discovery callbacks into the Topic.
#define TheServiceParticipant
int load_configuration(ACE_Configuration_Heap &config)
virtual bool shutting_down() const
StaticEndpointManager(const GUID_t &participant_id, ACE_Thread_Mutex &lock, const EndpointRegistry ®istry, StaticParticipant &participant)
virtual DDS::ReturnCode_t add_subscription_i(const GUID_t &, LocalSubscription &)
OpenDDS_Dcps_Export DDS::BuiltinTopicKey_t guid_to_bit_key(const GUID_t &guid)
PartitionQosPolicy partition
OPENDDS_STRING topic_name
The Internal API and Implementation of OpenDDS.
TransportLocatorSeq trans_info
int parse_datareaderqos(ACE_Configuration_Heap &cf)
virtual void reader_does_not_exist(const GUID_t &readerid, const GUID_t &writerid)
virtual DDS::TopicDescription_ptr lookup_topicdescription(const char *name)
void cleanup_type_lookup_data(const GuidPrefix_t &prefix, const XTypes::TypeIdentifier &ti, bool secure)
TypeIdentifierWithDependencies minimal
PresentationQosPolicy presentation
int parse_publisherqos(ACE_Configuration_Heap &cf)
ResourceLimitsQosPolicy resource_limits
RcHandle< BitSubscriber > init_bit(DCPS::DomainParticipantImpl *participant)
void ignore(const GUID_t &to_ignore)
DiscoveredPublicationMap discovered_publications_
typedef OPENDDS_MAP_CMP(GUID_t, DiscoveredSubscription, GUID_tKeyLessThan) DiscoveredSubscriptionMap
StaticDiscovery(const RepoKey &key)
TopicStatus find_topic(const char *topicName, CORBA::String_out dataTypeName, DDS::TopicQos_out qos, GUID_t &topicId)
const char *const BUILT_IN_TOPIC_TOPIC_TYPE
const char *const BUILT_IN_PUBLICATION_TOPIC_TYPE
sequence< string > StringSeq
bool convertToInteger(const String &s, T &value)
bool has_dcps_key(const GUID_t &topicId) const
DDS::SubscriberQos subscriber_qos_
LatencyBudgetQosPolicy latency_budget
void remove_subscription(const GUID_t &subscriptionId)
virtual bool update_subscription_qos(const GUID_t &, const DDS::DataReaderQos &, const DDS::SubscriberQos &)
RepoIdSetType reliable_writers
boolean ignore_string_bounds