summaryrefslogtreecommitdiff
path: root/modules/CIAO/connectors/dds4ccm/impl/dds
diff options
context:
space:
mode:
Diffstat (limited to 'modules/CIAO/connectors/dds4ccm/impl/dds')
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.cpp19
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.h43
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.cpp144
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.h71
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS4CCM_Traits.h66
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.cpp263
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.h155
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.cpp238
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.h57
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp261
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.h95
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.cpp190
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.h65
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.cpp181
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.h65
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.cpp162
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.h59
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.cpp177
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.h62
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.cpp352
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.h118
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.cpp473
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.h75
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.cpp151
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.h51
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.cpp156
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.h59
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.cpp50
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.h48
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.cpp457
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.h134
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.cpp67
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.h63
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.cpp159
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.h74
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.cpp179
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.h58
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.cpp251
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.h53
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.cpp301
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.h113
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.cpp108
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.h71
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.cpp76
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.h72
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.cpp1132
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.h220
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.cpp355
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.h112
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.cpp127
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.h112
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.cpp152
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.h114
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp556
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h149
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.cpp73
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.h51
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.cpp182
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.h84
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.cpp456
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.h133
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.cpp156
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.h90
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.cpp294
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.h83
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.cpp134
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.h76
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.cpp80
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.h68
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp682
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h123
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.cpp35
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.h38
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.cpp72
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.h65
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.cpp537
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.h177
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.cpp178
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.h95
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.cpp277
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.h87
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/TimeUtilities.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Topic.cpp217
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Topic.h83
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.cpp90
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.h64
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.cpp49
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.h53
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.cpp78
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.h47
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.cpp304
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.h86
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Utils.cpp10
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Utils.h91
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.cpp98
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.h55
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_dds_impl_export.h58
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_impl.mpc42
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/BuiltinTopicKey_t.h28
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataReaderQos.h68
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataWriterQos.h77
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DeadlineQosPolicy.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DestinationOrderQosPolicy.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantFactoryQos.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantQos.h38
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityQosPolicy.h33
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityServiceQosPolicy.h44
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Duration_t.h37
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/EntityFactoryQosPolicy.h33
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/GroupDataQosPolicy.h35
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/HistoryQosPolicy.h35
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InconsistentTopicStatus.h36
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandleSeq.h48
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandle_t.h92
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LatencyBudgetQosPolicy.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LifespanQosPolicy.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessChangedStatus.h43
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessLostStatus.h36
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessQosPolicy.h36
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OctetSeq.h32
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedDeadlineMissedStatus.h39
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedIncompatibleQosStatus.h41
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipQosPolicy.h33
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipStrengthQosPolicy.h33
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PartitionQosPolicy.h35
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PresentationQosPolicy.h37
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationBuiltinTopicData.h81
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationMatchedStatus.h43
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublisherQos.h44
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/QosPolicyCountSeq.h44
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReaderDataLifecycleQosPolicy.h38
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliabilityQosPolicy.h36
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableReaderActivityChangedStatus.h42
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableWriterCacheChangedStatus.h51
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedDeadlineMissedStatus.h38
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedIncompatibleQosStatus.h41
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ResourceLimitsQosPolicy.h37
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleInfo.h71
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleLostStatus.h36
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleRejectedStatus.h41
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/StringSeq.h45
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriberQos.h44
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionBuiltinTopicData.h80
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionMatchedStatus.h44
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TimeBasedFilterQosPolicy.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Time_t.h37
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicDataQosPolicy.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicQos.h71
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TransportPriorityQosPolicy.h33
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/UserDataQosPolicy.h34
-rw-r--r--modules/CIAO/connectors/dds4ccm/impl/dds/ndds/WriterDataLifecycleQosPolicy.h33
151 files changed, 17227 insertions, 0 deletions
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.cpp
new file mode 100644
index 00000000000..2a2a0597606
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.cpp
@@ -0,0 +1,19 @@
+// $Id$
+#include "dds4ccm/impl/dds/Coherent_Changes_Guard.h"
+
+CIAO::DDS4CCM::Coherent_Changes_Guard::Coherent_Changes_Guard (DDSPublisher* p, bool coherent_write) : p_ (p), coherent_write_ (coherent_write)
+{
+ if (this->coherent_write_)
+ {
+ p_->begin_coherent_changes ();
+ }
+}
+
+CIAO::DDS4CCM::Coherent_Changes_Guard::~Coherent_Changes_Guard ()
+{
+ if (this->coherent_write_)
+ {
+ this->p_->end_coherent_changes ();
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.h
new file mode 100644
index 00000000000..d98cde63d1b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Coherent_Changes_Guard.h
@@ -0,0 +1,43 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef _CIAO_COHERENT_CHANGES_GUARD
+#define _CIAO_COHERENT_CHANGES_GUARD
+
+#include "ace/Copy_Disabled.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+# include "dds/DdsDcpsC.h"
+typedef ::DDS::Publisher DDSPublisher;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export Coherent_Changes_Guard :
+ private ACE_Copy_Disabled
+ {
+ public:
+ Coherent_Changes_Guard (::DDSPublisher* p, bool coherent_write);
+ ~Coherent_Changes_Guard ();
+ private:
+ ::DDSPublisher* p_;
+ bool const coherent_write_;
+ };
+ }
+}
+
+#endif /* _CIAO_COHERENT_CHANGES_GUARD */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.cpp
new file mode 100644
index 00000000000..c97ea2c28e8
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.cpp
@@ -0,0 +1,144 @@
+// $Id$
+
+#include "ContentFilteredTopic.h"
+#include "Topic.h"
+
+#include "ndds/StringSeq.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_ContentFilteredTopic_i::CCM_DDS_ContentFilteredTopic_i (
+ DDSContentFilteredTopic * dw) : impl_ (dw)
+ {
+ }
+
+ CCM_DDS_ContentFilteredTopic_i::~CCM_DDS_ContentFilteredTopic_i (void)
+ {
+ }
+
+ char *
+ CCM_DDS_ContentFilteredTopic_i::get_filter_expression (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_ContentFilteredTopic_i::get_filter_expression");
+ return CORBA::string_dup (this->impl ()->get_filter_expression ());
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_ContentFilteredTopic_i::get_expression_parameters (
+ ::DDS::StringSeq & expression_parameters)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_ContentFilteredTopic_i::get_expression_parameters");
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_StringSeq parameters;
+ ::DDS::ReturnCode_t retval = this->impl ()->get_expression_parameters (
+ parameters);
+ expression_parameters <<= parameters;
+#else
+ ::DDS::ReturnCode_t retval =
+ this->impl ()->get_expression_parameters (expression_parameters);
+#endif
+ return retval;
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_ContentFilteredTopic_i::set_expression_parameters (
+ const ::DDS::StringSeq & expression_parameters)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_ContentFilteredTopic_i::set_expression_parameters");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_StringSeq parameters;
+ parameters <<= expression_parameters;
+ return this->impl ()->set_expression_parameters (parameters);
+#else
+ return this->impl ()->set_expression_parameters (expression_parameters);
+#endif
+ }
+
+ ::DDS::Topic_ptr
+ CCM_DDS_ContentFilteredTopic_i::get_related_topic (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_ContentFilteredTopic_i::get_related_topic");
+
+ ::DDS::Topic_var retval = ::DDS::Topic::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSTopic *topic = this->impl ()->get_related_topic ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Topic_i (topic),
+ CORBA::NO_MEMORY ());
+ return retval._retn ();
+#else
+ ::DDS::Topic_var topic = this->impl ()->get_related_topic ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Topic_i (topic.in ()),
+ CORBA::NO_MEMORY ());
+ return retval._retn ();
+#endif
+ }
+
+ char *
+ CCM_DDS_ContentFilteredTopic_i::get_type_name (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ return CORBA::string_dup (this->impl ()->get_type_name ());
+#else
+ return this->impl ()->get_type_name ();
+#endif
+ }
+
+ char *
+ CCM_DDS_ContentFilteredTopic_i::get_name (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ return CORBA::string_dup (this->impl ()->get_name ());
+#else
+ return this->impl ()->get_name ();
+#endif
+ }
+
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_ContentFilteredTopic_i::get_participant (void)
+ {
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDomainParticipant* p = this->impl ()->get_participant ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::DomainParticipant_var p = this->impl ()->get_participant ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ DDSContentFilteredTopic *
+ CCM_DDS_ContentFilteredTopic_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_ContentFilteredTopic_i::set_impl (DDSContentFilteredTopic * dw)
+ {
+ this->impl_ = dw;
+ }
+
+ DDSContentFilteredTopic *
+ CCM_DDS_ContentFilteredTopic_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.h
new file mode 100644
index 00000000000..c5dc96c8a1e
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ContentFilteredTopic.h
@@ -0,0 +1,71 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef CIAO_NDDS_CONTENFILTEREDTOPIC_H
+#define CIAO_NDDS_CONTENFILTEREDTOPIC_H
+
+#include "DomainParticipant.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "tao/LocalObject.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::ContentFilteredTopic DDSContentFilteredTopic;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_ContentFilteredTopic_i :
+ public virtual ::DDS::CCM_ContentFilteredTopic,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_ContentFilteredTopic_i (DDSContentFilteredTopic * dw);
+
+ /// Destructor
+ virtual ~CCM_DDS_ContentFilteredTopic_i (void);
+
+ virtual char * get_filter_expression (void);
+
+ virtual
+ ::DDS::ReturnCode_t get_expression_parameters (
+ ::DDS::StringSeq & expression_parameters);
+
+ virtual
+ ::DDS::ReturnCode_t set_expression_parameters (
+ const ::DDS::StringSeq & expression_parameters);
+
+ virtual
+ ::DDS::Topic_ptr get_related_topic (void);
+
+ virtual
+ char * get_type_name (void);
+
+ virtual
+ char * get_name (void);
+
+ virtual
+ ::DDS::DomainParticipant_ptr get_participant (void);
+
+ DDSContentFilteredTopic * get_impl (void);
+
+ void set_impl (DDSContentFilteredTopic * dw);
+
+ private:
+ DDSContentFilteredTopic * impl_;
+
+ DDSContentFilteredTopic * impl (void);
+ };
+ }
+}
+
+#endif /* CIAO_NDDS_CONTENFILTEREDTOPIC_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS4CCM_Traits.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS4CCM_Traits.h
new file mode 100644
index 00000000000..45022d7e9f1
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS4CCM_Traits.h
@@ -0,0 +1,66 @@
+/**
+ * @file DDS4CCM_Traits.h
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ *
+ * $Id$
+ *
+ * Traits necessary for various bits and pieces of the DDS4CCM infrastructure.
+ */
+
+#ifndef DDS4CCM_TRAITS_H
+#define DDS4CCM_TRAITS_H
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename BASE_TYPE,
+ typename SEQ_TYPE,
+ typename WRITER_TYPE,
+ typename UPDATER_TYPE,
+ typename GETTER_TYPE,
+ typename READER_TYPE,
+ typename CONTEXT_TYPE,
+ typename LISTENER_TYPE,
+ typename STATELISTENER_TYPE,
+ typename CONNECTORSTATUSLISTENER_TYPE
+ >
+
+ struct Connector_Traits
+ {
+ typedef BASE_TYPE base_type;
+ typedef SEQ_TYPE seq_type;
+ typedef WRITER_TYPE writer_type;
+ typedef UPDATER_TYPE updater_type;
+ typedef GETTER_TYPE getter_type;
+ typedef READER_TYPE reader_type;
+ typedef CONTEXT_TYPE context_type;
+ typedef LISTENER_TYPE listener_type;
+ typedef STATELISTENER_TYPE statelistener_type;
+ typedef CONNECTORSTATUSLISTENER_TYPE connectorstatuslistener_type;
+ };
+
+ /**
+ * @struct Type_Traits
+ * @brief Convenience traits struct.
+ *
+ * This is a convenience struct that is used by most of the
+ * DDS4CCM infrastructure; it is not necessary to use this exact
+ * struct, so long as all of the needed fields are filled in.
+ */
+ template <typename VALUE_TYPE,
+ typename DDS_SEQ_TYPE,
+ typename TYPE_SUPPORT,
+ typename DATA_WRITER,
+ typename DATA_READER>
+ struct Type_Traits
+ {
+ typedef VALUE_TYPE value_type;
+ typedef DDS_SEQ_TYPE dds_seq_type;
+ typedef TYPE_SUPPORT type_support;
+ typedef DATA_WRITER data_writer;
+ typedef DATA_READER data_reader;
+ };
+ }
+}
+#endif /* DDS4CCM_TRAITS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.cpp
new file mode 100644
index 00000000000..e464fd0d680
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.cpp
@@ -0,0 +1,263 @@
+// $Id$
+
+#include "dds4ccm/impl/dds/Utils.h"
+#include "dds4ccm/impl/dds/DDSCallbackStatusHandler.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+//============================================================
+// On_Unexpected_Status_Handler
+//============================================================
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ OnUnexpectedStatusHandler::OnUnexpectedStatusHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ::DDS::Entity_ptr entity,
+ ::DDS::StatusKind status_kind) :
+ error_listener_ (::CCM_DDS::ConnectorStatusListener::_duplicate (error_listener)),
+ entity_ (::DDS::Entity::_duplicate (entity)),
+ status_kind_ (status_kind)
+ {
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+ }
+
+ OnUnexpectedStatusHandler::~OnUnexpectedStatusHandler (void)
+ {
+ }
+
+ int
+ OnUnexpectedStatusHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->error_listener_->on_unexpected_status (this->entity_, this->status_kind_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+
+ //============================================================
+ // OnRequestedOncompatibleQosHandler
+ //============================================================
+ OnRequestedOncompatibleQosHandler::OnRequestedOncompatibleQosHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::RequestedIncompatibleQosStatus &status) :
+ csl_ (::CCM_DDS::ConnectorStatusListener::_duplicate (csl)),
+ dr_ (::DDS::DataReader::_duplicate (dr)),
+ status_ (status)
+ {
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+ }
+
+ OnRequestedOncompatibleQosHandler::~OnRequestedOncompatibleQosHandler (void)
+ {
+ }
+
+ int
+ OnRequestedOncompatibleQosHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->csl_->on_requested_incompatible_qos (this->dr_, this->status_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+
+ //============================================================
+ // OnSampleRejectedHandler
+ //============================================================
+ OnSampleRejectedHandler::OnSampleRejectedHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::SampleRejectedStatus &status) :
+ csl_ (::CCM_DDS::ConnectorStatusListener::_duplicate (csl)),
+ dr_ (::DDS::DataReader::_duplicate (dr)),
+ status_ (status)
+ {
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+ }
+
+ OnSampleRejectedHandler::~OnSampleRejectedHandler (void)
+ {
+ }
+
+ int
+ OnSampleRejectedHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->csl_->on_sample_rejected (this->dr_, this->status_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+
+ //============================================================
+ // OnInconsistentTopicHandler
+ //============================================================
+ OnInconsistentTopicHandler::OnInconsistentTopicHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::Topic_ptr tp,
+ const ::DDS::InconsistentTopicStatus &status) :
+ csl_ (::CCM_DDS::ConnectorStatusListener::_duplicate (csl)),
+ tp_ (::DDS::Topic::_duplicate (tp)),
+ status_ (status)
+ {
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+ }
+
+ OnInconsistentTopicHandler::~OnInconsistentTopicHandler (void)
+ {
+ }
+
+ int
+ OnInconsistentTopicHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->csl_->on_inconsistent_topic (this->tp_, this->status_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+
+ //============================================================
+ // OnOfferedDeadlineMissedHandler
+ //============================================================
+ OnOfferedDeadlineMissedHandler::OnOfferedDeadlineMissedHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataWriter_ptr dw,
+ const ::DDS::OfferedDeadlineMissedStatus &status) :
+ csl_ (::CCM_DDS::ConnectorStatusListener::_duplicate (csl)),
+ dw_ (::DDS::DataWriter::_duplicate (dw)),
+ status_ (status)
+ {
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+ }
+
+ OnOfferedDeadlineMissedHandler::~OnOfferedDeadlineMissedHandler (void)
+ {
+ }
+
+ int
+ OnOfferedDeadlineMissedHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->csl_->on_offered_deadline_missed (this->dw_, this->status_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+
+ //============================================================
+ // OnOfferedIncompatibleQoSHandler
+ //============================================================
+ OnOfferedIncompatibleQoSHandler::OnOfferedIncompatibleQoSHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataWriter_ptr dw,
+ const ::DDS::OfferedIncompatibleQosStatus &status) :
+ csl_ (::CCM_DDS::ConnectorStatusListener::_duplicate (csl)),
+ dw_ (::DDS::DataWriter::_duplicate (dw)),
+ status_ (status)
+ {
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+ }
+
+ OnOfferedIncompatibleQoSHandler::~OnOfferedIncompatibleQoSHandler (void)
+ {
+ }
+
+ int
+ OnOfferedIncompatibleQoSHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->csl_->on_offered_incompatible_qos (this->dw_, this->status_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+
+ //============================================================
+ // OnRequestedDeadlineMissedHandler
+ //============================================================
+ OnRequestedDeadlineMissedHandler::OnRequestedDeadlineMissedHandler (
+ ::CCM_DDS::PortStatusListener_ptr psl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::RequestedDeadlineMissedStatus & status) :
+ psl_ (::CCM_DDS::PortStatusListener::_duplicate (psl)),
+ dr_ (::DDS::DataReader::_duplicate (dr)),
+ status_ (status)
+ {
+ }
+
+ OnRequestedDeadlineMissedHandler::~OnRequestedDeadlineMissedHandler ()
+ {
+ }
+
+ int
+ OnRequestedDeadlineMissedHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->psl_->on_requested_deadline_missed (this->dr_, this->status_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+
+ //============================================================
+ // OnSampleLostHandler
+ //============================================================
+ OnSampleLostHandler::OnSampleLostHandler (
+ ::CCM_DDS::PortStatusListener_ptr psl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::SampleLostStatus & status) :
+ psl_ (::CCM_DDS::PortStatusListener::_duplicate (psl)),
+ dr_ (::DDS::DataReader::_duplicate (dr)),
+ status_ (status)
+ {
+ }
+
+ OnSampleLostHandler::~OnSampleLostHandler ()
+ {
+ }
+
+ int
+ OnSampleLostHandler::handle_exception (ACE_HANDLE)
+ {
+ try
+ {
+ this->psl_->on_sample_lost (this->dr_, this->status_);
+ }
+ catch (...)
+ {
+ }
+ return 0;
+ }
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.h
new file mode 100644
index 00000000000..32d9701e738
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDSCallbackStatusHandler.h
@@ -0,0 +1,155 @@
+// $Id$
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Eventhandler on orb thread, handling the
+ * received data from DDS.
+ */
+
+#ifndef CIAO_DDS_CALLBACK_STATUS_HANDLER
+#define CIAO_DDS_CALLBACK_STATUS_HANDLER
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/idl/dds4ccm_ConnectorStatusListenerC.h"
+#include "dds4ccm/idl/dds4ccm_PortStatusListenerC.h"
+#include "ace/Event_Handler.h"
+#include "dds4ccm_dds_impl_export.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export OnUnexpectedStatusHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnUnexpectedStatusHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ::DDS::Entity_ptr entity,
+ ::DDS::StatusKind status_kind);
+ virtual ~OnUnexpectedStatusHandler ();
+
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::ConnectorStatusListener_var error_listener_;
+ ::DDS::Entity_var entity_;
+ ::DDS::StatusKind status_kind_;
+ };
+
+ class DDS4CCM_DDS_IMPL_Export OnRequestedOncompatibleQosHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnRequestedOncompatibleQosHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::RequestedIncompatibleQosStatus &status);
+ virtual ~OnRequestedOncompatibleQosHandler ();
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::ConnectorStatusListener_var csl_;
+ ::DDS::DataReader_var dr_;
+ ::DDS::RequestedIncompatibleQosStatus const status_;
+ };
+
+ class DDS4CCM_DDS_IMPL_Export OnSampleRejectedHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnSampleRejectedHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::SampleRejectedStatus &status);
+ virtual ~OnSampleRejectedHandler ();
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::ConnectorStatusListener_var csl_;
+ ::DDS::DataReader_var dr_;
+ ::DDS::SampleRejectedStatus const status_;
+ };
+
+ class DDS4CCM_DDS_IMPL_Export OnInconsistentTopicHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnInconsistentTopicHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::Topic_ptr tp,
+ const ::DDS::InconsistentTopicStatus &status);
+ virtual ~OnInconsistentTopicHandler ();
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::ConnectorStatusListener_var csl_;
+ ::DDS::Topic_var tp_;
+ ::DDS::InconsistentTopicStatus const status_;
+ };
+
+ class DDS4CCM_DDS_IMPL_Export OnOfferedDeadlineMissedHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnOfferedDeadlineMissedHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataWriter_ptr dw,
+ const ::DDS::OfferedDeadlineMissedStatus &status);
+ virtual ~OnOfferedDeadlineMissedHandler ();
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::ConnectorStatusListener_var csl_;
+ ::DDS::DataWriter_var dw_;
+ ::DDS::OfferedDeadlineMissedStatus const status_;
+ };
+
+ class DDS4CCM_DDS_IMPL_Export OnOfferedIncompatibleQoSHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnOfferedIncompatibleQoSHandler (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl,
+ ::DDS::DataWriter_ptr dw,
+ const ::DDS::OfferedIncompatibleQosStatus &status);
+ virtual ~OnOfferedIncompatibleQoSHandler ();
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::ConnectorStatusListener_var csl_;
+ ::DDS::DataWriter_var dw_;
+ ::DDS::OfferedIncompatibleQosStatus const status_;
+ };
+
+ class DDS4CCM_DDS_IMPL_Export OnRequestedDeadlineMissedHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnRequestedDeadlineMissedHandler (
+ ::CCM_DDS::PortStatusListener_ptr psl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::RequestedDeadlineMissedStatus &status);
+ virtual ~OnRequestedDeadlineMissedHandler ();
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::PortStatusListener_var psl_;
+ ::DDS::DataReader_var dr_;
+ ::DDS::RequestedDeadlineMissedStatus const status_;
+ };
+
+ class DDS4CCM_DDS_IMPL_Export OnSampleLostHandler :
+ public ACE_Event_Handler
+ {
+ public:
+ OnSampleLostHandler (
+ ::CCM_DDS::PortStatusListener_ptr psl,
+ ::DDS::DataReader_ptr dr,
+ const ::DDS::SampleLostStatus &status);
+ virtual ~OnSampleLostHandler ();
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ ::CCM_DDS::PortStatusListener_var psl_;
+ ::DDS::DataReader_var dr_;
+ ::DDS::SampleLostStatus const status_;
+ };
+ }
+}
+
+#endif /* CIAO_DDS_CALLBACK_STATUS_HANDLER */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.cpp
new file mode 100644
index 00000000000..10771a3c029
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.cpp
@@ -0,0 +1,238 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds/DomainParticipantFactory.h"
+#include "dds4ccm/impl/dds/DomainParticipant.h"
+#include "ace/Tokenizer_T.h"
+#include "ace/Env_Value_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::DDS_Base_Connector_T (void)
+ : domain_id_ (0)
+ , configuration_complete_ (false)
+ , library_name_ (0)
+ , profile_name_ (0)
+{
+ ACE_Env_Value<int> id (ACE_TEXT("DDS4CCM_DEFAULT_DOMAIN_ID"), this->domain_id_);
+ this->domain_id_ = id;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::~DDS_Base_Connector_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::DomainId_t
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::domain_id (void)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::domain_id");
+
+ return this->domain_id_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::domain_id (
+ ::DDS::DomainId_t domain_id)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::domain_id");
+
+ if (this->configuration_complete_)
+ {
+ throw ::CCM_DDS::NonChangeable ();
+ }
+ else
+ {
+ this->domain_id_ = domain_id;
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+char *
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::qos_profile (void)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::qos_profile");
+
+ return CORBA::string_dup (this->qos_profile_.in ());
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::qos_profile (
+ const char * qos_profile)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::qos_profile");
+
+ if (this->configuration_complete_)
+ {
+ throw ::CCM_DDS::NonChangeable ();
+ }
+ else
+ {
+ this->qos_profile_ = qos_profile;
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::init_default_domain (void)
+{
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "DDS_Base_Connector_T::init_default_domain - "
+ "Configuring default domain <%d>\n",
+ this->domain_id_));
+ try
+ {
+ ACE_Env_Value<int> verbosity (ACE_TEXT("DDS4CCM_NDDS_LOG_VERBOSITY"),
+ NDDS_CONFIG_LOG_VERBOSITY_SILENT);
+
+ NDDS_Config_LogVerbosity n_verbosity =
+ static_cast <NDDS_Config_LogVerbosity> (verbosity.operator int());
+ NDDSConfigLogger::get_instance()->set_verbosity (n_verbosity);
+
+ // Generic code
+ if (this->qos_profile_.in ())
+ {
+ char* buf = ACE_OS::strdup (this->qos_profile_.in ());
+ ACE_Tokenizer_T<char> tok (buf);
+ tok.delimiter_replace ('#', 0);
+ for (char *p = tok.next (); p; p = tok.next ())
+ {
+ if (!this->library_name_)
+ {
+ this->library_name_ = p;
+ }
+ else if (!this->profile_name_)
+ {
+ this->profile_name_ = p;
+ }
+ }
+ }
+ if (this->library_name_ && this->profile_name_)
+ {
+ DPFACTORY->set_default_participant_qos_with_profile (
+ this->library_name_,
+ this->profile_name_);
+ this->domain_participant_ =
+ DPFACTORY->create_participant_with_profile (
+ this->domain_id_,
+ this->library_name_,
+ this->profile_name_,
+ ::DDS::DomainParticipantListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::DomainParticipantQos qos;
+ this->domain_participant_ =
+ DPFACTORY->create_participant (
+ this->domain_id_,
+ qos,
+ ::DDS::DomainParticipantListener::_nil (),
+ 0);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_Base_Connector_T::init_default_domain: "
+ "Caught unexpected exception while configuring default domain <%d>\n",
+ this->domain_id_));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::set_session_context (
+ ::Components::SessionContext_ptr ctx)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::set_session_context");
+
+ typename CCM_TYPE::context_type::_var_type lctx =
+ CCM_TYPE::context_type::_narrow (ctx);
+
+ if (::CORBA::is_nil (lctx.in ()))
+ {
+ throw ::CORBA::INTERNAL ();
+ }
+
+ this->context_ = lctx;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete (void)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete");
+ this->init_default_domain ();
+ this->configuration_complete_ = true;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_activate (void)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_activate");
+ try
+ {
+ if (::CORBA::is_nil (this->domainparticipantlistener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->domainparticipantlistener_,
+ DomainParticipantListener(
+ this->context_->
+ get_connection_error_listener ()),
+ CORBA::NO_MEMORY ());
+ }
+ this->domain_participant_->set_listener (
+ this->domainparticipantlistener_.in (),
+ DomainParticipantListener::get_mask ());
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_Base_Connector_T::ccm_activate: "
+ "Caught unexpected exception while configuring default domain\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate (void)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate");
+ try
+ {
+ this->domain_participant_->set_listener (
+ ::DDS::DomainParticipantListener::_nil (),
+ 0);
+ this->domainparticipantlistener_ = ::DDS::DomainParticipantListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_Base_Connector_T::ccm_passivate: "
+ "Caught unexpected exception while configuring default domain\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove (void)
+{
+ DDS4CCM_TRACE ("DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove");
+
+ ::DDS::ReturnCode_t const retcode = DPFACTORY->delete_participant (
+ this->domain_participant_.in ());
+ if (retcode != ::DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Base_Connector_T::ccm_remove - "
+ "Unable to delete participant: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retcode)));
+ throw CORBA::INTERNAL ();
+ }
+
+
+ this->domain_participant_ = ::DDS::DomainParticipant::_nil ();
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.h
new file mode 100644
index 00000000000..77466a88097
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Base_Connector_T.h
@@ -0,0 +1,57 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ */
+#ifndef DDS_BASE_CONNECTOR_T_H
+#define DDS_BASE_CONNECTOR_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+#include "tao/LocalObject.h"
+#include "dds4ccm/impl/dds/DomainParticipantListener_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+class DDS_Base_Connector_T
+ : public virtual CCM_TYPE::base_type,
+ public virtual ::CORBA::LocalObject,
+ private virtual ACE_Copy_Disabled
+{
+public:
+ DDS_Base_Connector_T (void);
+ virtual ~DDS_Base_Connector_T (void);
+
+ virtual ::DDS::DomainId_t domain_id (void);
+
+ virtual void domain_id (::DDS::DomainId_t domain_id);
+
+ virtual char *qos_profile (void);
+
+ virtual void qos_profile (const char * qos_profile);
+
+ virtual void set_session_context (::Components::SessionContext_ptr ctx);
+
+ virtual void configuration_complete (void);
+ virtual void ccm_remove (void);
+ virtual void ccm_activate (void);
+ virtual void ccm_passivate (void);
+
+protected:
+ void init_default_domain (void);
+
+ DDS::DomainId_t domain_id_;
+ CORBA::String_var qos_profile_;
+ bool configuration_complete_;
+ const char* library_name_;
+ const char* profile_name_;
+
+ ::DDS::DomainParticipant_var domain_participant_;
+ ::DDS::DomainParticipantListener_var domainparticipantlistener_;
+ typename CCM_TYPE::context_type::_var_type context_;
+
+ typedef ::CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE> DomainParticipantListener;
+};
+
+#include "dds4ccm/impl/dds/DDS_Base_Connector_T.cpp"
+
+#endif /* CONNECTOR_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp
new file mode 100644
index 00000000000..3c37ed761bb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.cpp
@@ -0,0 +1,261 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/Writer_T.h"
+#include "dds4ccm/impl/dds/Getter_T.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::DDS_Event_Connector_T (void) :
+ TopicBaseConnector (),
+ supplier_obtained_ (false),
+ push_consumer_obtained_ (false),
+ pull_consumer_obtained_ (false)
+
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::~DDS_Event_Connector_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::writer_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_data");
+
+ this->supplier_obtained_ = true;
+ return this->supplier_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataWriter_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_supplier_dds_entity");
+
+ this->supplier_obtained_ = true;
+ return this->supplier_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::getter_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_fresh_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_fresh_data");
+
+ this->pull_consumer_obtained_ = true;
+ return this->pull_consumer_.get_fresh_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data");
+
+ this->push_consumer_obtained_ = true;
+ return this->push_consumer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_data");
+
+ this->pull_consumer_obtained_ = true;
+ return this->pull_consumer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::CCM_DDS::CCM_DataListenerControl_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data_control (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_data_control");
+
+ this->push_consumer_obtained_ = true;
+ return this->push_consumer_.get_data_control ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_consumer_dds_entity");
+
+ this->pull_consumer_obtained_ = true;
+ return this->pull_consumer_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_consumer_dds_entity");
+
+ this->push_consumer_obtained_ = true;
+ return this->push_consumer_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete");
+
+ TopicBaseConnector::configuration_complete ();
+
+ this->push_consumer_obtained_ |=
+ ! ::CORBA::is_nil (this->context_->get_connection_push_consumer_data_listener ());
+
+ ::CCM_DDS::PortStatusListener_var push_consumer_psl =
+ this->context_->get_connection_push_consumer_status ();
+ this->push_consumer_obtained_ |= ! ::CORBA::is_nil (push_consumer_psl.in ());
+
+ ::CCM_DDS::PortStatusListener_var pull_consumer_psl =
+ this->context_->get_connection_pull_consumer_status ();
+ this->pull_consumer_obtained_ |=
+ ! ::CORBA::is_nil (pull_consumer_psl.in ());
+
+ if (this->push_consumer_obtained_)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "Creating push consumer port.\n"));
+ this->push_consumer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "No need to create push consumer port.\n"));
+ }
+
+ if (this->supplier_obtained_)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "Creating supplier port.\n"));
+ this->supplier_.configuration_complete(
+ this->topic_.in (),
+ this->publisher_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "No need to create supplier port.\n"));
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "Creating pull consumer port.\n"));
+ this->pull_consumer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete - "
+ "No need to create pull consumer port.\n"));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_activate (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_activate");
+ ACE_Reactor* reactor = 0;
+#if (CIAO_DDS4CCM_CONTEXT_SWITCH == 1)
+ reactor = this->context_->get_CCM_object()->_get_orb ()->orb_core ()->reactor ();
+#endif
+ TopicBaseConnector::ccm_activate (reactor);
+
+ if (this->push_consumer_obtained_)
+ {
+ this->push_consumer_.activate (
+ this->context_->get_connection_push_consumer_data_listener (),
+ this->context_->get_connection_push_consumer_status (),
+ reactor);
+ }
+
+ if (this->supplier_obtained_)
+ {
+ this->supplier_.activate ();
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ this->pull_consumer_.activate (
+ this->context_->get_connection_pull_consumer_status (),
+ reactor);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_passivate (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_passivate");
+
+ if (this->push_consumer_obtained_)
+ {
+ this->push_consumer_.passivate ();
+ }
+
+ if (this->supplier_obtained_)
+ {
+ this->supplier_.passivate ();
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ this->pull_consumer_.passivate ();
+ }
+ TopicBaseConnector::ccm_passivate ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_remove (void)
+{
+ DDS4CCM_TRACE ("DDS_Event_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_remove");
+
+ if (this->push_consumer_obtained_)
+ {
+ this->push_consumer_.remove (this->subscriber_.in ());
+ }
+
+ if (this->supplier_obtained_)
+ {
+ this->supplier_.remove (this->publisher_.in ());
+ }
+
+ if (this->pull_consumer_obtained_)
+ {
+ this->pull_consumer_.remove (this->subscriber_.in ());
+ }
+ TopicBaseConnector::ccm_remove ();
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.h
new file mode 100644
index 00000000000..cc6783ea175
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Event_Connector_T.h
@@ -0,0 +1,95 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_EVENT_CONNECTOR_T_H_
+#define DDS_EVENT_CONNECTOR_T_H_
+
+#include "dds4ccm/impl/dds/DDS_TopicBase_Connector_T.h"
+#include "dds4ccm/impl/dds/DDS_Get_T.h"
+#include "dds4ccm/impl/dds/DDS_Write_T.h"
+#include "dds4ccm/impl/dds/DDS_Listen_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+class DDS_Event_Connector_T
+ : public virtual DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>
+{
+public:
+ DDS_Event_Connector_T (void);
+ virtual ~DDS_Event_Connector_T (void);
+
+ /**
+ * @name DDS_Write
+ * DDS_Write operations
+ */
+ //@{
+ virtual typename CCM_TYPE::writer_type::_ptr_type get_supplier_data (void);
+
+ virtual ::DDS::CCM_DataWriter_ptr get_supplier_dds_entity (void);
+ //@}
+
+ /**
+ * @name DDS_Get
+ * DDS_Get operations
+ */
+ //@{
+ virtual typename CCM_TYPE::reader_type::_ptr_type get_pull_consumer_data (void);
+
+ virtual typename CCM_TYPE::getter_type::_ptr_type get_pull_consumer_fresh_data (void);
+
+ virtual ::DDS::CCM_DataReader_ptr get_pull_consumer_dds_entity (void);
+ //@}
+
+ /**
+ * @name DDS_Listen
+ * DDS_Listen operations
+ */
+ //@{
+ virtual typename CCM_TYPE::reader_type::_ptr_type get_push_consumer_data (void);
+
+ virtual ::CCM_DDS::CCM_DataListenerControl_ptr get_push_consumer_data_control (void);
+
+ virtual ::DDS::CCM_DataReader_ptr get_push_consumer_dds_entity (void);
+ //@}
+
+ virtual void configuration_complete (void);
+
+ virtual void ccm_activate (void);
+ virtual void ccm_passivate (void);
+ virtual void ccm_remove (void);
+
+private:
+ bool supplier_obtained_;
+ bool push_consumer_obtained_;
+ bool pull_consumer_obtained_;
+
+ /**
+ * DDS_Write supplier
+ */
+ //@{
+ DDS_Write_T <DDS_TYPE, CCM_TYPE> supplier_;
+ //@}
+
+ /**
+ * DDS_Listen push_consumer
+ */
+ //@{
+ DDS_Listen_T <DDS_TYPE, CCM_TYPE, FIXED> push_consumer_;
+ //@}
+
+ /**
+ * DDS_Get pull_consumer
+ */
+ //@{
+ DDS_Get_T <DDS_TYPE, CCM_TYPE, FIXED> pull_consumer_;
+ //@}
+
+ typedef DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE> TopicBaseConnector;
+};
+
+#include "dds4ccm/impl/dds/DDS_Event_Connector_T.cpp"
+
+#endif /* DDS_EVENT_CONNECTOR_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.cpp
new file mode 100644
index 00000000000..2d7bb7c6ae3
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.cpp
@@ -0,0 +1,190 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::DDS_Get_T (void) :
+ ccm_dds_reader_ (0)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::~DDS_Get_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name)
+{
+ DDS4CCM_TRACE ("DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete");
+
+ try
+ {
+ if (!this->ccm_dds_reader_.get_impl ())
+ {
+ ::DDS::DataReader_var reader;
+ if (profile_name && library_name)
+ {
+ reader = subscriber->create_datareader_with_profile (
+ topic,
+ library_name,
+ profile_name,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::DataReaderQos drqos;
+ reader = subscriber->create_datareader (
+ topic,
+ drqos,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *rd =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *> (reader.in ());
+ this->ccm_dds_reader_.set_impl (rd->get_impl ());
+ this->dds_get_.set_impl (&this->ccm_dds_reader_);
+ this->dds_read_.set_impl (&this->ccm_dds_reader_);
+ this->dds_read_.set_contentfilteredtopic_data (library_name,
+ profile_name,
+ &this->dds_get_);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Get_T::configuration_complete: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::activate (
+ ::CCM_DDS::PortStatusListener_ptr listener,
+ ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::activate");
+ try
+ {
+ if (::CORBA::is_nil (this->status_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->status_,
+ PortStatusListener (listener, reactor),
+ CORBA::NO_MEMORY ());
+ }
+ this->ccm_dds_reader_.set_listener (
+ this->status_.in (),
+ PortStatusListener::get_mask (listener));
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Get_T::activate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate (void)
+{
+ DDS4CCM_TRACE ("DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate");
+ try
+ {
+ DDS_ReturnCode_t retcode = this->dds_get_.passivate ();
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Get_T::passivate - "
+ "Unable to passivate Getter: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retcode)));
+ throw CORBA::INTERNAL ();
+ }
+ retcode = this->dds_read_.passivate ();
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Get_T::passivate - "
+ "Unable to passivate Reader: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retcode)));
+ throw CORBA::INTERNAL ();
+ }
+ this->ccm_dds_reader_.set_listener (
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ this->status_ = ::DDS::DataReaderListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Get_T::passivate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::remove (
+ ::DDS::Subscriber_ptr subscriber)
+{
+ DDS4CCM_TRACE ("DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::remove");
+ try
+ {
+ DDS::ReturnCode_t const retval =
+ subscriber->delete_datareader (&this->ccm_dds_reader_);
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Get_T::remove - "
+ "Unable to delete DataReader: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retval)));
+ throw CORBA::INTERNAL ();
+ }
+ this->dds_get_.set_impl (0);
+ this->dds_read_.set_impl (0);
+ this->ccm_dds_reader_.set_impl (0);
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Get_T::remove: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::getter_type::_ptr_type
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::get_fresh_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::get_fresh_data");
+
+ return &this->dds_get_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data");
+
+ return &this->dds_read_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Get_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity");
+
+ return &this->ccm_dds_reader_;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.h
new file mode 100644
index 00000000000..19abbfeb397
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Get_T.h
@@ -0,0 +1,65 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_GET_T_H_
+#define DDS_GET_T_H_
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/Getter_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+class DDS_Get_T
+{
+public:
+ DDS_Get_T (void);
+ ~DDS_Get_T (void);
+
+ /**
+ * @name DDS_Get
+ * DDS_Get operations
+ */
+ //@{
+ typename CCM_TYPE::reader_type::_ptr_type get_data (void);
+
+ typename CCM_TYPE::getter_type::_ptr_type get_fresh_data (void);
+
+ ::DDS::CCM_DataReader_ptr get_dds_entity (void);
+ //@}
+
+ void configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name);
+
+ void activate (
+ ::CCM_DDS::PortStatusListener_ptr listener,
+ ACE_Reactor* reactor);
+
+ void passivate (void);
+
+ void remove (::DDS::Subscriber_ptr subscriber);
+
+private:
+ /**
+ * DDS_Get
+ */
+ //@{
+ ::DDS::DataReaderListener_var status_;
+ ::CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, FIXED> dds_get_;
+ ::CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED> dds_read_;
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i ccm_dds_reader_;
+ //@}
+
+ typedef ::CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE> PortStatusListener;
+};
+
+#include "dds4ccm/impl/dds/DDS_Get_T.cpp"
+
+#endif /* DDS_GET_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.cpp
new file mode 100644
index 00000000000..97cf9aa08da
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.cpp
@@ -0,0 +1,181 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/Writer_T.h"
+#include "dds4ccm/impl/dds/Getter_T.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/dds/Topic.h"
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::DDS_Listen_T (void) :
+ data_control_ (new CCM_DDS_DataListenerControl_T
+ < ::CCM_DDS::CCM_DataListenerControl> ()),
+ ccm_dds_reader_ (0)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::~DDS_Listen_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name)
+{
+ DDS4CCM_TRACE ("DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete");
+
+ try
+ {
+ if (!this->ccm_dds_reader_.get_impl ())
+ {
+ ::DDS::DataReader_var reader;
+ if (library_name && profile_name)
+ {
+ reader = subscriber->create_datareader_with_profile (
+ topic,
+ library_name,
+ profile_name,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::DataReaderQos drqos;
+ reader = subscriber->create_datareader (
+ topic,
+ drqos,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *rd =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *> (reader.in ());
+ this->ccm_dds_reader_.set_impl (rd->get_impl ());
+ this->dds_read_.set_impl (&this->ccm_dds_reader_);
+ this->dds_read_.set_contentfilteredtopic_data (library_name, profile_name);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Listen_T::configuration_complete: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::activate (
+ typename CCM_TYPE::listener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr status,
+ ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::activate");
+ try
+ {
+ if (::CORBA::is_nil (this->data_listener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->data_listener_,
+ DataReaderListener (
+ listener,
+ status,
+ this->data_control_.in (),
+ reactor),
+ CORBA::NO_MEMORY ());
+ }
+ this->ccm_dds_reader_.set_listener (
+ this->data_listener_.in (),
+ DataReaderListener::get_mask (listener));
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Listen_T::activate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate ()
+{
+ DDS4CCM_TRACE ("DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate");
+ try
+ {
+ this->ccm_dds_reader_.set_listener (
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ this->data_listener_= ::DDS::DataReaderListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Listen_T::passivate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::remove (
+ ::DDS::Subscriber_ptr subscriber)
+{
+ DDS4CCM_TRACE ("DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::remove");
+ try
+ {
+ DDS::ReturnCode_t retval =
+ subscriber->delete_datareader (&this->ccm_dds_reader_);
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Listen_T::remove - "
+ "Unable to delete DataReader: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retval)));
+ throw CORBA::INTERNAL ();
+ }
+ this->ccm_dds_reader_.set_impl (0);
+ this->dds_read_.set_impl (0);
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Listen_T::remove: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data");
+
+ return &this->dds_read_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity");
+
+ return &this->ccm_dds_reader_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::CCM_DDS::CCM_DataListenerControl_ptr
+DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data_control (void)
+{
+ DDS4CCM_TRACE ("DDS_Listen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data_control");
+
+ return ::CCM_DDS::CCM_DataListenerControl::_duplicate (this->data_control_.in ());
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.h
new file mode 100644
index 00000000000..9c8288a416b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Listen_T.h
@@ -0,0 +1,65 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_LISTEN_T_H_
+#define DDS_LISTEN_T_H_
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Reactor;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+class DDS_Listen_T
+{
+public:
+ DDS_Listen_T (void);
+ ~DDS_Listen_T (void);
+
+ /**
+ * @name DDS_Listen
+ * DDS_Listen operations
+ */
+ //@{
+ typename CCM_TYPE::reader_type::_ptr_type get_data (void);
+
+ ::CCM_DDS::CCM_DataListenerControl_ptr get_data_control (void);
+
+ ::DDS::CCM_DataReader_ptr get_dds_entity (void);
+ //@}
+
+ void configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name);
+
+ void activate (
+ typename CCM_TYPE::listener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr status,
+ ACE_Reactor* reactor);
+
+ void passivate (void);
+
+ void remove (
+ ::DDS::Subscriber_ptr subscriber);
+
+private:
+ /**
+ * DDS_Listen
+ */
+ //@{
+ ::CCM_DDS::CCM_DataListenerControl_var data_control_;
+ ::DDS::DataReaderListener_var data_listener_;
+ ::CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED> dds_read_;
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i ccm_dds_reader_;
+ //@}
+ typedef ::CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE> DataReaderListener;
+};
+
+#include "dds4ccm/impl/dds/DDS_Listen_T.cpp"
+
+#endif /* DDS_LISTEN_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.cpp
new file mode 100644
index 00000000000..f3a5d061913
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.cpp
@@ -0,0 +1,162 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/Writer_T.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::DDS_Read_T (void) :
+ ccm_dds_reader_ (0)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::~DDS_Read_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name)
+{
+ DDS4CCM_TRACE ("DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete");
+
+ try
+ {
+ if (!this->ccm_dds_reader_.get_impl ())
+ {
+ ::DDS::DataReader_var reader;
+ if (profile_name && library_name)
+ {
+ reader = subscriber->create_datareader_with_profile (
+ topic,
+ library_name,
+ profile_name,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::DataReaderQos drqos;
+ reader = subscriber->create_datareader (
+ topic,
+ drqos,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *rd =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *> (reader.in ());
+ this->ccm_dds_reader_.set_impl (rd->get_impl ());
+ this->dds_read_.set_impl (&this->ccm_dds_reader_);
+ this->dds_read_.set_contentfilteredtopic_data (library_name, profile_name);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Read_T::configuration_complete: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::activate (
+ ::CCM_DDS::PortStatusListener_ptr listener,
+ ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::activate");
+
+ try
+ {
+ if (::CORBA::is_nil (this->status_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->status_,
+ PortStatusListener (listener, reactor),
+ CORBA::NO_MEMORY ());
+ }
+ this->ccm_dds_reader_.set_listener (
+ this->status_.in (),
+ PortStatusListener::get_mask (listener));
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Read_T::activate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate ()
+{
+ DDS4CCM_TRACE ("DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate");
+
+ try
+ {
+ this->ccm_dds_reader_.set_listener (::DDS::DataReaderListener::_nil (), 0);
+ this->status_ = ::DDS::DataReaderListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Read_T::passivate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::remove (
+ ::DDS::Subscriber_ptr subscriber)
+{
+ DDS4CCM_TRACE ("DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::remove");
+
+ try
+ {
+ DDS::ReturnCode_t const retval =
+ subscriber->delete_datareader (&this->ccm_dds_reader_);
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Read_T::remove - "
+ "Unable to delete DataReader: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retval)));
+ throw CORBA::INTERNAL ();
+ }
+ this->ccm_dds_reader_.set_impl (0);
+ this->dds_read_.set_impl (0);
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Read_T::remove: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data");
+
+ return &this->dds_read_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Read_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity");
+
+ return &this->ccm_dds_reader_;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.h
new file mode 100644
index 00000000000..db987a36e3f
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Read_T.h
@@ -0,0 +1,59 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_READ_T_H_
+#define DDS_READ_T_H_
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+class DDS_Read_T
+{
+public:
+ DDS_Read_T (void);
+ ~DDS_Read_T (void);
+
+ /**
+ * @name DDS_Read
+ * DDS_Read operations
+ */
+ //@{
+ typename CCM_TYPE::reader_type::_ptr_type get_data (void);
+
+ ::DDS::CCM_DataReader_ptr get_dds_entity (void);
+ //@}
+
+ void configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name);
+
+ void activate (
+ ::CCM_DDS::PortStatusListener_ptr listener,
+ ACE_Reactor* reactor);
+
+ void passivate (void);
+
+ void remove (
+ ::DDS::Subscriber_ptr subscriber);
+
+private:
+ /**
+ * DDS_Read
+ */
+ //@{
+ ::DDS::DataReaderListener_var status_;
+ ::CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED> dds_read_;
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i ccm_dds_reader_;
+ //@}
+ typedef ::CIAO::DDS4CCM::PortStatusListener_T <DDS_TYPE, CCM_TYPE> PortStatusListener;
+};
+
+#include "dds4ccm/impl/dds/DDS_Read_T.cpp"
+
+#endif /* DDS_READ_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.cpp
new file mode 100644
index 00000000000..f6b1521b202
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.cpp
@@ -0,0 +1,177 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderStateListener_T.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/StateListenerControl_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::DDS_StateListen_T (void) :
+ data_control_ (new CCM_DDS_StateListenerControl_T
+ < ::CCM_DDS::CCM_StateListenerControl> ()),
+ ccm_dds_reader_ (0)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::~DDS_StateListen_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name)
+{
+ DDS4CCM_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete");
+
+ try
+ {
+ if (!this->ccm_dds_reader_.get_impl ())
+ {
+ ::DDS::DataReader_var reader;
+ if (library_name && profile_name)
+ {
+ reader = subscriber->create_datareader_with_profile (
+ topic,
+ library_name,
+ profile_name,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::DataReaderQos drqos;
+ reader = subscriber->create_datareader (
+ topic,
+ drqos,
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ }
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *rd =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataReader_i *> (reader.in ());
+ this->ccm_dds_reader_.set_impl (rd->get_impl ());
+ this->dds_read_.set_impl (&this->ccm_dds_reader_);
+ this->dds_read_.set_contentfilteredtopic_data (library_name, profile_name);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_StateListen_T::configuration_complete: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::activate (
+ typename CCM_TYPE::statelistener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr status,
+ ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::activate");
+
+ try
+ {
+ if (::CORBA::is_nil (this->data_listener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->data_listener_,
+ DataReaderStateListener (
+ listener,
+ status,
+ this->data_control_.in (),
+ reactor),
+ CORBA::NO_MEMORY ());
+ }
+ this->ccm_dds_reader_.set_listener (
+ this->data_listener_.in (),
+ DataReaderStateListener::get_mask (listener));
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_StateListen_T::activate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate (void)
+{
+ DDS4CCM_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate");
+ try
+ {
+ this->ccm_dds_reader_.set_listener (
+ ::DDS::DataReaderListener::_nil (),
+ 0);
+ this->data_listener_ = ::DDS::DataReaderListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_StateListen_T::passivate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::remove (
+ ::DDS::Subscriber_ptr subscriber)
+{
+ DDS4CCM_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::remove");
+ try
+ {
+ DDS::ReturnCode_t retval =
+ subscriber->delete_datareader (&this->ccm_dds_reader_);
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_StateListen_T::remove - "
+ "Unable to delete DataReader: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retval)));
+ throw CORBA::INTERNAL ();
+ }
+ this->ccm_dds_reader_.set_impl (0);
+ this->dds_read_.set_impl (0);
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_StateListen_T::remove: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data (void)
+{
+ DDS4CCM_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data");
+
+ return &this->dds_read_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_dds_entity");
+
+ return &this->ccm_dds_reader_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::CCM_DDS::CCM_StateListenerControl_ptr
+DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data_control (void)
+{
+ DDS4CCM_TRACE ("DDS_StateListen_T<DDS_TYPE, CCM_TYPE, FIXED>::get_data_control");
+
+ return ::CCM_DDS::CCM_StateListenerControl::_duplicate (
+ this->data_control_.in ());
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.h
new file mode 100644
index 00000000000..368b4c52ead
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_StateListen_T.h
@@ -0,0 +1,62 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_STATELISTEN_T_H_
+#define DDS_STATELISTEN_T_H_
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+class DDS_StateListen_T
+{
+public:
+ DDS_StateListen_T (void);
+ ~DDS_StateListen_T (void);
+
+ /**
+ * @name DDS_Listen
+ * DDS_Listen operations
+ */
+ //@{
+ typename CCM_TYPE::reader_type::_ptr_type get_data (void);
+
+ ::CCM_DDS::CCM_StateListenerControl_ptr get_data_control (void);
+
+ ::DDS::CCM_DataReader_ptr get_dds_entity (void);
+ //@}
+
+ void configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Subscriber_ptr subscriber,
+ const char* library_name,
+ const char* profile_name);
+
+ void activate (
+ typename CCM_TYPE::statelistener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr status,
+ ACE_Reactor* reactor);
+
+ void passivate (void);
+
+ void remove (
+ ::DDS::Subscriber_ptr subscriber);
+
+
+private:
+ /**
+ * DDS_Listen
+ */
+ //@{
+ ::CCM_DDS::CCM_StateListenerControl_var data_control_;
+ ::DDS::DataReaderListener_var data_listener_;
+ ::CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED> dds_read_;
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i ccm_dds_reader_;
+ //@}
+ typedef ::CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE> DataReaderStateListener;
+};
+
+#include "dds4ccm/impl/dds/DDS_StateListen_T.cpp"
+
+#endif /* DDS_STATELISTEN_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.cpp
new file mode 100644
index 00000000000..6961e2a438c
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.cpp
@@ -0,0 +1,352 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderStateListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/Updater_T.h"
+#include "dds4ccm/impl/dds/Reader_T.h"
+#include "dds4ccm/impl/dds/PublisherListener_T.h"
+#include "dds4ccm/impl/dds/SubscriberListener_T.h"
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+#include "dds4ccm/impl/dds/StateListenerControl_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::DDS_State_Connector_T (void) :
+ TopicBaseConnector (),
+ observable_obtained_ (false),
+ passive_observer_obtained_ (false),
+ pull_observer_obtained_ (false),
+ push_observer_obtained_ (false),
+ push_state_observer_obtained_ (false)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::~DDS_State_Connector_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::updater_type::_ptr_type
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_observable_data (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_observable_data");
+
+ this->observable_obtained_ = true;
+ return this->observable_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataWriter_ptr
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_observable_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_observable_dds_entity");
+
+ this->observable_obtained_ = true;
+ return this->observable_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_passive_observer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_passive_observer_data");
+
+ this->passive_observer_obtained_ = true;
+ return this->passive_observer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_passive_observer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_passive_observer_dds_entity");
+
+ this->passive_observer_obtained_ = true;
+ return this->passive_observer_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_observer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_observer_data");
+
+ this->pull_observer_obtained_ = true;
+ return this->pull_observer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::getter_type::_ptr_type
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_observer_fresh_data (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_observer_fresh_data");
+
+ this->pull_observer_obtained_ = true;
+ return this->pull_observer_.get_fresh_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_observer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_pull_observer_dds_entity");
+
+ return this->pull_observer_.get_dds_entity ();
+ this->pull_observer_obtained_ = true;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_observer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_observer_data");
+
+ this->push_observer_obtained_ = true;
+ return this->push_observer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::CCM_DDS::CCM_DataListenerControl_ptr
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_observer_data_control (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_observer_data_control");
+
+ this->push_observer_obtained_ = true;
+ return this->push_observer_.get_data_control ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_observer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_observer_dds_entity");
+
+ this->push_observer_obtained_ = true;
+ return this->push_observer_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename CCM_TYPE::reader_type::_ptr_type
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_state_observer_data (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_state_observer_data");
+
+ this->push_state_observer_obtained_ = true;
+ return this->push_state_observer_.get_data ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::CCM_DDS::CCM_StateListenerControl_ptr
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_state_observer_data_control (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_state_observer_data_control");
+
+ this->push_state_observer_obtained_ = true;
+ return this->push_state_observer_.get_data_control ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+::DDS::CCM_DataReader_ptr
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_state_observer_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::get_push_state_observer_dds_entity");
+
+ this->push_state_observer_obtained_ = true;
+ return this->push_state_observer_.get_dds_entity ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::configuration_complete");
+
+ TopicBaseConnector::configuration_complete ();
+
+ ::CCM_DDS::PortStatusListener_var push_observer_psl =
+ this->context_->get_connection_push_observer_status ();
+ typename CCM_TYPE::listener_type::_var_type push_observer_dl =
+ this->context_->get_connection_push_observer_data_listener ();
+ this->push_observer_obtained_ |= ! ::CORBA::is_nil (push_observer_psl.in ());
+ this->push_observer_obtained_ |= ! ::CORBA::is_nil (push_observer_dl.in ());
+
+ ::CCM_DDS::PortStatusListener_var push_state_observer_psl =
+ this->context_->get_connection_push_state_observer_status ();
+ typename CCM_TYPE::statelistener_type::_var_type push_state_observer_dl =
+ this->context_->get_connection_push_state_observer_data_listener ();
+ this->push_state_observer_obtained_ |= ! ::CORBA::is_nil (push_state_observer_psl.in ());
+ this->push_state_observer_obtained_ |= ! ::CORBA::is_nil (push_state_observer_dl.in ());
+
+ ::CCM_DDS::PortStatusListener_var pull_observer_psl =
+ this->context_->get_connection_pull_observer_status ();
+ this->pull_observer_obtained_ |= ! ::CORBA::is_nil (pull_observer_psl.in ());
+
+ ::CCM_DDS::PortStatusListener_var passive_observer_psl =
+ this->context_->get_connection_passive_observer_status ();
+ this->passive_observer_obtained_ |= ! ::CORBA::is_nil (passive_observer_psl.in ());
+
+ if (this->observable_obtained_)
+ {
+ this->observable_.configuration_complete (
+ this->topic_.in (),
+ this->publisher_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+
+ if (this->push_observer_obtained_)
+ {
+ this->push_observer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+
+ if (this->push_state_observer_obtained_)
+ {
+ this->push_state_observer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+
+ if (this->pull_observer_obtained_)
+ {
+ this->pull_observer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+
+ if (this->passive_observer_obtained_)
+ {
+ this->passive_observer_.configuration_complete (
+ this->topic_.in (),
+ this->subscriber_.in (),
+ this->library_name_,
+ this->profile_name_);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_activate (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_activate");
+
+ ACE_Reactor* reactor = 0;
+#if (CIAO_DDS4CCM_CONTEXT_SWITCH == 1)
+ reactor = this->context_->get_CCM_object()->_get_orb ()->orb_core ()->reactor ();
+#endif
+ TopicBaseConnector::ccm_activate (reactor);
+
+ if (this->observable_obtained_)
+ {
+ this->observable_.activate ();
+ }
+
+ if (this->push_observer_obtained_)
+ {
+ this->push_observer_.activate (
+ this->context_->get_connection_push_observer_data_listener (),
+ this->context_->get_connection_push_observer_status (),
+ reactor);
+ }
+
+ if (this->push_state_observer_obtained_)
+ {
+ this->push_state_observer_.activate (
+ this->context_->get_connection_push_state_observer_data_listener (),
+ this->context_->get_connection_push_state_observer_status (),
+ reactor);
+ }
+
+ if (this->pull_observer_obtained_)
+ {
+ this->pull_observer_.activate (
+ this->context_->get_connection_pull_observer_status (),
+ reactor);
+ }
+
+ if (this->passive_observer_obtained_)
+ {
+ this->passive_observer_.activate (
+ this->context_->get_connection_passive_observer_status (),
+ reactor);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_passivate (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_passivate");
+ if (this->observable_obtained_)
+ {
+ this->observable_.passivate ();
+ }
+
+ if (this->push_observer_obtained_)
+ {
+ this->push_observer_.passivate ();
+ }
+
+ if (this->push_state_observer_obtained_)
+ {
+ this->push_state_observer_.passivate ();
+ }
+
+ if (this->pull_observer_obtained_)
+ {
+ this->pull_observer_.passivate ();
+ }
+
+ if (this->passive_observer_obtained_)
+ {
+ this->passive_observer_.passivate ();
+ }
+
+ TopicBaseConnector::ccm_passivate ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_remove (void)
+{
+ DDS4CCM_TRACE ("DDS_State_Connector_T<DDS_TYPE, CCM_TYPE, FIXED>::ccm_remove");
+
+ if (this->observable_obtained_)
+ {
+ this->observable_.remove (this->publisher_.in ());
+ }
+
+ if (this->push_observer_obtained_)
+ {
+ this->push_observer_.remove (this->subscriber_.in ());
+ }
+
+ if (this->push_state_observer_obtained_)
+ {
+ this->push_state_observer_.remove (this->subscriber_.in ());
+ }
+
+ if (this->pull_observer_obtained_)
+ {
+ this->pull_observer_.remove (this->subscriber_.in ());
+ }
+
+ if (this->passive_observer_obtained_)
+ {
+ this->passive_observer_.remove (this->subscriber_.in ());
+ }
+ TopicBaseConnector::ccm_remove ();
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.h
new file mode 100644
index 00000000000..5b7c0baaf47
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_State_Connector_T.h
@@ -0,0 +1,118 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_STATE_CONNECTOR_T_H_
+#define DDS_STATE_CONNECTOR_T_H_
+
+#include "dds4ccm/impl/dds/DDS_TopicBase_Connector_T.h"
+#include "dds4ccm/impl/dds/DDS_Get_T.h"
+#include "dds4ccm/impl/dds/DDS_Listen_T.h"
+#include "dds4ccm/impl/dds/DDS_StateListen_T.h"
+#include "dds4ccm/impl/dds/DDS_Update_T.h"
+#include "dds4ccm/impl/dds/DDS_Read_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+class DDS_State_Connector_T
+ : public virtual DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>
+{
+public:
+ DDS_State_Connector_T (void);
+ virtual ~DDS_State_Connector_T (void);
+
+ virtual typename CCM_TYPE::updater_type::_ptr_type
+ get_observable_data (void);
+
+ virtual ::DDS::CCM_DataWriter_ptr
+ get_observable_dds_entity (void);
+
+ virtual typename CCM_TYPE::reader_type::_ptr_type
+ get_passive_observer_data (void);
+
+ virtual ::DDS::CCM_DataReader_ptr
+ get_passive_observer_dds_entity (void);
+
+ virtual typename CCM_TYPE::reader_type::_ptr_type
+ get_pull_observer_data (void);
+
+ virtual typename CCM_TYPE::getter_type::_ptr_type
+ get_pull_observer_fresh_data (void);
+
+ virtual ::DDS::CCM_DataReader_ptr
+ get_pull_observer_dds_entity (void);
+
+ virtual typename CCM_TYPE::reader_type::_ptr_type
+ get_push_observer_data (void);
+
+ virtual ::CCM_DDS::CCM_DataListenerControl_ptr
+ get_push_observer_data_control (void);
+
+ virtual ::DDS::CCM_DataReader_ptr
+ get_push_observer_dds_entity (void);
+
+ virtual typename CCM_TYPE::reader_type::_ptr_type
+ get_push_state_observer_data (void);
+
+ virtual ::CCM_DDS::CCM_StateListenerControl_ptr
+ get_push_state_observer_data_control (void);
+
+ virtual ::DDS::CCM_DataReader_ptr
+ get_push_state_observer_dds_entity (void);
+
+ virtual void configuration_complete (void);
+
+ virtual void ccm_activate (void);
+ virtual void ccm_passivate (void);
+ virtual void ccm_remove (void);
+
+private:
+ bool observable_obtained_;
+ bool passive_observer_obtained_;
+ bool pull_observer_obtained_;
+ bool push_observer_obtained_;
+ bool push_state_observer_obtained_;
+
+ /**
+ * DDS_Update observable
+ */
+ //@{
+ DDS_Update_T <DDS_TYPE, CCM_TYPE> observable_;
+ //@}
+
+ /**
+ * DDS_Read passive_observer
+ */
+ //@{
+ DDS_Read_T <DDS_TYPE, CCM_TYPE, FIXED> passive_observer_;
+ //@}
+
+ /**
+ * DDS_Get pull_observer
+ */
+ //@{
+ DDS_Get_T <DDS_TYPE, CCM_TYPE, FIXED> pull_observer_;
+ //@}
+
+ /**
+ * DDS_Listen push_observer
+ */
+ //@{
+ DDS_Listen_T <DDS_TYPE, CCM_TYPE, FIXED> push_observer_;
+ //@}
+
+ /**
+ * DDS_StateListen push_state_observer
+ */
+ //@{
+ DDS_StateListen_T <DDS_TYPE, CCM_TYPE, FIXED> push_state_observer_;
+ //@}
+
+typedef DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE> TopicBaseConnector;
+};
+
+#include "dds4ccm/impl/dds/DDS_State_Connector_T.cpp"
+
+#endif /* DDS_STATE_CONNECTOR_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.cpp
new file mode 100644
index 00000000000..619ce7cd49d
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.cpp
@@ -0,0 +1,473 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::DDS_TopicBase_Connector_T (void) :
+ BaseConnector ()
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::~DDS_TopicBase_Connector_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::configuration_complete");
+ BaseConnector::configuration_complete ();
+ this->init_default_topic ();
+ this->init_subscriber ();
+ this->init_publisher ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_activate (ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_activate");
+ BaseConnector::ccm_activate ();
+ this->activate_default_topic (reactor);
+ this->activate_subscriber (reactor);
+ this->activate_publisher (reactor);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_passivate");
+ this->passivate_default_topic ();
+ this->passivate_subscriber ();
+ this->passivate_publisher ();
+ BaseConnector::ccm_passivate ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::ccm_remove");
+ this->remove_default_topic ();
+ this->remove_subscriber ();
+ this->remove_publisher ();
+ BaseConnector::ccm_remove ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+char *
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::topic_name (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::topic_name");
+ return CORBA::string_dup (this->topic_name_.in ());
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::topic_name (
+ const char * topic_name)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::topic_name");
+ if (this->configuration_complete_)
+ {
+ throw ::CCM_DDS::NonChangeable ();
+ }
+ else
+ {
+ this->topic_name_ = topic_name;
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::key_fields (
+ const ::DDS::StringSeq & key_fields)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::key_fields");
+ if (this->configuration_complete_)
+ {
+ throw ::CCM_DDS::NonChangeable ();
+ }
+ else
+ {
+ this->key_fields_.length (key_fields.length ());
+ for (CORBA::ULong i = 0; i < key_fields.length (); ++i)
+ {
+ this->key_fields_.operator [](i) = CORBA::string_dup (key_fields[i]);
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StringSeq *
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::key_fields (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::key_fields");
+/*
+ For future use, DDS_TYPE doesn't have get_typecode yet
+ ::DDS_TypeCode* ptr = ::DDS_TYPE::type_support::get_typecode ();
+ DDS_ExceptionCode_t ex;
+ DDS_UnsignedLong const number = ptr->member_count (ex);
+ for (DDS_UnsignedLong i = 0; i < number; i++)
+ {
+ if (ptr->is_member_key (i, ex))
+ {
+ const char* name = ptr->member_name (i, ex);
+ printf ("Name: %s\n", name);
+ }
+ }
+ */
+ ::DDS::StringSeq_var retval = 0;
+ ACE_NEW_THROW_EX (retval,
+ ::DDS::StringSeq (this->key_fields_.length ()),
+ CORBA::NO_MEMORY ());
+ retval->length (this->key_fields_.length ());
+
+ for (CORBA::ULong i = 0; i < this->key_fields_.length (); ++i)
+ {
+ (*retval)[i] = CORBA::string_dup (this->key_fields_[i]);
+ }
+ return retval._retn ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::init_default_topic (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::init_default_topic");
+
+ if (::CORBA::is_nil (this->topic_.in ()))
+ {
+ try
+ {
+ CIAO::DDS4CCM::CCM_DDS_DomainParticipant_i *part =
+ dynamic_cast< CIAO::DDS4CCM::CCM_DDS_DomainParticipant_i * > (
+ this->domain_participant_.in ());
+ DDS_ReturnCode_t const retcode = DDS_TYPE::type_support::register_type(
+ part->get_impl (), DDS_TYPE::type_support::get_type_name ());
+
+ if (retcode == DDS_RETCODE_OK)
+ {
+ if (this->library_name_ && this->profile_name_)
+ {
+ this->topic_ =
+ this->domain_participant_->create_topic_with_profile (
+ this->topic_name_.in (),
+ DDS_TYPE::type_support::get_type_name (),
+ this->library_name_,
+ this->profile_name_,
+ ::DDS::TopicListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::TopicQos tqos;
+ this->topic_ =
+ this->domain_participant_->create_topic (
+ this->topic_name_.in (),
+ DDS_TYPE::type_support::get_type_name (),
+ tqos,
+ ::DDS::TopicListener::_nil (),
+ 0);
+ }
+ }
+ else
+ {
+ throw CCM_DDS::InternalError (retcode, 0);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::init_default_topic: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::init_subscriber (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::init_subscriber");
+
+ if (::CORBA::is_nil (this->subscriber_.in ()))
+ {
+ try
+ {
+ if (this->library_name_ && this->profile_name_)
+ {
+ this->subscriber_ = this->domain_participant_->
+ create_subscriber_with_profile (
+ this->library_name_,
+ this->profile_name_,
+ ::DDS::SubscriberListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::SubscriberQos sqos;
+ this->subscriber_ = this->domain_participant_->
+ create_subscriber (
+ sqos,
+ ::DDS::SubscriberListener::_nil (),
+ 0);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::init_subscriber: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::init_publisher (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::init_publisher");
+
+ if (::CORBA::is_nil (this->publisher_.in ()))
+ {
+ if (this->library_name_ && this->profile_name_)
+ {
+ this->publisher_ = this->domain_participant_->
+ create_publisher_with_profile (
+ this->library_name_,
+ this->profile_name_,
+ ::DDS::PublisherListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::PublisherQos pqos;
+ this->publisher_ = this->domain_participant_->
+ create_publisher (
+ pqos,
+ ::DDS::PublisherListener::_nil (),
+ 0);
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::activate_default_topic (ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::activate_default_topic");
+ try
+ {
+ if (::CORBA::is_nil (this->topiclistener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->topiclistener_,
+ TopicListener (
+ this->context_->get_connection_error_listener (),
+ reactor),
+ CORBA::NO_MEMORY ());
+ }
+ this->topic_->set_listener (
+ this->topiclistener_.in (),
+ TopicListener::get_mask (
+ this->context_->get_connection_error_listener ()));
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::activate_default_topic: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::activate_subscriber (ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::activate_subscriber");
+
+ try
+ {
+ if (::CORBA::is_nil (this->subscriber_listener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->subscriber_listener_,
+ SubscriberListener (
+ this->context_->get_connection_error_listener (),
+ reactor),
+ CORBA::NO_MEMORY ());
+ }
+ this->subscriber_->set_listener (
+ this->subscriber_listener_.in (),
+ SubscriberListener::get_mask (
+ this->context_->get_connection_error_listener ()));
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::activate_subscriber: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::activate_publisher (ACE_Reactor* reactor)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::activate_publisher");
+
+ try
+ {
+ if (::CORBA::is_nil (this->publisher_listener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->publisher_listener_,
+ PublisherListener (
+ this->context_->get_connection_error_listener (),
+ reactor),
+ CORBA::NO_MEMORY ());
+ }
+ this->publisher_->set_listener (
+ this->publisher_listener_.in (),
+ PublisherListener::get_mask (
+ this->context_->get_connection_error_listener ()));
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::activate_publisher: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::passivate_default_topic (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::passivate_default_topic");
+
+ try
+ {
+ this->topic_->set_listener (
+ ::DDS::TopicListener::_nil (),
+ 0);
+
+ this->topiclistener_ = ::DDS::TopicListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::passivate_default_topic: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::passivate_subscriber (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::passivate_subscriber");
+
+ try
+ {
+ this->subscriber_->set_listener (
+ ::DDS::SubscriberListener::_nil (),
+ 0);
+ this->subscriber_listener_ = ::DDS::SubscriberListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::passivate_subscriber: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::passivate_publisher (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::passivate_publisher");
+
+ try
+ {
+ this->publisher_->set_listener (
+ ::DDS::PublisherListener::_nil (),
+ 0);
+ this->publisher_listener_ = ::DDS::PublisherListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::passivate_default_topic: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::remove_default_topic (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::remove_default_topic");
+
+ try
+ {
+ DDS::ReturnCode_t retval =
+ this->domain_participant_->delete_topic (this->topic_.in ());
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_TopicBase_Connector_T::remove - "
+ "Unable to delete Topic: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retval)));
+ throw CORBA::INTERNAL ();
+ }
+ this->topic_ = ::DDS::Topic::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::remove_default_topic: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::remove_subscriber (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::remove_subscriber");
+
+ try
+ {
+ this->domain_participant_->delete_subscriber (this->subscriber_.in ());
+ this->subscriber_ = ::DDS::Subscriber::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::remove_subscriber: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_TopicBase_Connector_T<DDS_TYPE, CCM_TYPE>::remove_publisher (void)
+{
+ DDS4CCM_TRACE ("DDS_TopicBase_Connector_T::remove_publisher");
+
+ try
+ {
+ this->domain_participant_->delete_publisher (this->publisher_.in ());
+ this->publisher_ = ::DDS::Publisher::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, "DDS_TopicBase_Connector_T::remove_publisher: "
+ "Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.h
new file mode 100644
index 00000000000..19c91c8f034
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_TopicBase_Connector_T.h
@@ -0,0 +1,75 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_TOPIC_BASE_CONNECTOR_H
+#define DDS_TOPIC_BASE_CONNECTOR_H
+
+#include "ace/Copy_Disabled.h"
+#include "dds4ccm/impl/dds/DDS_Base_Connector_T.h"
+#include "dds4ccm/impl/dds/TopicListener_T.h"
+#include "dds4ccm/impl/dds/PublisherListener_T.h"
+#include "dds4ccm/impl/dds/SubscriberListener_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+class DDS_TopicBase_Connector_T
+ : public virtual DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE>
+{
+public:
+ DDS_TopicBase_Connector_T (void);
+ virtual ~DDS_TopicBase_Connector_T (void);
+
+ virtual char *topic_name (void);
+
+ virtual void topic_name (const char * topic_name);
+
+ virtual ::DDS::StringSeq *key_fields (void);
+
+ virtual void key_fields (const ::DDS::StringSeq & key_fields);
+
+ virtual void configuration_complete (void);
+ virtual void ccm_remove (void);
+ virtual void ccm_activate (ACE_Reactor* reactor);
+ virtual void ccm_passivate (void);
+
+protected:
+ void init_default_topic (void);
+ void init_publisher (void);
+ void init_subscriber (void);
+
+ void activate_default_topic (ACE_Reactor* reactor);
+ void activate_publisher (ACE_Reactor* reactor);
+ void activate_subscriber (ACE_Reactor* reactor);
+
+ void passivate_default_topic (void);
+ void passivate_publisher (void);
+ void passivate_subscriber (void);
+
+ void remove_default_topic (void);
+ void remove_publisher (void);
+ void remove_subscriber (void);
+
+ CORBA::String_var topic_name_;
+ DDS::StringSeq key_fields_;
+
+ ::DDS::Topic_var topic_;
+ ::DDS::TopicListener_var topiclistener_;
+
+ ::DDS::Publisher_var publisher_;
+ ::DDS::PublisherListener_var publisher_listener_;
+ ::DDS::Subscriber_var subscriber_;
+ ::DDS::SubscriberListener_var subscriber_listener_;
+
+typedef ::CIAO::DDS4CCM::TopicListener_T<DDS_TYPE, CCM_TYPE> TopicListener;
+typedef ::CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE> SubscriberListener;
+typedef ::CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE> PublisherListener;
+typedef DDS_Base_Connector_T<DDS_TYPE, CCM_TYPE> BaseConnector;
+
+};
+
+#include "dds4ccm/impl/dds/DDS_TopicBase_Connector_T.cpp"
+
+#endif /* DDS_TOPIC_BASE_CONNECTOR_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.cpp
new file mode 100644
index 00000000000..fae108a1faa
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.cpp
@@ -0,0 +1,151 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderStateListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/Updater_T.h"
+#include "dds4ccm/impl/dds/DataWriter.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::DDS_Update_T (void) :
+ ccm_dds_writer_ (0)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::~DDS_Update_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Publisher_ptr publisher,
+ const char* library_name,
+ const char* profile_name)
+{
+ DDS4CCM_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::configuration_complete");
+ if (!this->ccm_dds_writer_.get_impl ())
+ {
+ try
+ {
+ ::DDS::DataWriter_var dwv_tmp;
+ if (library_name && profile_name)
+ {
+ dwv_tmp = publisher->create_datawriter_with_profile (
+ topic,
+ library_name,
+ profile_name,
+ ::DDS::DataWriterListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::DataWriterQos dwqos;
+ dwv_tmp = publisher->create_datawriter (
+ topic,
+ dwqos,
+ ::DDS::DataWriterListener::_nil (),
+ 0);
+ }
+ ::CIAO::DDS4CCM::CCM_DDS_DataWriter_i *rw =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataWriter_i *> (dwv_tmp.in ());
+ this->ccm_dds_writer_.set_impl (rw->get_impl ());
+ this->dds_update_.set_impl (&this->ccm_dds_writer_);
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::configuration_complete: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::activate ()
+{
+ DDS4CCM_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::activate");
+ try
+ {
+ if (::CORBA::is_nil (this->data_listener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->data_listener_,
+ DataWriterListener (),
+ CORBA::NO_MEMORY ());
+ }
+ this->ccm_dds_writer_.set_listener (
+ this->data_listener_.in (),
+ DataWriterListener::get_mask ());
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::activate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::passivate ()
+{
+ DDS4CCM_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::passivate");
+ try
+ {
+ this->ccm_dds_writer_.set_listener (
+ ::DDS::DataWriterListener::_nil (),
+ 0);
+ this->data_listener_ = ::DDS::DataWriterListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::passivate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::remove (
+ ::DDS::Publisher_ptr publisher)
+{
+ DDS4CCM_TRACE ("DDS_Update_T<DDS_TYPE, CCM_TYPE>::remove");
+ try
+ {
+ DDS::ReturnCode_t retval =
+ publisher->delete_datawriter (&this->ccm_dds_writer_);
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Update_T::remove - "
+ "Unable to delete DataWriter: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retval)));
+ throw CORBA::INTERNAL ();
+ }
+ this->ccm_dds_writer_.set_impl (0);
+ this->dds_update_.set_impl (0);
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Update_T::remove: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+typename CCM_TYPE::updater_type::_ptr_type
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::get_data (void)
+{
+ return &this->dds_update_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::CCM_DataWriter_ptr
+DDS_Update_T<DDS_TYPE, CCM_TYPE>::get_dds_entity (void)
+{
+ return &this->ccm_dds_writer_;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.h
new file mode 100644
index 00000000000..11912ec8606
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Update_T.h
@@ -0,0 +1,51 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_UPDATE_T_H
+#define DDS_UPDATE_T_H
+
+#include "dds4ccm/impl/dds/Updater_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+class DDS_Update_T
+{
+public:
+ DDS_Update_T (void);
+ ~DDS_Update_T (void);
+
+ typename CCM_TYPE::updater_type::_ptr_type get_data (void);
+
+ ::DDS::CCM_DataWriter_ptr get_dds_entity (void);
+
+ void configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Publisher_ptr publisher,
+ const char* library_name,
+ const char* profile_name);
+
+ void activate (void);
+
+ void passivate (void);
+
+ void remove (
+ ::DDS::Publisher_ptr publisher);
+
+private:
+ /**
+ * DDS_Update
+ */
+ //@{
+ ::DDS::DataWriterListener_var data_listener_;
+ ::CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE> dds_update_;
+ ::CIAO::DDS4CCM::CCM_DDS_DataWriter_i ccm_dds_writer_;
+ //@}
+ typedef ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE> DataWriterListener;
+};
+
+#include "dds4ccm/impl/dds/DDS_Update_T.cpp"
+
+#endif /* DDS_UPDATE_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.cpp
new file mode 100644
index 00000000000..92e0178495a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.cpp
@@ -0,0 +1,156 @@
+// -*- C++ -*-
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReaderListener_T.h"
+#include "dds4ccm/impl/dds/DataWriterListener_T.h"
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::DDS_Write_T (void) :
+ ccm_dds_writer_ (0)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::~DDS_Write_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Publisher_ptr publisher,
+ const char* library_name,
+ const char* profile_name)
+{
+ DDS4CCM_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::configuration_complete");
+
+ try
+ {
+ if (!this->ccm_dds_writer_.get_impl ())
+ {
+ ::DDS::DataWriter_var dwv_tmp;
+ if (library_name && profile_name)
+ {
+ dwv_tmp = publisher->create_datawriter_with_profile (
+ topic,
+ library_name,
+ profile_name,
+ ::DDS::DataWriterListener::_nil (),
+ 0);
+ }
+ else
+ {
+ ::DDS::DataWriterQos dwqos;
+ dwv_tmp = publisher->create_datawriter (
+ topic,
+ dwqos,
+ ::DDS::DataWriterListener::_nil (),
+ 0);
+ }
+ ::CIAO::DDS4CCM::CCM_DDS_DataWriter_i *rw =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataWriter_i *> (dwv_tmp.in ());
+ this->ccm_dds_writer_.set_impl (rw->get_impl ());
+ this->writer_t_.set_impl (&this->ccm_dds_writer_);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::configuration_complete: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::activate ()
+{
+ DDS4CCM_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::activate");
+ try
+ {
+ if (::CORBA::is_nil (this->data_listener_.in ()))
+ {
+ ACE_NEW_THROW_EX (this->data_listener_,
+ DataWriterListener (),
+ CORBA::NO_MEMORY ());
+ }
+ this->ccm_dds_writer_.set_listener (
+ this->data_listener_.in (),
+ DataWriterListener::get_mask ());
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::activate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::passivate ()
+{
+ DDS4CCM_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::passivate");
+ try
+ {
+ this->ccm_dds_writer_.set_listener (
+ ::DDS::DataWriterListener::_nil (),
+ 0);
+ this->data_listener_ = ::DDS::DataWriterListener::_nil ();
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::passivate: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::remove (
+ ::DDS::Publisher_ptr publisher)
+{
+ DDS4CCM_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::remove");
+ try
+ {
+ DDS::ReturnCode_t const retval =
+ publisher->delete_datawriter (&this->ccm_dds_writer_);
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "DDS_Write_T::remove - "
+ "Unable to delete DataWriter: <%C>\n",
+ ::CIAO::DDS4CCM::translate_retcode (retval)));
+ throw CORBA::INTERNAL ();
+ }
+ this->ccm_dds_writer_.set_impl (0);
+ this->writer_t_.set_impl (0);
+ }
+ catch (...)
+ {
+ DDS4CCM_ERROR (1, (LM_EMERGENCY, "DDS_Write_T::remove: Caught unexpected exception.\n"));
+ throw CORBA::INTERNAL ();
+ }
+}
+
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+typename CCM_TYPE::writer_type::_ptr_type
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::get_data (void)
+{
+ DDS4CCM_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::get_data");
+
+ return &this->writer_t_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::CCM_DataWriter_ptr
+DDS_Write_T<DDS_TYPE, CCM_TYPE>::get_dds_entity (void)
+{
+ DDS4CCM_TRACE ("DDS_Write_T<DDS_TYPE, CCM_TYPE>::get_dds_entity");
+
+ return &this->ccm_dds_writer_;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.h
new file mode 100644
index 00000000000..fb503da1947
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DDS_Write_T.h
@@ -0,0 +1,59 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_WRITE_T_H_
+#define DDS_WRITE_T_H_
+
+#include "dds4ccm/impl/dds/DDS_TopicBase_Connector_T.h"
+#include "dds4ccm/impl/dds/Writer_T.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+class DDS_Write_T
+{
+public:
+ DDS_Write_T (void);
+ ~DDS_Write_T (void);
+
+ /**
+ * @name DDS_Write
+ * DDS_Write operations
+ */
+ //@{
+ typename CCM_TYPE::writer_type::_ptr_type get_data (void);
+
+ ::DDS::CCM_DataWriter_ptr get_dds_entity (void);
+ //@}
+
+ void configuration_complete (
+ ::DDS::Topic_ptr topic,
+ ::DDS::Publisher_ptr publisher,
+ const char* library_name,
+ const char* profile_name);
+
+ void activate (void);
+
+ void passivate (void);
+
+ void remove (
+ ::DDS::Publisher_ptr publisher);
+
+private:
+ /**
+ * DDS_Write
+ */
+ //@{
+ ::DDS::DataWriterListener_var data_listener_;
+ ::CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE> writer_t_;
+ ::CIAO::DDS4CCM::CCM_DDS_DataWriter_i ccm_dds_writer_;
+ //@}
+
+ typedef ::CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE> DataWriterListener;
+};
+
+#include "dds4ccm/impl/dds/DDS_Write_T.cpp"
+
+#endif /* DDS_WRITE_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.cpp
new file mode 100644
index 00000000000..627cec340b4
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.cpp
@@ -0,0 +1,50 @@
+// -*- C++ -*-
+// $Id$
+
+template <typename BASE_TYPE>
+CCM_DDS_DataListenerControl_T<BASE_TYPE>::CCM_DDS_DataListenerControl_T (void) :
+ mode_ (::CCM_DDS::NOT_ENABLED),
+ max_delivered_data_ (0)
+{
+ DDS4CCM_TRACE ("CCM_DDS_DataListenerControl_T::CCM_DDS_DataListenerControl_T");
+}
+
+template <typename BASE_TYPE>
+CCM_DDS_DataListenerControl_T<BASE_TYPE>::~CCM_DDS_DataListenerControl_T (void)
+{
+ DDS4CCM_TRACE ("CCM_DDS_DataListenerControl_T::~CCM_DDS_DataListenerControl_T");
+}
+
+template <typename BASE_TYPE>
+::CCM_DDS::ListenerMode
+CCM_DDS_DataListenerControl_T<BASE_TYPE>::mode (void)
+{
+ DDS4CCM_TRACE ("CCM_DDS_DataListenerControl_T::mode");
+ return this->mode_.value ();
+}
+
+template <typename BASE_TYPE>
+void
+CCM_DDS_DataListenerControl_T<BASE_TYPE>::mode (::CCM_DDS::ListenerMode mode)
+{
+ DDS4CCM_TRACE ("CCM_DDS_DataListenerControl_T::mode");
+ this->mode_ = mode;
+}
+
+template <typename BASE_TYPE>
+::CCM_DDS::DataNumber_t
+CCM_DDS_DataListenerControl_T<BASE_TYPE>::max_delivered_data (void)
+{
+ DDS4CCM_TRACE ("CCM_DDS_DataListenerControl_T::max_delivered_data");
+ return this->max_delivered_data_.value ();
+}
+
+template <typename BASE_TYPE>
+void
+CCM_DDS_DataListenerControl_T<BASE_TYPE>::max_delivered_data (
+ ::CCM_DDS::DataNumber_t max_delivered_data)
+{
+ DDS4CCM_TRACE ("CCM_DDS_DataListenerControl_T::max_delivered_data");
+ this->max_delivered_data_ = max_delivered_data;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.h
new file mode 100644
index 00000000000..50630e7221a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataListenerControl_T.h
@@ -0,0 +1,48 @@
+// -*- C++ -*-
+// $Id$
+
+#ifndef DDS4CCM_DATALISTENERCONTROLI_H_
+#define DDS4CCM_DATALISTENERCONTROLI_H_
+
+#include "dds4ccm/idl/dds4ccm_DataListenerControlEC.h"
+#include "tao/LocalObject.h"
+#include "ace/Copy_Disabled.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+template <typename BASE_TYPE>
+class CCM_DDS_DataListenerControl_T
+ : public virtual BASE_TYPE,
+ public virtual ::CORBA::LocalObject,
+ private ACE_Copy_Disabled
+{
+public:
+ /// Constructor
+ CCM_DDS_DataListenerControl_T (void);
+
+ /// Destructor
+ virtual ~CCM_DDS_DataListenerControl_T (void);
+
+ /// Set the mode
+ virtual ::CCM_DDS::ListenerMode mode (void);
+
+ /// Get the mode
+ virtual void mode (::CCM_DDS::ListenerMode mode);
+
+ /// Set the max_delivered_data
+ virtual ::CCM_DDS::DataNumber_t max_delivered_data (void);
+
+ /// Get the max_delivered_data
+ virtual void max_delivered_data (::CCM_DDS::DataNumber_t max_delivered_data);
+
+protected:
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::ListenerMode> mode_;
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CCM_DDS::DataNumber_t> max_delivered_data_;
+};
+
+#include "dds4ccm/impl/dds/DataListenerControl_T.cpp"
+
+#endif /* DDS4CCM_DATALISTENERCONTROLI_H_ */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.cpp
new file mode 100644
index 00000000000..32af7c110fa
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.cpp
@@ -0,0 +1,457 @@
+// $Id$
+
+#include "DataReader.h"
+#include "DataReaderListener.h"
+#include "StatusCondition.h"
+#include "ReadCondition.h"
+#include "QueryCondition.h"
+#include "Subscriber.h"
+#include "TopicDescription.h"
+#include "Topic.h"
+#include "ContentFilteredTopic.h"
+
+#include "ndds/SampleLostStatus.h"
+#include "ndds/SubscriptionMatchedStatus.h"
+#include "ndds/RequestedDeadlineMissedStatus.h"
+#include "ndds/SampleRejectedStatus.h"
+#include "ndds/LivelinessChangedStatus.h"
+#include "ndds/PublicationBuiltinTopicData.h"
+#include "ndds/RequestedIncompatibleQosStatus.h"
+#include "ndds/Duration_t.h"
+#include "ndds/InstanceHandle_t.h"
+#include "ndds/InstanceHandleSeq.h"
+#include "ndds/DataReaderQos.h"
+#include "ndds/StringSeq.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_DataReader_i::CCM_DDS_DataReader_i (DDSDataReader * dr)
+ : impl_ (dr)
+ {
+ }
+
+ CCM_DDS_DataReader_i::~CCM_DDS_DataReader_i (void)
+ {
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::enable (void)
+ {
+ return this->impl ()->enable ();
+ }
+
+ ::DDS::StatusCondition_ptr
+ CCM_DDS_DataReader_i::get_statuscondition (void)
+ {
+ ::DDS::StatusCondition_var retval = ::DDS::StatusCondition::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSStatusCondition* sc = this->impl ()->get_statuscondition ();
+ if (sc)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::StatusCondition_var sc = this->impl ()->get_statuscondition ();
+ if (! ::CORBA::is_nil (sc.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::StatusMask
+ CCM_DDS_DataReader_i::get_status_changes (void)
+ {
+ return this->impl ()->get_status_changes ();
+ }
+
+ DDS_INSTANCE_HANDLE_T_RETN
+ CCM_DDS_DataReader_i::get_instance_handle (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t const rtihandle = this->impl ()->get_instance_handle ();
+ ::DDS::InstanceHandle_t handle;
+ handle <<= rtihandle;
+ return handle;
+#else
+ return this->impl ()->get_instance_handle ();
+#endif
+ }
+
+ ::DDS::ReadCondition_ptr
+ CCM_DDS_DataReader_i::create_readcondition (
+ ::DDS::SampleStateMask sample_states,
+ ::DDS::ViewStateMask view_states,
+ ::DDS::InstanceStateMask instance_states)
+ {
+ ::DDS::ReadCondition_var retval = ::DDS::ReadCondition::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSReadCondition* rc = this->impl ()->create_readcondition (sample_states, view_states, instance_states);
+ if (rc)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_ReadCondition_i (rc),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::ReadCondition_var rc = this->impl ()->create_readcondition (sample_states, view_states, instance_states);
+ if (! ::CORBA::is_nil (rc.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::QueryCondition_ptr
+ CCM_DDS_DataReader_i::create_querycondition (
+ ::DDS::SampleStateMask sample_states,
+ ::DDS::ViewStateMask view_states,
+ ::DDS::InstanceStateMask instance_states,
+ const char * query_expression,
+ const ::DDS::StringSeq & query_parameters)
+ {
+ ::DDS::QueryCondition_var retval = ::DDS::QueryCondition::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_StringSeq parameters;
+ parameters <<= query_parameters;
+ DDSQueryCondition* qc = this->impl ()->create_querycondition (
+ sample_states,
+ view_states,
+ instance_states,
+ query_expression,
+ parameters);
+
+ if (qc)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_QueryCondition_i (qc),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::QueryCondition_var qc = this->impl ()->create_querycondition (
+ sample_states,
+ view_states,
+ instance_states,
+ query_expression,
+ query_parameters);
+
+ if (! ::CORBA::is_nil (qc.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_QueryCondition_i (qc.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::delete_readcondition (
+ ::DDS::ReadCondition_ptr a_condition)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_ReadCondition_i *rc = dynamic_cast< CCM_DDS_ReadCondition_i *> (a_condition);
+ if (!rc)
+ {
+ return ::DDS::RETCODE_BAD_PARAMETER;
+ }
+ return this->impl ()->delete_readcondition (rc->get_impl ());
+#else
+ return this->impl ()->delete_readcondition (a_condition);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::delete_contained_entities (void)
+ {
+ return this->impl ()->delete_contained_entities ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::set_qos (
+ const ::DDS::DataReaderQos &qos)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataReaderQos ddsqos;
+ ddsqos <<= qos;
+ return this->impl ()->set_qos (ddsqos);
+#else
+ return this->impl ()->set_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_qos (
+ ::DDS::DataReaderQos &qos)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataReaderQos ddsqos;
+ ::DDS_ReturnCode_t const retval = this->impl ()->get_qos (ddsqos);
+ qos <<= ddsqos;
+ return retval;
+#else
+ return this->impl ()->get_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::set_listener (
+ ::DDS::DataReaderListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReader_i::set_listener");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_DataReaderListener_i *ccm_dds_drl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_drl,
+ CCM_DDS_DataReaderListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ return this->impl ()->set_listener (ccm_dds_drl, mask);
+#else
+ return this->impl ()->set_listener (a_listener, mask);
+#endif
+ }
+
+ ::DDS::DataReaderListener_ptr
+ CCM_DDS_DataReader_i::get_listener (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReader_i::get_listener");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDataReaderListener *drl = this->impl ()->get_listener ();
+ CCM_DDS_DataReaderListener_i *ccm_dds_drl = dynamic_cast <CCM_DDS_DataReaderListener_i *> (drl);
+ if (!ccm_dds_drl)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, "CCM_DDS_DataReader_i::get_listener - "
+ "DDS returned a NIL listener.\n"));
+ return ::DDS::DataReaderListener::_nil ();
+ }
+ return ccm_dds_drl->get_datareaderlistener ();
+#else
+ return this->impl ()->get_listener ();
+#endif
+ }
+
+ ::DDS::TopicDescription_ptr
+ CCM_DDS_DataReader_i::get_topicdescription (void)
+ {
+ ::DDS::TopicDescription_var dds_td = ::DDS::TopicDescription::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDSTopicDescription* td = this->impl ()->get_topicdescription ();
+ ::DDSTopic * tp = ::DDSTopic::narrow (td);
+ if (tp)
+ {
+ ACE_NEW_THROW_EX (dds_td,
+ CCM_DDS_Topic_i (tp),
+ CORBA::NO_MEMORY ());
+ }
+ else
+ {
+ ::DDSContentFilteredTopic * cft =
+ DDSContentFilteredTopic::narrow (td);
+ if (cft)
+ {
+ ACE_NEW_THROW_EX (dds_td,
+ CCM_DDS_ContentFilteredTopic_i (cft),
+ CORBA::NO_MEMORY ());
+ }
+ }
+#else
+ ::DDS::TopicDescription_var td = this->impl ()->get_topicdescription ();
+ ACE_NEW_THROW_EX (dds_td,
+ CCM_DDS_TopicDescription_i (td.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return dds_td._retn ();
+ }
+
+ ::DDS::Subscriber_ptr
+ CCM_DDS_DataReader_i::get_subscriber (void)
+ {
+ ::DDS::Subscriber_var dds_td = ::DDS::Subscriber::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDSSubscriber* subscriber = this->impl ()->get_subscriber ();
+ ACE_NEW_THROW_EX (dds_td,
+ CCM_DDS_Subscriber_i (subscriber),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDSSubscriber_var subscriber = this->impl ()->get_subscriber ();
+ ACE_NEW_THROW_EX (dds_td,
+ CCM_DDS_Subscriber_i (subscriber.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return dds_td._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_sample_rejected_status (
+ ::DDS::SampleRejectedStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_SampleRejectedStatus ddsstatus;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_sample_rejected_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_sample_rejected_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_liveliness_changed_status (
+ ::DDS::LivelinessChangedStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_LivelinessChangedStatus ddsstatus;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_liveliness_changed_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_liveliness_changed_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_requested_deadline_missed_status (
+ ::DDS::RequestedDeadlineMissedStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_RequestedDeadlineMissedStatus ddsstatus;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_requested_deadline_missed_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_requested_deadline_missed_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_requested_incompatible_qos_status (
+ ::DDS::RequestedIncompatibleQosStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_RequestedIncompatibleQosStatus ddsstatus;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_requested_incompatible_qos_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_requested_incompatible_qos_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_subscription_matched_status (
+ ::DDS::SubscriptionMatchedStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_SubscriptionMatchedStatus ddsstatus;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_subscription_matched_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_subscription_matched_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_sample_lost_status (
+ ::DDS::SampleLostStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_SampleLostStatus ddsstatus;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_sample_lost_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_sample_lost_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::wait_for_historical_data (
+ const ::DDS::Duration_t & max_wait)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_Duration_t rtiduration;
+ rtiduration <<= max_wait;
+ return this->impl ()->wait_for_historical_data (rtiduration);
+#else
+ return this->impl ()->wait_for_historical_data (max_wait);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_matched_publications (
+ ::DDS::InstanceHandleSeq & publication_handles)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReader_i::get_matched_publications");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandleSeq rtiseq;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_matched_publications (rtiseq);
+ publication_handles <<= rtiseq;
+ return retval;
+#else
+ return this->impl ()->get_matched_publications (publication_handles);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataReader_i::get_matched_publication_data (
+ ::DDS::PublicationBuiltinTopicData & publication_data,
+ DDS_INSTANCE_HANDLE_T_IN publication_handle)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_PublicationBuiltinTopicData ccm_dds_pub_data;
+ ::DDS_InstanceHandle_t ccm_dds_pub_handle;
+
+ ccm_dds_pub_data <<= publication_data;
+ ccm_dds_pub_handle <<= publication_handle;
+ ::DDS::ReturnCode_t const retcode = this->impl()->
+ get_matched_publication_data (ccm_dds_pub_data,
+ ccm_dds_pub_handle);
+ publication_data <<= ccm_dds_pub_data;
+ return retcode;
+#else
+ return this->impl ()->get_matched_publication_data (publication_data, publication_handle);
+#endif
+ }
+
+ DDSDataReader *
+ CCM_DDS_DataReader_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_DataReader_i::set_impl (DDSDataReader * dr)
+ {
+ this->impl_ = dr;
+ }
+
+ DDSDataReader *
+ CCM_DDS_DataReader_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.h
new file mode 100644
index 00000000000..88805eb70e2
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReader.h
@@ -0,0 +1,134 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAREADER_H
+#define DDS4CCM_DATAREADER_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+#include "dds4ccm/impl/dds/ndds/InstanceHandle_t.h"
+#include "tao/LocalObject.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DataReader DDSDataReader;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_DataReader_i
+ : public virtual ::DDS::CCM_DataReader,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_DataReader_i (DDSDataReader *dr);
+
+ /// Destructor
+ virtual ~CCM_DDS_DataReader_i (void);
+
+ virtual ::DDS::ReturnCode_t enable (void);
+
+ virtual ::DDS::StatusCondition_ptr get_statuscondition (void);
+
+ virtual ::DDS::StatusMask get_status_changes (void);
+
+ virtual DDS_INSTANCE_HANDLE_T_RETN get_instance_handle (void);
+
+ virtual ::DDS::ReadCondition_ptr
+ create_readcondition (
+ ::DDS::SampleStateMask sample_states,
+ ::DDS::ViewStateMask view_states,
+ ::DDS::InstanceStateMask instance_states);
+
+ virtual ::DDS::QueryCondition_ptr
+ create_querycondition (
+ ::DDS::SampleStateMask sample_states,
+ ::DDS::ViewStateMask view_states,
+ ::DDS::InstanceStateMask instance_states,
+ const char * query_expression,
+ const ::DDS::StringSeq & query_parameters);
+
+ virtual ::DDS::ReturnCode_t
+ delete_readcondition (
+ ::DDS::ReadCondition_ptr a_condition);
+
+ virtual ::DDS::ReturnCode_t delete_contained_entities (void);
+
+ virtual ::DDS::ReturnCode_t set_qos (const ::DDS::DataReaderQos & qos);
+
+ virtual ::DDS::ReturnCode_t get_qos (::DDS::DataReaderQos & qos);
+
+ virtual ::DDS::ReturnCode_t
+ set_listener (
+ ::DDS::DataReaderListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual ::DDS::DataReaderListener_ptr get_listener (void);
+
+ virtual ::DDS::TopicDescription_ptr get_topicdescription (void);
+
+ virtual ::DDS::Subscriber_ptr get_subscriber (void);
+
+ virtual ::DDS::ReturnCode_t
+ get_sample_rejected_status (::DDS::SampleRejectedStatus & status);
+
+ virtual ::DDS::ReturnCode_t
+ get_liveliness_changed_status (
+ ::DDS::LivelinessChangedStatus & status);
+
+ virtual ::DDS::ReturnCode_t
+ get_requested_deadline_missed_status (
+ ::DDS::RequestedDeadlineMissedStatus & status);
+
+ virtual ::DDS::ReturnCode_t
+ get_requested_incompatible_qos_status (
+ ::DDS::RequestedIncompatibleQosStatus & status);
+
+ virtual ::DDS::ReturnCode_t
+ get_subscription_matched_status (
+ ::DDS::SubscriptionMatchedStatus & status);
+
+ virtual ::DDS::ReturnCode_t
+ get_sample_lost_status (::DDS::SampleLostStatus & status);
+
+ virtual ::DDS::ReturnCode_t
+ wait_for_historical_data (const ::DDS::Duration_t & max_wait);
+
+ virtual ::DDS::ReturnCode_t
+ get_matched_publications (
+ ::DDS::InstanceHandleSeq & publication_handles);
+
+ virtual ::DDS::ReturnCode_t
+ get_matched_publication_data (
+ ::DDS::PublicationBuiltinTopicData & publication_data,
+ DDS_INSTANCE_HANDLE_T_IN publication_handle);
+
+ DDSDataReader * get_impl (void);
+
+ void set_impl (DDSDataReader * dr);
+
+ private:
+ DDSDataReader * impl_;
+
+ DDSDataReader * impl (void);
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.cpp
new file mode 100644
index 00000000000..c7f51f3a2d6
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.cpp
@@ -0,0 +1,67 @@
+// $Id$
+
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderHandler_T<DDS_TYPE, CCM_TYPE>::DataReaderHandler_T (
+ typename CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>* drl,
+ ::DDS::DataReader_ptr dr)
+ : drl_ (drl),
+ dr_ (::DDS::DataReader::_duplicate (dr))
+{
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderHandler_T<DDS_TYPE, CCM_TYPE>::~DataReaderHandler_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+int
+CIAO::DDS4CCM::DataReaderHandler_T<DDS_TYPE, CCM_TYPE>::handle_exception (ACE_HANDLE)
+{
+ try
+ {
+ this->drl_->on_data_available_i (this->dr_.in ());
+ }
+ catch (...)
+ {
+ }
+ return 0;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderStateHandler_T<DDS_TYPE, CCM_TYPE>::DataReaderStateHandler_T (
+ typename CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>* drl,
+ ::DDS::DataReader_ptr dr)
+ : drl_ (drl),
+ dr_ (::DDS::DataReader::_duplicate (dr))
+{
+ this->reference_counting_policy ().value
+ (ACE_Event_Handler::Reference_Counting_Policy::ENABLED);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderStateHandler_T<DDS_TYPE, CCM_TYPE>::~DataReaderStateHandler_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+int
+CIAO::DDS4CCM::DataReaderStateHandler_T<DDS_TYPE, CCM_TYPE>::handle_exception (ACE_HANDLE)
+{
+ try
+ {
+ this->drl_->on_data_available_i (this->dr_.in ());
+ }
+ catch (...)
+ {
+ }
+ return 0;
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.h
new file mode 100644
index 00000000000..44d96bc24c2
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderHandler_T.h
@@ -0,0 +1,63 @@
+// $Id$
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Eventhandler on orb thread, handling the
+ * received data from DDS.
+ */
+
+#ifndef DDS4CCM_DATAREADERHANDLER_T_H
+#define DDS4CCM_DATAREADERHANDLER_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Event_Handler.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataReaderListener_T;
+
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataReaderHandler_T :
+ public ACE_Event_Handler
+ {
+ public:
+ DataReaderHandler_T (
+ typename CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>* drl,
+ ::DDS::DataReader_ptr dr);
+ virtual ~DataReaderHandler_T ();
+
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ typename CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>* drl_;
+ ::DDS::DataReader_var dr_;
+ };
+
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataReaderStateListener_T;
+
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataReaderStateHandler_T :
+ public ACE_Event_Handler
+ {
+ public:
+ DataReaderStateHandler_T (
+ typename CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>* drl,
+ ::DDS::DataReader_ptr dr);
+ virtual ~DataReaderStateHandler_T ();
+
+ virtual int handle_exception (ACE_HANDLE fc = ACE_INVALID_HANDLE);
+ private:
+ typename CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>* drl_;
+ ::DDS::DataReader_var dr_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/DataReaderHandler_T.cpp"
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.cpp
new file mode 100644
index 00000000000..2b6983ec63b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.cpp
@@ -0,0 +1,159 @@
+// $Id$
+
+#include "DataReaderListener.h"
+#include "DataReader.h"
+
+#include "ndds/SampleLostStatus.h"
+#include "ndds/SubscriptionMatchedStatus.h"
+#include "ndds/RequestedDeadlineMissedStatus.h"
+#include "ndds/SampleRejectedStatus.h"
+#include "ndds/LivelinessChangedStatus.h"
+#include "ndds/RequestedIncompatibleQosStatus.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_DataReaderListener_i::CCM_DDS_DataReaderListener_i (::DDS::DataReaderListener_ptr p)
+ : impl_ (::DDS::DataReaderListener::_duplicate (p))
+ {
+ }
+
+ CCM_DDS_DataReaderListener_i::~CCM_DDS_DataReaderListener_i (void)
+ {
+ }
+
+ void
+ CCM_DDS_DataReaderListener_i::on_requested_deadline_missed (
+ ::DDSDataReader* the_reader,
+ const ::DDS_RequestedDeadlineMissedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReaderListener_i::on_requested_deadline_missed");
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::RequestedDeadlineMissedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_requested_deadline_missed (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_requested_deadline_missed (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataReaderListener_i::on_requested_incompatible_qos (
+ ::DDSDataReader* the_reader,
+ const ::DDS_RequestedIncompatibleQosStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReaderListener_i::on_requested_incompatible_qos");
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::RequestedIncompatibleQosStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_requested_incompatible_qos (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_requested_incompatible_qos (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataReaderListener_i::on_sample_rejected (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SampleRejectedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReaderListener_i::on_sample_rejected");
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::SampleRejectedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_sample_rejected (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_sample_rejected (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataReaderListener_i::on_liveliness_changed (
+ ::DDSDataReader* the_reader,
+ const ::DDS_LivelinessChangedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReaderListener_i::on_liveliness_changed");
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::LivelinessChangedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_liveliness_changed (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_liveliness_changed (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataReaderListener_i::on_data_available(::DDSDataReader *the_reader)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReaderListener_i::on_data_available");
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ this->impl_->on_data_available (dds_reader.in ());
+#else
+ this->impl_->on_data_available (dds_reader.in ());
+#endif
+ }
+
+ void
+ CCM_DDS_DataReaderListener_i::on_subscription_matched (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SubscriptionMatchedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReaderListener_i::on_subscription_matched");
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::SubscriptionMatchedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_subscription_matched (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_subscription_matched (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataReaderListener_i::on_sample_lost (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SampleLostStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataReaderListener_i::on_sample_lost");
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::SampleLostStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_sample_lost (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_sample_lost (dds_reader.in (), status);
+#endif
+ }
+
+ ::DDS::DataReaderListener_ptr
+ CCM_DDS_DataReaderListener_i::get_datareaderlistener (void)
+ {
+ return ::DDS::DataReaderListener::_duplicate (this->impl_.in ());
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.h
new file mode 100644
index 00000000000..4a63e5a3571
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener.h
@@ -0,0 +1,74 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAREADERLISTENER_H
+#define DDS4CCM_DATAREADERLISTENER_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DataReaderListener DDSDataReaderListener;
+typedef ::DDS::DataReader DDSDataReader;
+typedef ::DDS::RequestedDeadlineMissedStatus DDS_RequestedDeadlineMissedStatus;
+typedef ::DDS::LivelinessChangedStatus DDS_LivelinessChangedStatus;
+typedef ::DDS::RequestedIncompatibleQosStatus DDS_RequestedIncompatibleQosStatus;
+typedef ::DDS::SampleRejectedStatus DDS_SampleRejectedStatus;
+typedef ::DDS::SubscriptionMatchedStatus DDS_SubscriptionMatchedStatus;
+typedef ::DDS::SampleLostStatus DDS_SampleLostStatus;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_DataReaderListener_i :
+ public virtual ::DDSDataReaderListener
+ {
+ public:
+ /// Constructor
+ CCM_DDS_DataReaderListener_i (::DDS::DataReaderListener_ptr p);
+
+ /// Destructor
+ virtual ~CCM_DDS_DataReaderListener_i (void);
+
+ virtual void on_requested_deadline_missed(::DDSDataReader* reader,
+ const ::DDS_RequestedDeadlineMissedStatus& status);
+
+ virtual void on_liveliness_changed(::DDSDataReader* reader,
+ const ::DDS_LivelinessChangedStatus& status);
+
+ virtual void on_requested_incompatible_qos(::DDSDataReader* reader,
+ const ::DDS_RequestedIncompatibleQosStatus& status);
+
+ virtual void on_sample_rejected(::DDSDataReader* reader,
+ const ::DDS_SampleRejectedStatus& status);
+
+ virtual void on_data_available(::DDSDataReader* reader);
+
+ virtual void on_sample_lost(::DDSDataReader* reader,
+ const ::DDS_SampleLostStatus& status);
+
+ virtual void on_subscription_matched(::DDSDataReader* reader,
+ const ::DDS_SubscriptionMatchedStatus& status);
+
+ ::DDS::DataReaderListener_ptr get_datareaderlistener (void);
+ private:
+ ::DDS::DataReaderListener_var impl_;
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.cpp
new file mode 100644
index 00000000000..e05f3dacaac
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.cpp
@@ -0,0 +1,179 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "ace/Reactor.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::DataReaderListener_T (
+ typename CCM_TYPE::listener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ::CCM_DDS::DataListenerControl_ptr control,
+ ACE_Reactor* reactor)
+ : PortStatusListener_T <DDS_TYPE, CCM_TYPE> (port_status_listener, reactor) ,
+ listener_ (CCM_TYPE::listener_type::_duplicate (listener)),
+ control_ (::CCM_DDS::DataListenerControl::_duplicate (control))
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderListener_T::DataReaderListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::~DataReaderListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderListener_T::~DataReaderListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::on_data_available(::DDS::DataReader_ptr rdr)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderListener_T::on_data_available");
+
+ if (! ::CORBA::is_nil (this->control_.in ()) && this->control_->mode () != ::CCM_DDS::NOT_ENABLED)
+ {
+ if (this->reactor_)
+ {
+ drh* rh = 0;
+ ACE_NEW (rh, drh (this, rdr));
+
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("DataReaderListener_T::failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->on_data_available_i (rdr);
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::on_data_available_i (::DDS::DataReader_ptr rdr)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderListener_T::on_data_available_i");
+
+ if (::CORBA::is_nil (this->control_.in ()) || this->control_->mode () == ::CCM_DDS::NOT_ENABLED)
+ {
+ return;
+ }
+
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i* rd =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataReader_i*>(rdr);
+ if (!rd)
+ {
+ /* In this specific case, this will never fail */
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("DataReaderListener_T::dynamic_cast failed.\n")));
+ return;
+ }
+
+ typename DDS_TYPE::data_reader * reader =
+ dynamic_cast< typename DDS_TYPE::data_reader * > ((rd->get_impl ()));
+
+ if (!reader)
+ {
+ /* In this specific case, this will never fail */
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("DataReaderListener_T::narrow failed.\n")));
+ return;
+ }
+
+ typename DDS_TYPE::dds_seq_type data;
+ DDS_SampleInfoSeq sample_info;
+ ::DDS::ReturnCode_t const result = reader->take (
+ data,
+ sample_info,
+ DDS_LENGTH_UNLIMITED,
+ DDS_NOT_READ_SAMPLE_STATE,
+ DDS_NEW_VIEW_STATE | DDS_NOT_NEW_VIEW_STATE,
+ DDS_ANY_INSTANCE_STATE);
+ if (result == DDS_RETCODE_NO_DATA)
+ {
+ return;
+ }
+ else if (result != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("Unable to take data from data reader, error %C.\n"), translate_retcode (result)));
+ return;
+ }
+
+ if (this->control_->mode () == ::CCM_DDS::ONE_BY_ONE)
+ {
+ for (::DDS_Long i = 0; i < data.length (); ++i)
+ {
+ if (sample_info[i].valid_data)
+ {
+ ::CCM_DDS::ReadInfo info;
+ info <<= sample_info[i];
+ this->listener_->on_one_data (data[i], info);
+ }
+ }
+ }
+ else
+ {
+ CORBA::ULong nr_of_samples = 0;
+ for (::DDS_Long i = 0 ; i < sample_info.length(); i++)
+ {
+ if (sample_info[i].valid_data)
+ {
+ ++nr_of_samples;
+ }
+ }
+
+ if (nr_of_samples > 0)
+ {
+ typename CCM_TYPE::seq_type * inst_seq = 0;
+ ACE_NEW (inst_seq,
+ typename CCM_TYPE::seq_type (nr_of_samples));
+
+ ::CCM_DDS::ReadInfoSeq * infoseq = 0;
+ ACE_NEW (infoseq,
+ ::CCM_DDS::ReadInfoSeq (nr_of_samples));
+
+ infoseq->length (nr_of_samples);
+ inst_seq->length (nr_of_samples);
+
+ // Copy the valid samples
+ CORBA::ULong ix = 0;
+ for (::DDS_Long i = 0 ; i < sample_info.length(); i++)
+ {
+ if(sample_info[i].valid_data)
+ {
+ (*infoseq)[ix] <<= sample_info[i];
+ (*inst_seq)[ix] = data[i];
+ ++ix;
+ }
+ }
+ this->listener_->on_many_data (*inst_seq, *infoseq);
+ }
+ }
+
+ // Return the loan
+ DDS_ReturnCode_t const retval = reader->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DataReaderListener_T::on_data_available_i - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::DataReaderListener_T<DDS_TYPE, CCM_TYPE>::get_mask (
+ typename CCM_TYPE::listener_type::_ptr_type listener)
+{
+ if (! ::CORBA::is_nil (listener) || CIAO_debug_level >= 10)
+ {
+ return ::DDS::DATA_AVAILABLE_STATUS |
+ ::DDS::REQUESTED_DEADLINE_MISSED_STATUS |
+ ::DDS::SAMPLE_LOST_STATUS;
+ }
+ else
+ {
+ return 0;
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.h
new file mode 100644
index 00000000000..07f63e29529
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderListener_T.h
@@ -0,0 +1,58 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAREADERLISTENER_T_H
+#define DDS4CCM_DATAREADERLISTENER_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+
+#include "dds4ccm/impl/dds/PortStatusListener_T.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Reactor;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataReaderListener_T :
+ public PortStatusListener_T <DDS_TYPE, CCM_TYPE>
+ {
+ public:
+ /// Constructor
+ DataReaderListener_T (
+ typename CCM_TYPE::listener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ::CCM_DDS::DataListenerControl_ptr control,
+ ACE_Reactor* reactor);
+
+ /// Destructor
+ virtual ~DataReaderListener_T (void);
+
+ virtual void on_data_available( ::DDS::DataReader *rdr);
+
+ static ::DDS::StatusMask get_mask (
+ typename CCM_TYPE::listener_type::_ptr_type listener);
+
+ void on_data_available_i ( ::DDS::DataReader *rdr);
+
+ private:
+ typename CCM_TYPE::listener_type::_var_type listener_;
+ ::CCM_DDS::DataListenerControl_var control_;
+
+ typedef ::CIAO::DDS4CCM::DataReaderHandler_T<DDS_TYPE, CCM_TYPE> drh;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/DataReaderListener_T.cpp"
+
+#endif /* DDS4CCM_DATAREADERLISTENER_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.cpp
new file mode 100644
index 00000000000..a110cff07ed
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.cpp
@@ -0,0 +1,251 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds/DataReaderHandler_T.h"
+#include "tao/ORB_Core.h"
+
+#include <vector>
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::DataReaderStateListener_T (
+ typename CCM_TYPE::statelistener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ::CCM_DDS::StateListenerControl_ptr control,
+ ACE_Reactor* reactor)
+ : PortStatusListener_T <DDS_TYPE, CCM_TYPE> (port_status_listener, reactor) ,
+ listener_ (CCM_TYPE::statelistener_type::_duplicate (listener)),
+ control_ (::CCM_DDS::StateListenerControl::_duplicate (control))
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderStateListener_T::DataReaderStateListener_T");
+}
+
+// Implementation skeleton destructor
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::~DataReaderStateListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderStateListener_T::~DataReaderStateListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::on_data_available(::DDS::DataReader_ptr rdr)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderStateListener_T::on_data_available");
+ if (::CORBA::is_nil (this->control_.in ()) || this->control_->mode () == ::CCM_DDS::NOT_ENABLED)
+ return;
+ else
+ {
+ if (this->reactor_)
+ {
+ drsh* rh = 0;
+ ACE_NEW (rh, drsh (this, rdr));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("DataReaderStateHandler_T::failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->on_data_available_i (rdr);
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::on_data_available_i (::DDS::DataReader_ptr rdr)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataReaderStateListener_T::on_data_available_i");
+
+ if (::CORBA::is_nil (this->control_.in ()) || this->control_->mode () == ::CCM_DDS::NOT_ENABLED)
+ return;
+
+ ::CIAO::DDS4CCM::CCM_DDS_DataReader_i* rd =
+ dynamic_cast < ::CIAO::DDS4CCM::CCM_DDS_DataReader_i*>(rdr);
+ if (!rd)
+ {
+ /* In this specific case, this will never fail */
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("DataReaderStateListener_T::dynamic_cast failed.\n")));
+ return;
+ }
+
+ typename DDS_TYPE::data_reader * reader =
+ dynamic_cast< typename DDS_TYPE::data_reader * > ((rd->get_impl ()));
+
+ if (!reader)
+ {
+ /* In this specific case, this will never fail */
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("DataReaderStateListener_T::narrow failed.\n")));
+ return;
+ }
+
+ try
+ {
+ typename DDS_TYPE::dds_seq_type data;
+ DDS_SampleInfoSeq sample_info;
+ ::DDS_Long max_samples = 0;
+
+ this->control_->mode () == ::CCM_DDS::ONE_BY_ONE
+ ? max_samples = DDS_LENGTH_UNLIMITED
+ : this->control_->max_delivered_data() == 0
+ ? max_samples = DDS_LENGTH_UNLIMITED
+ : max_samples = this->control_->max_delivered_data ();
+
+ ::DDS::ReturnCode_t const result = reader->take (
+ data,
+ sample_info,
+ max_samples,
+ DDS_NOT_READ_SAMPLE_STATE,
+ DDS_NEW_VIEW_STATE | DDS_NOT_NEW_VIEW_STATE,
+ DDS_ANY_INSTANCE_STATE);
+ if (result == DDS_RETCODE_NO_DATA)
+ return;
+ else if (result != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("Unable to take data from data reader, error %d.\n"), result));
+ }
+ if (this->control_->mode () == ::CCM_DDS::ONE_BY_ONE)
+ {
+ for (::DDS_Long i = 0; i < data.length (); ++i)
+ {
+ // Sample data may not be valid anymore when
+ // deleted so don't check the valid_data flag
+ // here.
+ if (sample_info[i].instance_state ==
+ ::DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE)
+ {
+ ::CCM_DDS::ReadInfo readinfo;
+ readinfo <<= sample_info[i];
+ this->listener_->on_deletion (data[i], readinfo);
+ }
+ if (sample_info[i].valid_data)
+ {
+ if (sample_info[i].view_state == ::DDS_NEW_VIEW_STATE)
+ {
+ ::CCM_DDS::ReadInfo readinfo;
+ readinfo <<= sample_info[i];
+ this->listener_->on_creation (data[i], readinfo);
+ }
+ else
+ {
+ ::CCM_DDS::ReadInfo info;
+ info <<= sample_info[i];
+ this->listener_->on_one_update (data[i], info);
+ }
+ }
+ }
+ }
+ else if (this->control_->mode () == ::CCM_DDS::MANY_BY_MANY)
+ {
+ typedef std::vector<DDS_Long> Updates;
+ Updates updates;
+
+ CORBA::ULong nr_of_updates = 0;
+
+ for (::DDS_Long i = 0 ; i < sample_info.length(); i++)
+ {
+ if ((sample_info[i].valid_data &&
+ sample_info[i].view_state == ::DDS_NEW_VIEW_STATE) ||
+ sample_info[i].instance_state == ::DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE)
+ {
+ // Sample_new or sample_delete found -> first send out the
+ // updated samples in one go
+ typename CCM_TYPE::seq_type * inst_seq = 0;
+ ACE_NEW (inst_seq, typename CCM_TYPE::seq_type);
+ ::CCM_DDS::ReadInfoSeq * infoseq = 0;
+ ACE_NEW (infoseq, ::CCM_DDS::ReadInfoSeq);
+
+ infoseq->length (nr_of_updates);
+ inst_seq->length (nr_of_updates);
+ CORBA::ULong ix = 0;
+ for(Updates::iterator iter = updates.begin();
+ iter != updates.end();
+ ++iter)
+ {
+ (*infoseq)[ix] <<= sample_info[*iter];
+ (*inst_seq)[ix] = data[*iter];
+ ++ix;
+ }
+ this->listener_->on_many_updates (*inst_seq, *infoseq);
+ // Now invoke on_creation or on_deletion
+ if (sample_info[i].valid_data &&
+ sample_info[i].view_state == ::DDS_NEW_VIEW_STATE)
+ {
+ ::CCM_DDS::ReadInfo readinfo;
+ readinfo <<= sample_info[i];
+ this->listener_->on_creation (data[i], readinfo);
+ }
+ else if (sample_info[i].instance_state ==
+ ::DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE)
+ {
+ ::CCM_DDS::ReadInfo readinfo;
+ readinfo <<= sample_info[i];
+ this->listener_->on_deletion (data[i], readinfo);
+ }
+ // Clean up
+ updates.clear ();
+ nr_of_updates = 0;
+ }
+ else if (sample_info[i].valid_data)
+ {
+ ++nr_of_updates;
+ updates.push_back (i);
+ }
+ }
+ // Send the latest updates.
+ if (updates.size () > 0)
+ {
+ typename CCM_TYPE::seq_type * inst_seq = 0;
+ ACE_NEW (inst_seq, typename CCM_TYPE::seq_type);
+ ::CCM_DDS::ReadInfoSeq * infoseq = 0;
+ ACE_NEW (infoseq, ::CCM_DDS::ReadInfoSeq);
+
+ infoseq->length (nr_of_updates);
+ inst_seq->length (nr_of_updates);
+ CORBA::ULong ix = 0;
+ for(Updates::iterator iter = updates.begin();
+ iter != updates.end();
+ ++iter)
+ {
+ (*infoseq)[ix] <<= sample_info[*iter];
+ (*inst_seq)[ix] = data[*iter];
+ ++ix;
+ }
+ this->listener_->on_many_updates (*inst_seq, *infoseq);
+ }
+ }
+ // Return the loan
+ DDS_ReturnCode_t const retval = reader->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DataReaderStateListener_T::on_data_available_i - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ }
+ catch (...)
+ {
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::DataReaderStateListener_T<DDS_TYPE, CCM_TYPE>::get_mask (
+ typename CCM_TYPE::statelistener_type::_ptr_type listener)
+{
+ if (! ::CORBA::is_nil (listener) || CIAO_debug_level >= 10)
+ {
+ return ::DDS::DATA_AVAILABLE_STATUS |
+ ::DDS::REQUESTED_DEADLINE_MISSED_STATUS |
+ ::DDS::SAMPLE_LOST_STATUS;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.h
new file mode 100644
index 00000000000..18e1cf4bb3d
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataReaderStateListener_T.h
@@ -0,0 +1,53 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAREADERSTATELISTENER_T_H
+#define DDS4CCM_DATAREADERSTATELISTENER_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataReaderStateListener_T :
+ public PortStatusListener_T <DDS_TYPE, CCM_TYPE>
+ {
+ public:
+ /// Constructor
+ DataReaderStateListener_T (
+ typename CCM_TYPE::statelistener_type::_ptr_type listener,
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ::CCM_DDS::StateListenerControl_ptr control,
+ ACE_Reactor* reactor);
+
+ /// Destructor
+ virtual ~DataReaderStateListener_T (void);
+
+ virtual void on_data_available (::DDS::DataReader_ptr rdr);
+
+ static ::DDS::StatusMask get_mask (
+ typename CCM_TYPE::statelistener_type::_ptr_type listener);
+
+ void on_data_available_i (::DDS::DataReader_ptr rdr);
+
+ private:
+ typename CCM_TYPE::statelistener_type::_var_type listener_;
+ ::CCM_DDS::StateListenerControl_var control_;
+
+ typedef ::CIAO::DDS4CCM::DataReaderStateHandler_T<DDS_TYPE, CCM_TYPE> drsh;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/DataReaderStateListener_T.cpp"
+
+#endif /* DDS4CCM_DATAREADERSTATELISTENER_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.cpp
new file mode 100644
index 00000000000..36ac76acaf3
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.cpp
@@ -0,0 +1,301 @@
+// $Id$
+
+#include "DataWriter.h"
+#include "StatusCondition.h"
+#include "Publisher.h"
+#include "DataWriterListener.h"
+#include "Topic.h"
+
+#include "ndds/Duration_t.h"
+#include "ndds/InstanceHandle_t.h"
+#include "ndds/PublicationMatchedStatus.h"
+#include "ndds/LivelinessLostStatus.h"
+#include "ndds/OfferedIncompatibleQosStatus.h"
+#include "ndds/OfferedDeadlineMissedStatus.h"
+#include "ndds/InstanceHandleSeq.h"
+#include "ndds/DataWriterQos.h"
+#include "ndds/SubscriptionBuiltinTopicData.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_DataWriter_i::CCM_DDS_DataWriter_i (DDSDataWriter * dw)
+ : impl_ (dw)
+ {
+ }
+
+ CCM_DDS_DataWriter_i::~CCM_DDS_DataWriter_i (void)
+ {
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::set_qos (const ::DDS::DataWriterQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataWriter_i::set_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataWriterQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl()->set_qos (ccm_dds_qos);
+#else
+ return this->impl ()->set_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::get_qos (::DDS::DataWriterQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataWriter_i::get_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataWriterQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ ::DDS::ReturnCode_t retcode = this->impl()->get_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl ()->get_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::set_listener (::DDS::DataWriterListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ CCM_DDS_DataWriterListener_i* ccm_dds_impl_list = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_impl_list,
+ CCM_DDS_DataWriterListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ return this->impl ()->set_listener (ccm_dds_impl_list, mask);
+ }
+
+ ::DDS::DataWriterListener_ptr
+ CCM_DDS_DataWriter_i::get_listener (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDataWriterListener *wr = this->impl ()->get_listener ();
+ CCM_DDS_DataWriterListener_i *list_proxy = dynamic_cast <CCM_DDS_DataWriterListener_i *> (wr);
+ if (!list_proxy)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, "CCM_DDS_DataWriter_i::get_listener - "
+ "DDS returned a NIL listener.\n"));
+ return ::DDS::DataWriterListener::_nil ();
+ }
+ return list_proxy->get_datawriterlistener ();
+#else
+ return this->impl ()->get_listener ();
+#endif
+ }
+
+ ::DDS::Topic_ptr
+ CCM_DDS_DataWriter_i::get_topic (void)
+ {
+ ::DDS::Topic_var retval = ::DDS::Topic::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSTopic* t = this->impl ()->get_topic ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Topic_i (t),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::Topic_var t = this->impl ()->get_topic ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Topic_i (t.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::Publisher_ptr
+ CCM_DDS_DataWriter_i::get_publisher (void)
+ {
+ ::DDS::Publisher_var retval = ::DDS::Publisher::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSPublisher* p = this->impl ()->get_publisher ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Publisher_i (p),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::Publisher_var p = this->impl ()->get_publisher ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Publisher_i (p.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::wait_for_acknowledgments (const ::DDS::Duration_t & max_wait)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_Duration_t rtiduration;
+ rtiduration <<= max_wait;
+ return this->impl ()->wait_for_acknowledgments (rtiduration);
+#else
+ return this->impl ()->wait_for_acknowledgments (max_wait);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::get_liveliness_lost_status (::DDS::LivelinessLostStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_LivelinessLostStatus ddsstatus;
+ ddsstatus <<= status;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_liveliness_lost_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_liveliness_lost_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::get_offered_deadline_missed_status (::DDS::OfferedDeadlineMissedStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_OfferedDeadlineMissedStatus ddsstatus;
+ ddsstatus <<= status;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_offered_deadline_missed_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_offered_deadline_missed_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::get_offered_incompatible_qos_status (::DDS::OfferedIncompatibleQosStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_OfferedIncompatibleQosStatus ddsstatus;
+ ddsstatus <<= status;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_offered_incompatible_qos_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_offered_incompatible_qos_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::get_publication_matched_status (::DDS::PublicationMatchedStatus & status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_PublicationMatchedStatus ddsstatus;
+ ddsstatus <<= status;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_publication_matched_status (ddsstatus);
+ status <<= ddsstatus;
+ return retval;
+#else
+ return this->impl ()->get_publication_matched_status (status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::assert_liveliness (void)
+ {
+ return this->impl ()->assert_liveliness ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::get_matched_subscriptions (::DDS::InstanceHandleSeq & subscription_handles)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandleSeq rtiseq;
+ rtiseq <<= subscription_handles;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_matched_subscriptions (rtiseq);
+ subscription_handles <<= rtiseq;
+ return retval;
+#else
+ return this->impl ()->get_matched_subscriptions (subscription_handles);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::get_matched_subscription_data (::DDS::SubscriptionBuiltinTopicData & subscription_data,
+ DDS_INSTANCE_HANDLE_T_IN subscription_handle)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DataWriter_i::get_matched_subscription_data");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_SubscriptionBuiltinTopicData ccm_dds_sub_data;
+ ::DDS_InstanceHandle_t ccm_dds_sub_handle;
+ ccm_dds_sub_handle <<= subscription_handle;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_matched_subscription_data (ccm_dds_sub_data,
+ ccm_dds_sub_handle);
+ subscription_data <<= ccm_dds_sub_data;
+ return retval;
+#else
+ return this->impl ()->get_matched_subscription_data (subscription_data, subscription_handle);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DataWriter_i::enable (void)
+ {
+ return this->impl ()->enable ();
+ }
+
+ ::DDS::StatusCondition_ptr
+ CCM_DDS_DataWriter_i::get_statuscondition (void)
+ {
+ ::DDS::StatusCondition_var retval = ::DDS::StatusCondition::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSStatusCondition* sc = this->impl ()->get_statuscondition ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::StatusCondition_var sc = this->impl ()->get_statuscondition ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::StatusMask
+ CCM_DDS_DataWriter_i::get_status_changes (void)
+ {
+ return this->impl ()->get_status_changes ();
+ }
+
+ DDS_INSTANCE_HANDLE_T_RETN
+ CCM_DDS_DataWriter_i::get_instance_handle (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t const rtihandle = this->impl ()->get_instance_handle ();
+ ::DDS::InstanceHandle_t handle;
+ handle <<= rtihandle;
+ return handle;
+#else
+ return this->impl ()->get_instance_handle ();
+#endif
+ }
+
+ DDSDataWriter *
+ CCM_DDS_DataWriter_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_DataWriter_i::set_impl (DDSDataWriter * dw)
+ {
+ this->impl_ = dw;
+ }
+
+ DDSDataWriter *
+ CCM_DDS_DataWriter_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.h
new file mode 100644
index 00000000000..fee440bf112
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriter.h
@@ -0,0 +1,113 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAWRITER_H
+#define DDS4CCM_DATAWRITER_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds/ndds/InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+#include "tao/LocalObject.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DataWriter DDSDataWriter;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_DataWriter_i
+ : public virtual ::DDS::CCM_DataWriter,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_DataWriter_i (DDSDataWriter * dw);
+
+ /// Destructor
+ virtual ~CCM_DDS_DataWriter_i (void);
+
+ virtual
+ ::DDS::ReturnCode_t set_qos (const ::DDS::DataWriterQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t get_qos (::DDS::DataWriterQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t set_listener (::DDS::DataWriterListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual
+ ::DDS::DataWriterListener_ptr get_listener (void);
+
+ virtual
+ ::DDS::Topic_ptr get_topic (void);
+
+ virtual
+ ::DDS::Publisher_ptr get_publisher (void);
+
+ virtual
+ ::DDS::ReturnCode_t wait_for_acknowledgments (const ::DDS::Duration_t & max_wait);
+
+ virtual
+ ::DDS::ReturnCode_t get_liveliness_lost_status (::DDS::LivelinessLostStatus & status);
+
+ virtual
+ ::DDS::ReturnCode_t get_offered_deadline_missed_status (::DDS::OfferedDeadlineMissedStatus & status);
+
+ virtual
+ ::DDS::ReturnCode_t get_offered_incompatible_qos_status (::DDS::OfferedIncompatibleQosStatus & status);
+
+ virtual
+ ::DDS::ReturnCode_t get_publication_matched_status (::DDS::PublicationMatchedStatus & status);
+
+ virtual
+ ::DDS::ReturnCode_t assert_liveliness (void);
+
+ virtual
+ ::DDS::ReturnCode_t get_matched_subscriptions (::DDS::InstanceHandleSeq & subscription_handles);
+
+ virtual
+ ::DDS::ReturnCode_t get_matched_subscription_data (::DDS::SubscriptionBuiltinTopicData & subscription_data,
+ DDS_INSTANCE_HANDLE_T_IN subscription_handle);
+
+ virtual
+ ::DDS::ReturnCode_t enable (void);
+
+ virtual
+ ::DDS::StatusCondition_ptr get_statuscondition (void);
+
+ virtual
+ ::DDS::StatusMask get_status_changes (void);
+
+ virtual
+ DDS_INSTANCE_HANDLE_T_RETN get_instance_handle (void);
+
+ DDSDataWriter * get_impl (void);
+
+ void set_impl (DDSDataWriter * dw);
+
+ private:
+ DDSDataWriter * impl_;
+
+ DDSDataWriter * impl (void);
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.cpp
new file mode 100644
index 00000000000..13416d987e7
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.cpp
@@ -0,0 +1,108 @@
+// $Id$
+
+#include "DataWriterListener.h"
+#include "DataWriter.h"
+#include "ndds/PublicationMatchedStatus.h"
+#include "ndds/LivelinessLostStatus.h"
+#include "ndds/OfferedIncompatibleQosStatus.h"
+#include "ndds/OfferedDeadlineMissedStatus.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_DataWriterListener_i::CCM_DDS_DataWriterListener_i (::DDS::DataWriterListener_ptr s)
+ : impl_ (::DDS::DataWriterListener::_duplicate (s))
+ {
+ }
+
+ CCM_DDS_DataWriterListener_i::~CCM_DDS_DataWriterListener_i (void)
+ {
+ }
+
+ void
+ CCM_DDS_DataWriterListener_i::on_offered_deadline_missed (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_OfferedDeadlineMissedStatus & status)
+ {
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::OfferedDeadlineMissedStatus ddsstatus;
+ ddsstatus <<= status;
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_offered_deadline_missed (dds_writer.in (), ddsstatus);
+#else
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_offered_deadline_missed (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataWriterListener_i::on_offered_incompatible_qos (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_OfferedIncompatibleQosStatus & status)
+ {
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::OfferedIncompatibleQosStatus ddsstatus;
+ ddsstatus <<= status;
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_offered_incompatible_qos (dds_writer.in (), ddsstatus);
+#else
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_offered_incompatible_qos (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataWriterListener_i::on_liveliness_lost (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_LivelinessLostStatus & status)
+ {
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::LivelinessLostStatus ddsstatus;
+ ddsstatus <<= status;
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_liveliness_lost (dds_writer.in (), ddsstatus);
+#else
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_liveliness_lost (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_DataWriterListener_i::on_publication_matched (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_PublicationMatchedStatus & status)
+ {
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::PublicationMatchedStatus ddsstatus;
+ ddsstatus <<= status;
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_publication_matched (dds_writer.in (), ddsstatus);
+#else
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (the_writer));
+ this->impl_->on_publication_matched (dds_writer.in (), status);
+#endif
+ }
+
+ ::DDS::DataWriterListener_ptr
+ CCM_DDS_DataWriterListener_i::get_datawriterlistener (void)
+ {
+ return ::DDS::DataWriterListener::_duplicate (this->impl_.in ());
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.h
new file mode 100644
index 00000000000..3947cdf04da
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener.h
@@ -0,0 +1,71 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAWRITERLISTENER_H
+#define DDS4CCM_DATAWRITERLISTENER_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DataWriterListener DDSDataWriterListener;
+typedef ::DDS::DataWriter DDSDataWriter;
+typedef ::DDS::OfferedDeadlineMissedStatus DDS_OfferedDeadlineMissedStatus;
+typedef ::DDS::OfferedIncompatibleQosStatus DDS_OfferedIncompatibleQosStatus;
+typedef ::DDS::LivelinessLostStatus DDS_LivelinessLostStatus;
+typedef ::DDS::PublicationMatchedStatus DDS_PublicationMatchedStatus;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_DataWriterListener_i :
+ public virtual ::DDSDataWriterListener
+ {
+ public:
+ /// Constructor
+ CCM_DDS_DataWriterListener_i (::DDS::DataWriterListener_ptr p);
+
+ /// Destructor
+ virtual ~CCM_DDS_DataWriterListener_i (void);
+
+ virtual void on_offered_deadline_missed (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_OfferedDeadlineMissedStatus & status);
+
+ virtual void on_offered_incompatible_qos (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_OfferedIncompatibleQosStatus & status);
+
+ virtual void on_liveliness_lost (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_LivelinessLostStatus & status);
+
+ virtual void on_publication_matched (
+ ::DDSDataWriter *the_writer,
+ const ::DDS_PublicationMatchedStatus & status);
+
+ ::DDS::DataWriterListener_ptr get_datawriterlistener (void);
+ private:
+ ::DDS::DataWriterListener_var impl_;
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.cpp
new file mode 100644
index 00000000000..967058bfae5
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.cpp
@@ -0,0 +1,76 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataWriter.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::DataWriterListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataWriterListener_T::DataWriterListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::~DataWriterListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataWriterListener_T::~DataWriterListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedDeadlineMissedStatus &)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedIncompatibleQosStatus &)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::on_liveliness_lost (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::LivelinessLostStatus &)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::on_publication_matched (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::PublicationMatchedStatus &)
+{
+}
+
+#if (CIAO_DDS4CCM_NDDS==1)
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::on_reliable_writer_cache_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableWriterCacheChangedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::on_reliable_reader_activity_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableReaderActivityChangedStatus &)
+{
+}
+#endif
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::DataWriterListener_T<DDS_TYPE, CCM_TYPE>::get_mask (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DataWriterListener_T::get_mask");
+ return 0;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.h
new file mode 100644
index 00000000000..d6ec727260a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DataWriterListener_T.h
@@ -0,0 +1,72 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_DATAWRITERLISTENER_T
+#define DDS_DATAWRITERLISTENER_T
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#include "ace/Copy_Disabled.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DataWriterListener_T :
+ public ::DDS::DataWriterListener,
+ private ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ DataWriterListener_T (void);
+
+ /// Destructor
+ virtual ~DataWriterListener_T (void);
+
+ virtual void
+ on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedDeadlineMissedStatus & );
+
+ virtual void
+ on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedIncompatibleQosStatus & );
+
+ virtual void
+ on_liveliness_lost (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::LivelinessLostStatus & );
+
+ virtual void
+ on_publication_matched (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::PublicationMatchedStatus & );
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual void
+ on_reliable_writer_cache_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableWriterCacheChangedStatus & );
+
+ virtual void
+ on_reliable_reader_activity_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableReaderActivityChangedStatus & );
+#endif
+
+ static ::DDS::StatusMask get_mask (void);
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/DataWriterListener_T.cpp"
+
+#endif /* DDS_DATAWRITERLISTENER_T */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.cpp
new file mode 100644
index 00000000000..a30cdb58125
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.cpp
@@ -0,0 +1,1132 @@
+// $Id$
+
+#include "DomainParticipant.h"
+#include "Subscriber.h"
+#include "Publisher.h"
+#include "ContentFilteredTopic.h"
+#include "Topic.h"
+#include "TopicDescription.h"
+#include "Utils.h"
+#include "StatusCondition.h"
+#include "PublisherListener.h"
+#include "SubscriberListener.h"
+#include "TopicListener.h"
+#include "DomainParticipantListener.h"
+
+#include "ndds/PublisherQos.h"
+#include "ndds/SubscriberQos.h"
+#include "ndds/TopicQos.h"
+#include "ndds/DomainParticipantQos.h"
+#include "ndds/InstanceHandle_t.h"
+#include "ndds/Duration_t.h"
+#include "ndds/Time_t.h"
+#include "ndds/InstanceHandleSeq.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_DomainParticipant_i::CCM_DDS_DomainParticipant_i (
+ DDSDomainParticipant * dp) : impl_ (dp)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipant_i::CCM_DDS_DomainParticipant_i");
+ }
+
+ CCM_DDS_DomainParticipant_i::~CCM_DDS_DomainParticipant_i (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipant_i::~CCM_DDS_DomainParticipant_i");
+ }
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::Publisher_ptr
+ CCM_DDS_DomainParticipant_i::create_publisher_with_profile (
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::PublisherListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_publisher_with_profile");
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::create_publisher_with_profile - "
+ "Creating Publisher\n"));
+ CCM_DDS_PublisherListener_i *ccm_dds_pl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_pl,
+ CCM_DDS_PublisherListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ DDSPublisher * ccm_dds_pub =
+ this->impl ()->create_publisher_with_profile (library_name,
+ profile_name,
+ ccm_dds_pl,
+ mask);
+
+ if (!ccm_dds_pub)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::create_publisher_with_profile - "
+ "Error: Unable to create Publisher\n"));
+ delete ccm_dds_pl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::Publisher_var retval = ::DDS::Publisher::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Publisher_i (ccm_dds_pub),
+ CORBA::NO_MEMORY ());
+
+
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipant_i::create_publisher_with_profile - "
+ "Successfully created a DDSPublisher\n"));
+
+ ccm_dds_pub->enable ();
+ return retval._retn ();
+ }
+#endif
+
+ ::DDS::Publisher_ptr
+ CCM_DDS_DomainParticipant_i::create_publisher (
+ const ::DDS::PublisherQos & qos,
+ ::DDS::PublisherListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_publisher");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ACE_UNUSED_ARG (qos);
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::create_publisher - "
+ "Creating Publisher\n"));
+
+ DDS_PublisherQos ccm_dds_qos = DDS_PUBLISHER_QOS_DEFAULT;
+
+ CCM_DDS_PublisherListener_i *ccm_dds_pl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_pl,
+ CCM_DDS_PublisherListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ DDSPublisher * ccm_dds_pub =
+ this->impl ()->create_publisher (ccm_dds_qos,
+ ccm_dds_pl,
+ mask);
+
+ if (!ccm_dds_pub)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::create_publisher - "
+ "Error: Unable to create Publisher\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::Publisher_var retval = ::DDS::Publisher::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Publisher_i (ccm_dds_pub),
+ CORBA::NO_MEMORY ());
+
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipant_i::create_publisher - "
+ "Successfully created a DDSPublisher\n"));
+
+ ccm_dds_pub->enable ();
+ return retval._retn ();
+#else
+ return this->impl ()->create_publisher (qos, a_listener, mask);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::delete_publisher (::DDS::Publisher_ptr p)
+ {
+ CCM_DDS_Publisher_i *ccm_dds_pub = dynamic_cast < CCM_DDS_Publisher_i * > (p);
+
+ if (!ccm_dds_pub)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_publisher - "
+ "Unable to cast provided object reference to servant pointer.\n"));
+ return ::DDS::RETCODE_ERROR;
+ }
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::delete_publisher - "
+ "Successfully casted provided object reference to CCM_DDS_Publisher_i\n"));
+
+ DDS_ReturnCode_t const retval = this->impl ()->delete_publisher (ccm_dds_pub->get_impl ());
+
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_publisher - "
+ "Error: RTI delete_publisher returned non-ok error code %C\n",
+ translate_retcode (retval)));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipant_i::delete_publisher - "
+ "Provided publisher successfully deleted\n"));
+ }
+
+ return retval;
+ }
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::Subscriber_ptr
+ CCM_DDS_DomainParticipant_i::create_subscriber_with_profile (
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::SubscriberListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_subscriber_with_profile");
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::create_subscriber_with_profile - "
+ "Creating Subscriber\n"));
+
+ CCM_DDS_SubscriberListener_i *ccm_dds_sl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_sl,
+ CCM_DDS_SubscriberListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ DDSSubscriber * ccm_dds_sub =
+ this->impl ()->create_subscriber_with_profile (
+ library_name,
+ profile_name,
+ ccm_dds_sl,
+ mask);
+
+ if (!ccm_dds_sub)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::create_subscriber_with_profile - "
+ "Error: Unable to create Subscriber\n"));
+ delete ccm_dds_sl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::Subscriber_var retval = ::DDS::Subscriber::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Subscriber_i (ccm_dds_sub),
+ CORBA::NO_MEMORY ());
+
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipant_i::create_subscriber_with_profile - "
+ "Successfully created a DDSSubscriber\n"));
+
+ ccm_dds_sub->enable ();
+ return retval._retn ();
+ }
+#endif
+
+ ::DDS::Subscriber_ptr
+ CCM_DDS_DomainParticipant_i::create_subscriber (const ::DDS::SubscriberQos & qos,
+ ::DDS::SubscriberListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_subscriber");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ACE_UNUSED_ARG (qos);
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::create_subscriber - "
+ "Creating Subscriber\n"));
+
+ CCM_DDS_SubscriberListener_i *ccm_dds_sl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_sl,
+ CCM_DDS_SubscriberListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ DDS_SubscriberQos ccm_dds_qos = DDS_SUBSCRIBER_QOS_DEFAULT;
+ DDSSubscriber * ccm_dds_sub =
+ this->impl ()->create_subscriber (ccm_dds_qos,
+ ccm_dds_sl,
+ mask);
+
+ if (!ccm_dds_sub)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::create_subscriber - "
+ "Error: Unable to create Subscriber\n"));
+ delete ccm_dds_sl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::Subscriber_var retval = ::DDS::Subscriber::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Subscriber_i (ccm_dds_sub),
+ CORBA::NO_MEMORY ());
+
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipant_i::create_subscriber - "
+ "Successfully created a DDSSubscriber\n"));
+
+ ccm_dds_sub->enable ();
+ return retval._retn ();
+#else
+ return this->impl ()->create_subscriber (qos, a_listener, mask);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::delete_subscriber (::DDS::Subscriber_ptr s)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_Subscriber_i *ccm_dds_sub = dynamic_cast < CCM_DDS_Subscriber_i * > (s);
+
+ if (!ccm_dds_sub)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_subscriber - "
+ "Unable to cast provided object reference to servant pointer.\n"));
+ return ::DDS::RETCODE_ERROR;
+ }
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::delete_subscriber - "
+ "Successfully casted provided object reference to CCM_DDS_Subscriber_i\n"));
+
+ DDS_ReturnCode_t const retval = this->impl ()->delete_subscriber (ccm_dds_sub->get_impl ());
+
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_subscriber - "
+ "Error: RTI delete_subscriber returned non-ok error code %C\n",
+ translate_retcode (retval)));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipant_i::delete_subscriber - "
+ "Provided subscriber successfully deleted\n"));
+ }
+
+ return retval;
+#else
+ return this->impl ()->delete_subscriber (s);
+#endif
+ }
+
+ ::DDS::Subscriber_ptr
+ CCM_DDS_DomainParticipant_i::get_builtin_subscriber (void)
+ {
+ ::DDS::Subscriber_var retval = ::DDS::Subscriber::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSSubscriber* sub = this->impl ()->get_builtin_subscriber ();
+ if (sub)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Subscriber_i (sub),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::Subscriber_var sub = this->impl ()->get_builtin_subscriber ();
+ if (! ::CORBA::is_nil (sub.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Subscriber_i (sub.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::Topic_ptr
+ CCM_DDS_DomainParticipant_i::create_topic (const char * impl_name,
+ const char * type_name,
+ const ::DDS::TopicQos & qos,
+ ::DDS::TopicListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_topic");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ACE_UNUSED_ARG (qos);
+
+ if (impl_name == 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic - "
+ "Error: provided nil topic name\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER,
+ 0);
+ }
+
+ if (type_name == 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic - "
+ "Error: provided nil type name\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER,
+ 0);
+ }
+
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "DDS_DomainParticipant_i::create_topic - "
+ "Attempting to create topic with name %C and type %C\n",
+ impl_name, type_name));
+
+ CCM_DDS_TopicListener_i *ccm_dds_tl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_tl,
+ CCM_DDS_TopicListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ DDS_TopicQos ccm_dds_qos = DDS_TOPIC_QOS_DEFAULT;
+
+ ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard,
+ this->tps_mutex_, CORBA::INTERNAL ());
+ {
+ CCM_DDS_Topic_i *ccm_dds_tp = this->tps_[impl_name];
+
+ if (!ccm_dds_tp)
+ {
+ DDSTopic *dds_topic = this->impl ()->create_topic (impl_name,
+ type_name,
+ ccm_dds_qos,
+ ccm_dds_tl,
+ mask);
+
+ if (dds_topic == 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic - "
+ "Error: RTI DDS returned a nil topic\n"));
+ delete ccm_dds_tl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::Topic_var retval = ::DDS::Topic::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Topic_i (dds_topic),
+ CORBA::NO_MEMORY ());
+
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "DDS_DomainParticipant_i::create_topic - "
+ "Successfully created topic with name %C and type %C\n",
+ impl_name, type_name));
+
+ ccm_dds_tp = dynamic_cast < CCM_DDS_Topic_i *> (retval.in ());
+ ccm_dds_tp->set_impl (dds_topic);
+
+ this->tps_[impl_name] = ccm_dds_tp;
+
+ return retval._retn ();
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - "
+ "Re-using topic with name %C and type %C.\n",
+ impl_name, type_name));
+
+ return ::DDS::Topic::_duplicate (ccm_dds_tp);
+ }
+ }
+#else
+ return this->impl ()->create_topic (impl_name,
+ type_name,
+ qos,
+ a_listener,
+ mask);
+#endif
+ }
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::Topic_ptr
+ CCM_DDS_DomainParticipant_i::create_topic_with_profile (
+ const char *impl_name,
+ const char *type_name,
+ const char *library_name,
+ const char *profile_name,
+ ::DDS::TopicListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_topic_with_profile");
+
+ if (impl_name == 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - "
+ "Error: provided nil topic name\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0);
+ }
+
+ if (type_name == 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - "
+ "Error: provided nil type name\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0);
+ }
+
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - "
+ "Attempting to create topic with name %C and type %C\n",
+ impl_name, type_name));
+
+ CCM_DDS_TopicListener_i *ccm_dds_tl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_tl,
+ CCM_DDS_TopicListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard,
+ this->tps_mutex_, CORBA::INTERNAL ());
+ {
+ CCM_DDS_Topic_i *ccm_dds_tp = this->tps_[impl_name];
+
+ if (!ccm_dds_tp)
+ {
+ DDSTopic *dds_topic = this->impl ()->create_topic_with_profile (
+ impl_name,
+ type_name,
+ library_name,
+ profile_name,
+ ccm_dds_tl,
+ mask);
+
+ if (dds_topic == 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - "
+ "Error: RTI DDS returned a nil topic\n"));
+ delete ccm_dds_tl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::Topic_var retval = ::DDS::Topic::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Topic_i (dds_topic),
+ CORBA::NO_MEMORY ());
+
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - "
+ "Successfully created topic with name %C and type %C\n",
+ impl_name, type_name));
+
+ ccm_dds_tp = dynamic_cast < CCM_DDS_Topic_i *> (retval.in ());
+ ccm_dds_tp->set_impl (dds_topic);
+
+ this->tps_[impl_name] = ccm_dds_tp;
+
+ return retval._retn ();
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "DDS_DomainParticipant_i::create_topic_with_profile - "
+ "Re-using topic with name %C and type %C.\n",
+ impl_name, type_name));
+ return ::DDS::Topic::_duplicate (ccm_dds_tp);
+ }
+ }
+ }
+#endif
+
+ bool
+ CCM_DDS_DomainParticipant_i::remove_topic (CCM_DDS_Topic_i * topic)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipant_i::remove_topic");
+
+ ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard,
+ this->tps_mutex_, CORBA::INTERNAL ());
+
+ if (topic->_refcount_value () == 1)
+ {
+ Topics::iterator pos;
+ for (pos = this->tps_.begin(); pos != this->tps_.end(); ++pos)
+ {
+ if (pos->second == topic)
+ {
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::remove_topic - "
+ "Removing topic for %C from list.\n",
+ pos->first.c_str ()));
+ this->tps_.erase (pos->first);
+ break;
+ }
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::remove_topic - "
+ "Don't delete topic %C since it's still used - ref_count <%d>\n",
+ topic->get_name (),
+ topic->_refcount_value ()));
+ return false;
+ }
+ return true;
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::delete_topic (::DDS::Topic_ptr a_topic)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::delete_topic");
+ const char * topic_name = a_topic->get_name ();
+ CCM_DDS_Topic_i *top = this->tps_[topic_name];
+
+ if (!top)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_topic <%C> - "
+ "Unable to cast provided object reference to servant.\n",
+ topic_name));
+ return ::DDS::RETCODE_BAD_PARAMETER;
+ }
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipant_i::delete_topic <%C> - "
+ "Successfully casted provided object reference to servant.\n",
+ topic_name));
+
+ ::DDS::ReturnCode_t retval = DDS::RETCODE_OK;
+ if (this->remove_topic (top))
+ {
+ ::DDS::TopicDescription_var td =
+ lookup_topicdescription (ACE_TEXT ("DDS4CCMContentFilteredTopic"));
+ if (! ::CORBA::is_nil (td.in ()))
+ {
+ ::DDS::ContentFilteredTopic_var cft = ::DDS::ContentFilteredTopic::_narrow (td.in ());
+ if (! ::CORBA::is_nil (cft.in ()))
+ {
+ ::DDS::ReturnCode_t const ret = this->delete_contentfilteredtopic (cft.in ());
+ if (ret != ::DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_topic <%C> - "
+ "Unable to delete ContentFilteredTopic. Retval is %C.\n",
+ topic_name,
+ translate_retcode (ret)));
+ }
+ }
+ }
+ retval = this->impl ()->delete_topic (top->get_impl ());
+
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_topic <%C> - "
+ "Error: RTI delete_topic returned non-ok error code %C\n",
+ topic_name,
+ translate_retcode (retval)));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipant_i::delete_topic <%C> - "
+ "Provided topic successfully deleted\n",
+ topic_name));
+ }
+ }
+ return retval;
+ }
+
+ ::DDS::Topic_ptr
+ CCM_DDS_DomainParticipant_i::find_topic (const char * impl_name,
+ const ::DDS::Duration_t & timeout)
+ {
+ ::DDS::Topic_var retval = ::DDS::Topic::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_Duration_t ddstimeout;
+ ddstimeout <<= timeout;
+ ::DDSTopic* topic = this->impl ()->find_topic (impl_name, ddstimeout);
+ if (topic)
+ {
+ ACE_NEW_RETURN (retval,
+ CCM_DDS_Topic_i (topic),
+ ::DDS::Topic::_nil ());
+ }
+#else
+ ::DDS::Topic_var topic = this->impl ()->find_topic (impl_name, timeout);
+ if (! ::CORBA::is_nil (topic.in ())
+ {
+ ACE_NEW_RETURN (retval,
+ CCM_DDS_Topic_i (topic.in ()),
+ ::DDS::Topic::_nil ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::TopicDescription_ptr
+ CCM_DDS_DomainParticipant_i::lookup_topicdescription (const char * name)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipant_i::lookup_topicdescription");
+
+ DDS4CCM_DEBUG (7, (LM_DEBUG, CLINFO "Looking up topic: name <%C>\n",
+ name));
+
+ ::DDS::TopicDescription_var retval = ::DDS::TopicDescription::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDSTopicDescription* topic = this->impl ()->lookup_topicdescription (name);
+ if (topic)
+ {
+ // Check the entity: is it a Topic or a ContentFilteredTopic
+ ::DDSTopic * tp = dynamic_cast < ::DDSTopic *> (topic);
+ if (tp)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_Topic_i (tp),
+ CORBA::NO_MEMORY ());
+ }
+ else
+ {
+ ::DDSContentFilteredTopic * cftp =
+ dynamic_cast < ::DDSContentFilteredTopic *>(topic);
+ if (cftp)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_ContentFilteredTopic_i (cftp),
+ CORBA::NO_MEMORY ());
+ }
+ }
+ }
+#else
+ ::DDSTopicDescription_var topic = this->impl ()->lookup_topicdescription (name);
+ if (!CORBA::is_ni (topic.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_TopicDescription_i (topic.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::ContentFilteredTopic_ptr
+ CCM_DDS_DomainParticipant_i::create_contentfilteredtopic (const char * name,
+ ::DDS::Topic_ptr related_topic,
+ const char * filter_expression,
+ const ::DDS::StringSeq & expression_parameters)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_contentfilteredtopic");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_Topic_i *top = dynamic_cast< CCM_DDS_Topic_i *> (related_topic);
+ if (!top)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::create_contentfilteredtopic - "
+ "Unable to cast provided topic.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ const char** parameterlist = 0;
+ ACE_NEW_THROW_EX (parameterlist,
+ const char*[expression_parameters.length ()],
+ CORBA::NO_MEMORY ());
+
+ for (CORBA::ULong i = 0; i < expression_parameters.length (); ++i)
+ {
+ parameterlist[i] = expression_parameters[i].in ();
+ }
+ DDS_StringSeq parameters (expression_parameters.length ());
+ parameters.from_array (parameterlist, expression_parameters.length ());
+
+ DDSContentFilteredTopic * ccm_dds_cft = this->impl ()->create_contentfilteredtopic (
+ name,
+ top->get_impl (),
+ filter_expression,
+ parameters);
+ delete [] parameterlist;
+ if (!ccm_dds_cft)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::create_contentfilteredtopic - "
+ "RTI DDS returned a nil ContentFilteredTopic.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::ContentFilteredTopic_var retval = ::DDS::ContentFilteredTopic::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_ContentFilteredTopic_i (ccm_dds_cft),
+ CORBA::NO_MEMORY ());
+
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "DDS_DomainParticipant_i::create_contentfilteredtopic - "
+ "Successfully created topic with name <%C> and filter expression <%C>\n",
+ name, filter_expression));
+
+ return retval._retn ();
+#else
+ return this->impl ()->create_contentfilteredtopic (
+ name,
+ related_topic,
+ filter_expression,
+ expression_parameters);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::delete_contentfilteredtopic (::DDS::ContentFilteredTopic_ptr a_contentfilteredtopic)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::delete_contentfilteredtopic");
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_ContentFilteredTopic_i *ccm_dds_cft =
+ dynamic_cast < CCM_DDS_ContentFilteredTopic_i *> (a_contentfilteredtopic);
+ if (!ccm_dds_cft)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipant_i::delete_contentfilteredtopic - "
+ "Unable to cast provided ContentFilteredTopic.\n"));
+ return ::DDS::RETCODE_BAD_PARAMETER;
+ }
+ return this->impl ()->delete_contentfilteredtopic (ccm_dds_cft->get_impl ());
+#else
+ return this->impl ()->delete_contentfilteredtopic (a_contentfilteredtopic);
+#endif
+ }
+
+ ::DDS::MultiTopic_ptr
+ CCM_DDS_DomainParticipant_i::create_multitopic (const char * /*name*/,
+ const char * /*type_name*/,
+ const char * /*subscription_expression*/,
+ const ::DDS::StringSeq & /*expression_parameters*/)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::create_multitopic");
+ throw CORBA::NO_IMPLEMENT ();
+
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::delete_multitopic (::DDS::MultiTopic_ptr /*a_multitopic*/)
+ {
+ //this->impl ()->delete_multitopic (
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::delete_multitopic");
+ throw CORBA::NO_IMPLEMENT ();
+
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::delete_contained_entities (void)
+ {
+ return this->impl ()->delete_contained_entities ();
+
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::set_qos (const ::DDS::DomainParticipantQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::set_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DomainParticipantQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl()->set_qos (ccm_dds_qos);
+#else
+ return this->impl()->set_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_qos (::DDS::DomainParticipantQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::get_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DomainParticipantQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode = this->impl()-> get_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl()->get_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::set_listener (::DDS::DomainParticipantListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_DomainPublisherListener_i* ccm_dds_impl_list = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_impl_list,
+ CCM_DDS_DomainPublisherListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ return this->impl_->set_listener (ccm_dds_impl_list, mask);
+#else
+ return this->impl_->set_listener (a_listener, mask);
+#endif
+ }
+
+ ::DDS::DomainParticipantListener_ptr
+ CCM_DDS_DomainParticipant_i::get_listener (void)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::get_listener");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDomainParticipantListener *ccm_dds_dp_list = this->impl ()->get_listener ();
+ CCM_DDS_DomainPublisherListener_i *list_proxy = dynamic_cast <CCM_DDS_DomainPublisherListener_i *> (ccm_dds_dp_list);
+ if (!list_proxy)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, "CCM_DDS_DomainParticipant_i::get_listener - "
+ "DDS returned a NIL listener.\n"));
+ return ::DDS::DomainParticipantListener::_nil ();
+ }
+ return list_proxy->get_domainparticipantlistener ();
+#else
+ return this->impl ()->get_listener ();
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::ignore_participant (DDS_INSTANCE_HANDLE_T_IN handle)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t ccm_dds_handle;
+ ccm_dds_handle <<= handle;
+ return this->impl ()->ignore_participant (ccm_dds_handle);
+#else
+ return this->impl ()->ignore_participant (handle);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::ignore_topic (DDS_INSTANCE_HANDLE_T_IN handle)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t ccm_dds_handle;
+ ccm_dds_handle <<= handle;
+ return this->impl ()->ignore_topic (ccm_dds_handle);
+#else
+ return this->impl ()->ignore_topic (handle);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::ignore_publication (DDS_INSTANCE_HANDLE_T_IN handle)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t ccm_dds_handle;
+ ccm_dds_handle <<= handle;
+ return this->impl ()->ignore_publication (ccm_dds_handle);
+#else
+ return this->impl ()->ignore_publication (handle);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::ignore_subscription (DDS_INSTANCE_HANDLE_T_IN handle)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t ccm_dds_handle;
+ ccm_dds_handle <<= handle;
+ return this->impl ()->ignore_subscription (ccm_dds_handle);
+#else
+ return this->impl ()->ignore_subscription (handle);
+#endif
+ }
+
+ ::DDS::DomainId_t
+ CCM_DDS_DomainParticipant_i::get_domain_id (void)
+ {
+ return this->impl ()->get_domain_id ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::assert_liveliness (void)
+ {
+ return this->impl ()->assert_liveliness ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::set_default_publisher_qos (const ::DDS::PublisherQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::set_default_publisher_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_PublisherQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl()->set_default_publisher_qos (ccm_dds_qos);
+#else
+ return this->impl()->set_default_publisher_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_default_publisher_qos (::DDS::PublisherQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::get_default_publisher_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_PublisherQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode = this->impl()-> get_default_publisher_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl()->get_default_publisher_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::set_default_subscriber_qos (const ::DDS::SubscriberQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::set_default_subscriber_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_SubscriberQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl()->set_default_subscriber_qos (ccm_dds_qos);
+#else
+ return this->impl()->set_default_subscriber_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_default_subscriber_qos (::DDS::SubscriberQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::get_default_subscriber_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_SubscriberQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode =
+ this->impl()-> get_default_subscriber_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl()->get_default_subscriber_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::set_default_topic_qos (const ::DDS::TopicQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::set_default_topic_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_TopicQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl()->set_default_topic_qos (ccm_dds_qos);
+#else
+ return this->impl()->set_default_topic_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_default_topic_qos (::DDS::TopicQos & qos)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::get_default_topic_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_TopicQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode =
+ this->impl()-> get_default_topic_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl()->get_default_topic_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_discovered_participants (::DDS::InstanceHandleSeq & impl_handles)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandleSeq rtiseq;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_discovered_participants (rtiseq);
+ impl_handles <<= rtiseq;
+ return retval;
+#else
+ return this->impl ()->get_discovered_participants (impl_handles);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_discovered_participant_data (::DDS::ParticipantBuiltinTopicData & /*impl_data*/,
+ DDS_INSTANCE_HANDLE_T_IN /*impl_handle*/)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::get_discovered_participant_data");
+ throw CORBA::NO_IMPLEMENT ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_discovered_topics (::DDS::InstanceHandleSeq & impl_handles)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandleSeq rtiseq;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_discovered_topics (rtiseq);
+ impl_handles <<= rtiseq;
+ return retval;
+#else
+ return this->impl ()->get_discovered_topics (impl_handles);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_discovered_topic_data (::DDS::TopicBuiltinTopicData & /*impl_data*/,
+ DDS_INSTANCE_HANDLE_T_IN /*impl_handle*/)
+ {
+ DDS4CCM_TRACE ("DDS_DomainParticipant_i::get_discovered_topic_data");
+ throw CORBA::NO_IMPLEMENT ();
+ }
+
+ ::CORBA::Boolean
+ CCM_DDS_DomainParticipant_i::contains_entity (DDS_INSTANCE_HANDLE_T_IN a_handle)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t ccm_dds_handle;
+ ccm_dds_handle <<= a_handle;
+ return this->impl ()->contains_entity (ccm_dds_handle);
+#else
+ return this->impl ()->contains_entity (a_handle);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::get_current_time (::DDS::Time_t & current_time)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_Time_t ccm_dds_time;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_current_time (ccm_dds_time);
+ current_time <<= ccm_dds_time;
+ return retval;
+#else
+ return this->impl ()->get_current_time (current_time);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipant_i::enable (void)
+ {
+ return this->impl ()->enable ();
+ }
+
+ ::DDS::StatusCondition_ptr
+ CCM_DDS_DomainParticipant_i::get_statuscondition (void)
+ {
+ ::DDS::StatusCondition_var retval = ::DDS::StatusCondition::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSStatusCondition* sc = this->impl ()->get_statuscondition ();
+ if (sc)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::StatusCondition_var sc = this->impl ()->get_statuscondition ();
+ if (! ::CORBA::is_nil (sc.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::StatusMask
+ CCM_DDS_DomainParticipant_i::get_status_changes (void)
+ {
+ return this->impl ()->get_status_changes ();
+ }
+
+ DDS_INSTANCE_HANDLE_T_RETN
+ CCM_DDS_DomainParticipant_i::get_instance_handle (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t const rtihandle = this->impl ()->get_instance_handle ();
+ ::DDS::InstanceHandle_t handle;
+ handle <<= rtihandle;
+ return handle;
+#else
+ return this->impl ()->get_instance_handle ();
+#endif
+ }
+
+ DDSDomainParticipant *
+ CCM_DDS_DomainParticipant_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_DomainParticipant_i::set_impl (DDSDomainParticipant * dp)
+ {
+ this->impl_ = dp;
+ }
+
+ DDSDomainParticipant *
+ CCM_DDS_DomainParticipant_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.h
new file mode 100644
index 00000000000..b326b2d178e
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipant.h
@@ -0,0 +1,220 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef CIAO_NDDS_PARTICIPANT_H
+#define CIAO_NDDS_PARTICIPANT_H
+
+#include "tao/LocalObject.h"
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+#include "dds4ccm/impl/dds/ndds/InstanceHandle_t.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#include <map>
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DomainParticipant DDSDomainParticipant;
+#endif
+
+#include "tao/LocalObject.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class CCM_DDS_Topic_i;
+
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_DomainParticipant_i :
+ public virtual ::DDS::CCM_DomainParticipant,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_DomainParticipant_i (DDSDomainParticipant * dp);
+
+ /// Destructor
+ virtual ~CCM_DDS_DomainParticipant_i (void);
+
+ virtual ::DDS::Publisher_ptr create_publisher (
+ const ::DDS::PublisherQos & qos,
+ ::DDS::PublisherListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual ::DDS::Publisher_ptr create_publisher_with_profile (
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::PublisherListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+#endif
+
+ virtual ::DDS::ReturnCode_t delete_publisher (::DDS::Publisher_ptr p);
+
+ virtual ::DDS::Subscriber_ptr create_subscriber (
+ const ::DDS::SubscriberQos & qos,
+ ::DDS::SubscriberListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual ::DDS::Subscriber_ptr create_subscriber_with_profile(
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::SubscriberListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+#endif
+
+ virtual ::DDS::ReturnCode_t delete_subscriber (::DDS::Subscriber_ptr s);
+
+ virtual ::DDS::Subscriber_ptr get_builtin_subscriber (void);
+
+ virtual ::DDS::Topic_ptr create_topic (
+ const char * impl_name,
+ const char * type_name,
+ const ::DDS::TopicQos & qos,
+ ::DDS::TopicListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual ::DDS::Topic_ptr create_topic_with_profile (
+ const char * impl_name,
+ const char * type_name,
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::TopicListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+#endif
+
+ virtual ::DDS::ReturnCode_t delete_topic (::DDS::Topic_ptr a_topic);
+
+ virtual ::DDS::Topic_ptr find_topic (
+ const char * impl_name,
+ const ::DDS::Duration_t & timeout);
+
+ virtual ::DDS::TopicDescription_ptr lookup_topicdescription (
+ const char * name);
+
+ virtual ::DDS::ContentFilteredTopic_ptr create_contentfilteredtopic (
+ const char * name,
+ ::DDS::Topic_ptr related_topic,
+ const char * filter_expression,
+ const ::DDS::StringSeq & expression_parameters);
+
+ virtual ::DDS::ReturnCode_t delete_contentfilteredtopic (
+ ::DDS::ContentFilteredTopic_ptr a_contentfilteredtopic);
+
+ virtual ::DDS::MultiTopic_ptr create_multitopic (
+ const char * name,
+ const char * type_name,
+ const char * subscription_expression,
+ const ::DDS::StringSeq & expression_parameters);
+
+ virtual ::DDS::ReturnCode_t delete_multitopic (
+ ::DDS::MultiTopic_ptr a_multitopic);
+
+ virtual ::DDS::ReturnCode_t delete_contained_entities (void);
+
+ virtual ::DDS::ReturnCode_t set_qos (
+ const ::DDS::DomainParticipantQos & qos);
+
+ virtual ::DDS::ReturnCode_t get_qos (
+ ::DDS::DomainParticipantQos & qos);
+
+ virtual ::DDS::ReturnCode_t set_listener (
+ ::DDS::DomainParticipantListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual ::DDS::DomainParticipantListener_ptr get_listener (void);
+
+ virtual ::DDS::ReturnCode_t ignore_participant (
+ DDS_INSTANCE_HANDLE_T_IN handle);
+
+ virtual ::DDS::ReturnCode_t ignore_topic (
+ DDS_INSTANCE_HANDLE_T_IN handle);
+
+ virtual ::DDS::ReturnCode_t ignore_publication (
+ DDS_INSTANCE_HANDLE_T_IN handle);
+
+ virtual ::DDS::ReturnCode_t ignore_subscription (
+ DDS_INSTANCE_HANDLE_T_IN handle);
+
+ virtual ::DDS::DomainId_t get_domain_id (void);
+
+ virtual ::DDS::ReturnCode_t assert_liveliness (void);
+
+ virtual ::DDS::ReturnCode_t set_default_publisher_qos (
+ const ::DDS::PublisherQos & qos);
+
+ virtual ::DDS::ReturnCode_t get_default_publisher_qos (
+ ::DDS::PublisherQos & qos);
+
+ virtual ::DDS::ReturnCode_t set_default_subscriber_qos (
+ const ::DDS::SubscriberQos & qos);
+
+ virtual ::DDS::ReturnCode_t get_default_subscriber_qos (
+ ::DDS::SubscriberQos & qos);
+
+ virtual ::DDS::ReturnCode_t set_default_topic_qos (
+ const ::DDS::TopicQos & qos);
+
+ virtual ::DDS::ReturnCode_t get_default_topic_qos (
+ ::DDS::TopicQos & qos);
+
+ virtual ::DDS::ReturnCode_t get_discovered_participants (
+ ::DDS::InstanceHandleSeq & impl_handles);
+
+ virtual ::DDS::ReturnCode_t get_discovered_participant_data (
+ ::DDS::ParticipantBuiltinTopicData & impl_data,
+ DDS_INSTANCE_HANDLE_T_IN impl_handle);
+
+ virtual ::DDS::ReturnCode_t get_discovered_topics (
+ ::DDS::InstanceHandleSeq & impl_handles);
+
+ virtual ::DDS::ReturnCode_t get_discovered_topic_data (
+ ::DDS::TopicBuiltinTopicData & impl_data,
+ DDS_INSTANCE_HANDLE_T_IN impl_handle);
+
+ virtual ::CORBA::Boolean contains_entity (
+ DDS_INSTANCE_HANDLE_T_IN a_handle);
+
+ virtual ::DDS::ReturnCode_t get_current_time (
+ ::DDS::Time_t & current_time);
+
+ virtual ::DDS::ReturnCode_t enable (void);
+
+ virtual ::DDS::StatusCondition_ptr get_statuscondition (void);
+
+ virtual ::DDS::StatusMask get_status_changes (void);
+
+ virtual DDS_INSTANCE_HANDLE_T_RETN get_instance_handle (void);
+
+ DDSDomainParticipant * get_impl (void);
+
+ void set_impl (DDSDomainParticipant * dp);
+
+ protected:
+ DDSDomainParticipant *impl_;
+
+ DDSDomainParticipant * impl (void);
+
+ private:
+ bool remove_topic (CCM_DDS_Topic_i * topic);
+
+ TAO_SYNCH_MUTEX tps_mutex_;
+ typedef std::map<ACE_CString, CCM_DDS_Topic_i *> Topics;
+ Topics tps_;
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.cpp
new file mode 100644
index 00000000000..3b1908901d2
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.cpp
@@ -0,0 +1,355 @@
+// $Id$
+
+#include "DomainParticipantFactory.h"
+#include "DomainParticipant.h"
+#include "DomainParticipantListener.h"
+
+#include "ndds/DomainParticipantFactoryQos.h"
+#include "ndds/DomainParticipantQos.h"
+
+#include "Utils.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+ typedef ::DDS::DomainParticipantFactory DDSDomainParticipantFactory;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_DomainParticipantFactory_i::CCM_DDS_DomainParticipantFactory_i (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::CCM_DDS_DomainParticipantFactory_i");
+ }
+
+ CCM_DDS_DomainParticipantFactory_i::~CCM_DDS_DomainParticipantFactory_i (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::~CCM_DDS_DomainParticipantFactory_i");
+ }
+
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_DomainParticipantFactory_i::create_participant (::DDS::DomainId_t domain_id,
+ const ::DDS::DomainParticipantQos & qos,
+ ::DDS::DomainParticipantListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::create_participant");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ACE_UNUSED_ARG (qos);
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipantFactory_i::create_participant - "
+ "Creating domain participant for domain <%d>\n",
+ domain_id));
+
+ CCM_DDS_DomainPublisherListener_i *ccm_dds_dpl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_dpl,
+ CCM_DDS_DomainPublisherListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ ACE_CString qos_profile = ACE_TEXT ("default");
+
+ ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard,
+ this->dps_mutex_, CORBA::INTERNAL ());
+ {
+ CCM_DDS_DomainParticipant_i *ccm_dds_dp = this->dps_[qos_profile];
+
+ if (!ccm_dds_dp)
+ {
+ DDSDomainParticipant *part = DDSDomainParticipantFactory::get_instance ()->
+ create_participant (domain_id,
+ DDS_PARTICIPANT_QOS_DEFAULT,
+ ccm_dds_dpl,
+ mask);
+
+ if (!part)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipantFactory_i::create_participant - "
+ "Error: Unable to create DomainParticipant for domain <%d>\n",
+ domain_id));
+ throw CCM_DDS::InternalError (1, 0);
+ }
+
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (part),
+ CORBA::NO_MEMORY ());
+ part->enable ();
+ ccm_dds_dp = dynamic_cast < CCM_DDS_DomainParticipant_i *> (retval.in ());
+ ccm_dds_dp->set_impl (part);
+
+ this->dps_[qos_profile] = ccm_dds_dp;
+
+ return retval._retn ();
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "CCM_DDS_DomainParticipantFactory_i::create_participant - "
+ "Re-using participant for QOS profile <%C> and domain <%d>.\n",
+ qos_profile.c_str (),
+ domain_id));
+ return ::DDS::DomainParticipant::_duplicate (ccm_dds_dp);
+ }
+ }
+
+#else
+ return DDSDomainParticipantFactory::get_instance ()->
+ create_participant (domain_id,
+ qos,
+ a_listener,
+ mask);
+#endif
+ }
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_DomainParticipantFactory_i::create_participant_with_profile (
+ ::DDS::DomainId_t domain_id,
+ const char * library_name,
+ const char * profile_name,
+ ::DDS::DomainParticipantListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::create_participant_with_profile");
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipantFactory_i::create_participant_with_profile - "
+ "Creating domain participant: profile <%C#%C> - domain <%d>\n",
+ library_name, profile_name, domain_id));
+ CCM_DDS_DomainPublisherListener_i *ccm_dds_dpl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_dpl,
+ CCM_DDS_DomainPublisherListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ ACE_CString qos_profile = library_name;
+ qos_profile += ACE_TEXT ("#");
+ qos_profile += profile_name;
+
+ ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard,
+ this->dps_mutex_, CORBA::INTERNAL ());
+ {
+ CCM_DDS_DomainParticipant_i *ccm_dds_dp = this->dps_[qos_profile];
+
+ if (!ccm_dds_dp)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "CCM_DDS_DomainParticipantFactory_i::create_participant_with_profile - "
+ "Creating participant: profile <%C> - domain <%d>\n",
+ qos_profile.c_str (),
+ domain_id));
+ DDSDomainParticipant * part = DDSDomainParticipantFactory::get_instance ()->
+ create_participant_with_profile (domain_id,
+ library_name,
+ profile_name,
+ ccm_dds_dpl,
+ mask);
+ if (!part)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipantFactory_i::create_participant_with_profile - "
+ "Error: Unable to create DomainParticipant\n"));
+ throw CCM_DDS::InternalError (1, 0);
+ }
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (part),
+ CORBA::NO_MEMORY ());
+
+ part->enable ();
+
+ ccm_dds_dp = dynamic_cast < CCM_DDS_DomainParticipant_i *> (retval.in ());
+ ccm_dds_dp->set_impl (part);
+ this->dps_[qos_profile] = ccm_dds_dp;
+ return retval._retn ();
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "CCM_DDS_DomainParticipantFactory_i::create_participant_with_profile - "
+ "Re-using participant for QOS profile <%C> and domain <%d>.\n",
+ qos_profile.c_str (),
+ domain_id));
+ return ::DDS::DomainParticipant::_duplicate (ccm_dds_dp);
+ }
+ }
+ }
+#endif
+
+ bool
+ CCM_DDS_DomainParticipantFactory_i::remove_participant (CCM_DDS_DomainParticipant_i * part)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::remove_participant");
+
+ ACE_GUARD_THROW_EX (TAO_SYNCH_MUTEX, _guard,
+ this->dps_mutex_, CORBA::INTERNAL ());
+
+ if (part->_refcount_value () == 1)
+ {
+ DomainParticipants::iterator pos;
+ for (pos = this->dps_.begin(); pos != this->dps_.end(); ++pos)
+ {
+ if (pos->second == part)
+ {
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipantFactory_i::remove_participant - "
+ "Removing participant for %C from list.\n",
+ pos->first.c_str ()));
+ this->dps_.erase (pos->first);
+ break;
+ }
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipantFactory_i::remove_participant - "
+ "Don't delete participant since it's still used - ref_count <%d>\n",
+ part->_refcount_value ()));
+ return false;
+ }
+ return true;
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipantFactory_i::delete_participant (::DDS::DomainParticipant_ptr a_participant)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::delete_participant");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_DomainParticipant_i *part = dynamic_cast< CCM_DDS_DomainParticipant_i * > (a_participant);
+
+ if (!part)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipantFactory_i::delete_participant - "
+ "Unable to cast provided object reference to servant type, bailing.\n"));
+ return DDS::RETCODE_ERROR;
+ }
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_DomainParticipantFactory_i::delete_participant - "
+ "Successfully casted provided object reference to servant type.\n"));
+
+ ::DDS::ReturnCode_t retval = DDS::RETCODE_OK;
+ if (this->remove_participant (part))
+ {
+ retval = DDSDomainParticipantFactory::get_instance ()->
+ delete_participant (part->get_impl ());
+
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_DomainParticipantFactory_i::delete_participant - "
+ "RTI delete_participant returned non-ok error code %C\n",
+ translate_retcode (retval)));
+ }
+ else DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_DomainParticipantFactory_i::delete_participant - "
+ "Successfully deleted provided participant.\n"));
+ }
+ return retval;
+#else
+ return DDSDomainParticipantFactory::get_instance ()->
+ delete_participant (a_participant);
+#endif
+ }
+
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_DomainParticipantFactory_i::lookup_participant (::DDS::DomainId_t domain_id)
+ {
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDSDomainParticipant* dp = DDSDomainParticipantFactory::get_instance ()->lookup_participant (domain_id);
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (dp),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::DomainParticipant_var dp = DDSDomainParticipantFactory::get_instance ()->lookup_participant (domain_id);
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (dp.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipantFactory_i::set_default_participant_qos (const ::DDS::DomainParticipantQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::set_default_participant_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_DomainParticipantQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return DDSDomainParticipantFactory::get_instance ()->set_default_participant_qos (ccm_dds_qos);
+#else
+ return DDSDomainParticipantFactory::get_instance ()->set_default_participant_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipantFactory_i::get_default_participant_qos (::DDS::DomainParticipantQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::get_default_participant_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_DomainParticipantQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode =
+ DDSDomainParticipantFactory::get_instance ()->get_default_participant_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return DDSDomainParticipantFactory::get_instance ()->get_default_participant_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipantFactory_i::set_qos (const ::DDS::DomainParticipantFactoryQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::set_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_DomainParticipantFactoryQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return DDSDomainParticipantFactory::get_instance ()->set_qos (ccm_dds_qos);
+#else
+ return DDSDomainParticipantFactory::get_instance ()->set_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipantFactory_i::get_qos (::DDS::DomainParticipantFactoryQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::get_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_DomainParticipantFactoryQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode =
+ DDSDomainParticipantFactory::get_instance ()->get_qos (ccm_dds_qos);
+ ccm_dds_qos <<= qos;
+ return retcode;
+#else
+ return DDSDomainParticipantFactory::get_instance ()->get_qos (qos);
+#endif
+ }
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::ReturnCode_t
+ CCM_DDS_DomainParticipantFactory_i::set_default_participant_qos_with_profile (
+ const char * library_name,
+ const char * profile_name)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_DomainParticipantFactory_i::set_default_participant_qos_with_profile");
+
+ return DDSDomainParticipantFactory::get_instance ()->set_default_participant_qos_with_profile (library_name, profile_name);
+ }
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+ ::DDS::DomainParticipantFactory_ptr
+ CCM_DDS_DomainParticipantFactory_i::get_instance (void)
+ {
+ return 0;
+ }
+#endif
+ }
+}
+
+#if defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION)
+template ACE_Singleton<CIAO::DDS4CCM::CCM_DDS_DomainParticipantFactory_i, TAO_SYNCH_MUTEX> *
+ ACE_Singleton<CIAO::DDS4CCM::CCM_DDS_DomainParticipantFactory_i, TAO_SYNCH_MUTEX>::singleton_;
+#endif /* ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.h
new file mode 100644
index 00000000000..4a1439ecba1
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantFactory.h
@@ -0,0 +1,112 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS_RTI_PARTICIPANTFACTORY_H
+#define DDS_RTI_PARTICIPANTFACTORY_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#include "tao/LocalObject.h"
+
+#include "ace/Singleton.h"
+
+#include <map>
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class CCM_DDS_DomainParticipant_i;
+
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_DomainParticipantFactory_i :
+ public virtual ::DDS::CCM_DomainParticipantFactory,
+ public virtual ::CORBA::LocalObject
+ {
+ friend class ACE_Singleton<CCM_DDS_DomainParticipantFactory_i, TAO_SYNCH_MUTEX>;
+
+ private:
+ // Construtor
+ CCM_DDS_DomainParticipantFactory_i (void);
+
+ /// Destructor
+ virtual ~CCM_DDS_DomainParticipantFactory_i (void);
+
+ public:
+#if (CIAO_DDS4CCM_OPENDDS==1)
+ virtual ::DDS::DomainParticipantFactory_ptr get_instance (void);
+#endif
+
+ virtual
+ ::DDS::DomainParticipant_ptr create_participant (::DDS::DomainId_t domain_id,
+ const ::DDS::DomainParticipantQos & qos,
+ ::DDS::DomainParticipantListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual
+ ::DDS::DomainParticipant_ptr create_participant_with_profile (::DDS::DomainId_t domain_id,
+ const char * library_name,
+ const char * profile_name,
+ ::DDS::DomainParticipantListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+#endif
+
+ virtual
+ ::DDS::ReturnCode_t delete_participant (::DDS::DomainParticipant_ptr a_participant);
+
+ virtual
+ ::DDS::DomainParticipant_ptr lookup_participant (::DDS::DomainId_t domain_id);
+
+ virtual
+ ::DDS::ReturnCode_t set_default_participant_qos (const ::DDS::DomainParticipantQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t get_default_participant_qos (::DDS::DomainParticipantQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t set_qos (const ::DDS::DomainParticipantFactoryQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t get_qos (::DDS::DomainParticipantFactoryQos & qos);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual ::DDS::ReturnCode_t set_default_participant_qos_with_profile(
+ const char * library_name,
+ const char * profile_name);
+#endif
+
+ private:
+ bool remove_participant (CCM_DDS_DomainParticipant_i * part);
+
+ TAO_SYNCH_MUTEX dps_mutex_;
+ typedef std::map<ACE_CString, CCM_DDS_DomainParticipant_i *> DomainParticipants;
+ DomainParticipants dps_;
+ private:
+ ACE_UNIMPLEMENTED_FUNC (void operator= (const CCM_DDS_DomainParticipantFactory_i &))
+ ACE_UNIMPLEMENTED_FUNC (CCM_DDS_DomainParticipantFactory_i (const CCM_DDS_DomainParticipantFactory_i &))
+ };
+
+ typedef ACE_Singleton<CCM_DDS_DomainParticipantFactory_i,
+ TAO_SYNCH_MUTEX> Domain_Participant_Factory;
+ }
+}
+
+#define DPFACTORY ::CIAO::DDS4CCM::Domain_Participant_Factory::instance ()
+
+/// Declare a process wide singleton
+DDS4CCM_DDS_IMPL_SINGLETON_DECLARE (ACE_Singleton,
+ ::CIAO::DDS4CCM::CCM_DDS_DomainParticipantFactory_i,
+ TAO_SYNCH_MUTEX)
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.cpp
new file mode 100644
index 00000000000..90d81e1a7cb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.cpp
@@ -0,0 +1,127 @@
+// $Id$
+
+#include "DomainParticipantListener.h"
+#include "DomainParticipant.h"
+
+#include "ndds/SampleLostStatus.h"
+#include "ndds/SubscriptionMatchedStatus.h"
+#include "ndds/RequestedDeadlineMissedStatus.h"
+#include "ndds/SampleRejectedStatus.h"
+#include "ndds/LivelinessChangedStatus.h"
+#include "ndds/RequestedIncompatibleQosStatus.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_DomainPublisherListener_i::CCM_DDS_DomainPublisherListener_i (
+ ::DDS::DomainParticipantListener_ptr p)
+ : impl_ (::DDS::DomainParticipantListener::_duplicate (p))
+ {
+ }
+
+ CCM_DDS_DomainPublisherListener_i::~CCM_DDS_DomainPublisherListener_i (void)
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_inconsistent_topic (
+ ::DDS::Topic_ptr,
+ const ::DDS::InconsistentTopicStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_requested_deadline_missed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedDeadlineMissedStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedIncompatibleQosStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_sample_rejected (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleRejectedStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_liveliness_changed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::LivelinessChangedStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_data_available (
+ ::DDS::DataReader_ptr )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_subscription_matched (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SubscriptionMatchedStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_sample_lost (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleLostStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedDeadlineMissedStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedIncompatibleQosStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_liveliness_lost (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::LivelinessLostStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_publication_matched (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::PublicationMatchedStatus & )
+ {
+ }
+
+ void
+ CCM_DDS_DomainPublisherListener_i::on_data_on_readers (
+ ::DDS::Subscriber_ptr )
+ {
+ }
+
+ ::DDS::DomainParticipantListener_ptr
+ CCM_DDS_DomainPublisherListener_i::get_domainparticipantlistener (void)
+ {
+ return ::DDS::DomainParticipantListener::_duplicate (this->impl_.in ());
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.h
new file mode 100644
index 00000000000..93d2163dfdc
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener.h
@@ -0,0 +1,112 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DOMAINPARTICIPANTLISTENER_H
+#define DDS4CCM_DOMAINPARTICIPANTLISTENER_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DomainParticipantListener DDSDomainParticipantListener;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_DomainPublisherListener_i :
+ public virtual ::DDSDomainParticipantListener
+ {
+ public:
+ /// Constructor
+ CCM_DDS_DomainPublisherListener_i (::DDS::DomainParticipantListener_ptr p);
+
+ /// Destructor
+ virtual ~CCM_DDS_DomainPublisherListener_i (void);
+
+ ::DDS::DomainParticipantListener_ptr get_domainparticipantlistener (void);
+
+ virtual void
+ on_inconsistent_topic (
+ ::DDS::Topic_ptr,
+ const ::DDS::InconsistentTopicStatus & );
+
+ virtual void
+ on_requested_deadline_missed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedDeadlineMissedStatus & );
+
+ virtual void
+ on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedIncompatibleQosStatus & );
+
+ virtual void
+ on_sample_rejected (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleRejectedStatus & );
+
+ virtual void
+ on_liveliness_changed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::LivelinessChangedStatus & );
+
+ virtual void
+ on_data_available (
+ ::DDS::DataReader_ptr );
+
+ virtual void
+ on_subscription_matched (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SubscriptionMatchedStatus & );
+
+ virtual void
+ on_sample_lost (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleLostStatus & );
+
+ virtual void
+ on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedDeadlineMissedStatus & );
+
+ virtual void
+ on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedIncompatibleQosStatus & );
+
+ virtual void
+ on_liveliness_lost (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::LivelinessLostStatus & );
+
+ virtual void
+ on_publication_matched (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::PublicationMatchedStatus & );
+
+ virtual void
+ on_data_on_readers (
+ ::DDS::Subscriber_ptr );
+
+ private:
+ ::DDS::DomainParticipantListener_var impl_;
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.cpp
new file mode 100644
index 00000000000..3649ff9fce7
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.cpp
@@ -0,0 +1,152 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds/DataReaderHandler_T.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#include "tao/ORB_Core.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::DomainParticipantListener_T (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener)
+ : error_listener_ (::CCM_DDS::ConnectorStatusListener::_duplicate (error_listener))
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DomainParticipantListener_T::DomainParticipantListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::~DomainParticipantListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DomainParticipantListener_T::~DomainParticipantListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_inconsistent_topic (
+ ::DDS::Topic_ptr,
+ const ::DDS::InconsistentTopicStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_requested_deadline_missed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedDeadlineMissedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedIncompatibleQosStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_sample_rejected (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleRejectedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_liveliness_changed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::LivelinessChangedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_data_available (
+ ::DDS::DataReader_ptr )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_subscription_matched (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SubscriptionMatchedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_sample_lost (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleLostStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedDeadlineMissedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedIncompatibleQosStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_liveliness_lost (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::LivelinessLostStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_publication_matched (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::PublicationMatchedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_data_on_readers (
+ ::DDS::Subscriber_ptr )
+{
+}
+
+#if (CIAO_DDS4CCM_NDDS==1)
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_reliable_writer_cache_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableWriterCacheChangedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::on_reliable_reader_activity_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableReaderActivityChangedStatus & )
+{
+}
+#endif
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::DomainParticipantListener_T<DDS_TYPE, CCM_TYPE>::get_mask (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DomainParticipantListener_T::get_mask");
+ return 0;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.h
new file mode 100644
index 00000000000..119e223086e
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/DomainParticipantListener_T.h
@@ -0,0 +1,114 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#include "ace/Copy_Disabled.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class DomainParticipantListener_T :
+ public virtual ::DDS::CCM_DomainParticipantListener,
+ public virtual ::CORBA::LocalObject,
+ private virtual ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ DomainParticipantListener_T (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener);
+
+ /// Destructor
+ virtual ~DomainParticipantListener_T (void);
+
+ static ::DDS::StatusMask get_mask (void);
+
+ virtual void
+ on_inconsistent_topic (
+ ::DDS::Topic_ptr,
+ const ::DDS::InconsistentTopicStatus & );
+
+ virtual void
+ on_requested_deadline_missed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedDeadlineMissedStatus & );
+
+ virtual void
+ on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedIncompatibleQosStatus & );
+
+ virtual void
+ on_sample_rejected (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleRejectedStatus & );
+
+ virtual void
+ on_liveliness_changed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::LivelinessChangedStatus & );
+
+ virtual void
+ on_data_available (
+ ::DDS::DataReader_ptr );
+
+ virtual void
+ on_subscription_matched (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SubscriptionMatchedStatus & );
+
+ virtual void
+ on_sample_lost (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleLostStatus & );
+
+ virtual void
+ on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedDeadlineMissedStatus & );
+
+ virtual void
+ on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::OfferedIncompatibleQosStatus & );
+
+ virtual void
+ on_liveliness_lost (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::LivelinessLostStatus & );
+
+ virtual void
+ on_publication_matched (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::PublicationMatchedStatus & );
+
+ virtual void
+ on_data_on_readers (
+ ::DDS::Subscriber_ptr );
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual void on_reliable_writer_cache_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableWriterCacheChangedStatus & );
+
+ virtual void on_reliable_reader_activity_changed (
+ ::DDS::DataWriter_ptr ,
+ const ::DDS::ReliableReaderActivityChangedStatus & );
+#endif
+
+ private:
+ ::CCM_DDS::ConnectorStatusListener_var error_listener_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/DomainParticipantListener_T.cpp"
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp
new file mode 100644
index 00000000000..3debef97c3e
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.cpp
@@ -0,0 +1,556 @@
+// $Id$
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/ndds/Duration_t.h"
+#include "dds4ccm/impl/dds/ndds/SampleInfo.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::Getter_Base_T (void)
+ : reader_ (0),
+ condition_(0),
+ time_out_ (),
+ max_delivered_data_ (0),
+ ws_ (0),
+ rd_condition_ (0),
+ q_condition_ (0)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_Base_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::~Getter_Base_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::~Getter_Base_T");
+ delete this->ws_;
+ this->ws_ = 0;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+typename DDS_TYPE::data_reader *
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::impl (void)
+{
+ if (this->reader_)
+ {
+ return DDS_TYPE::data_reader::narrow (this->reader_->get_impl ());
+ }
+ else
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+bool
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::wait (
+ DDSConditionSeq& active_conditions)
+{
+ DDS_Duration_t timeout;
+ timeout <<= this->time_out_;
+ DDS_ReturnCode_t const retcode = this->ws_->wait (active_conditions, timeout);
+ if (retcode == DDS_RETCODE_TIMEOUT)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("Getter: No data available after timeout.\n")));
+ return false;
+ }
+ return true;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+bool
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::get_many (
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos)
+{
+ instances = 0;
+ ACE_NEW_THROW_EX (instances,
+ typename CCM_TYPE::seq_type,
+ CORBA::NO_MEMORY ());
+ infos = 0;
+ ACE_NEW_THROW_EX (infos,
+ ::CCM_DDS::ReadInfoSeq,
+ CORBA::NO_MEMORY ());
+
+ DDSConditionSeq active_conditions;
+ if (!this->wait (active_conditions))
+ {
+ return false;
+ }
+
+ ::DDS_Long max_samples = this->max_delivered_data_;
+ if (max_samples == 0)
+ {
+ max_samples = DDS_LENGTH_UNLIMITED;
+ }
+
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+ for (::DDS_Long i = 0; i < active_conditions.length(); i++)
+ {
+ if (active_conditions[i] == this->rd_condition_ ||
+ active_conditions[i] == this->q_condition_)
+ {
+ // Check trigger
+ active_conditions[i]->get_trigger_value ();
+
+ // Take read condition
+ DDS_ReturnCode_t retcode = DDS_RETCODE_OK;
+ if (this->q_condition_)
+ {
+ retcode = this->impl ()->read_w_condition (
+ data,
+ sample_info,
+ max_samples,
+ this->q_condition_);
+ }
+ else
+ {
+ retcode = this->impl ()->read_w_condition (
+ data,
+ sample_info,
+ max_samples,
+ this->rd_condition_);
+ }
+
+ if (retcode == DDS_RETCODE_OK && data.length () >= 1)
+ {
+ ::CORBA::ULong number_read = 0;
+ for (::DDS_Long index = 0; index < sample_info.length (); index ++)
+ {
+ if (sample_info[index].valid_data)
+ {
+ ++number_read;
+ }
+ }
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("Getter_Base_T::get_many: ")
+ ACE_TEXT ("read <%d> - valid <%d>\n"),
+ sample_info.length (),
+ number_read));
+ infos->length (number_read);
+ instances->length (number_read);
+ number_read = 0;
+ for (::DDS_Long j = 0; j < data.length (); j ++)
+ {
+ if (sample_info[j].valid_data)
+ {
+ infos->operator[](number_read) <<= sample_info[j];
+ instances->operator[](number_read) = data[j];
+ ++number_read;
+ }
+ }
+ }
+ else
+ {
+ // RETCODE_NO_DATA should be an error
+ // because after a timeout there should be
+ // data.
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_Base_T::get_many - "
+ "Error while reading from DDS: <%C>\n",
+ translate_retcode (retcode)));
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_Base_T::get_many - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ throw CCM_DDS::InternalError (retcode, 1);
+ }
+
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_Base_T::get_many - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ }
+ }
+ return true;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::Duration_t
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::time_out (void)
+{
+ return this->time_out_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::time_out (
+ const ::DDS::Duration_t & time_out)
+{
+ this->time_out_ = time_out;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::CCM_DDS::DataNumber_t
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::max_delivered_data (void)
+{
+ return this->max_delivered_data_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::max_delivered_data (
+ ::CCM_DDS::DataNumber_t max_delivered_data)
+{
+ this->max_delivered_data_ = max_delivered_data;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_ReturnCode_t
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::remove_conditions ()
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::remove_conditions");
+
+ DDS_ReturnCode_t retcode = DDS_RETCODE_OK;
+ if (this->q_condition_)
+ {
+ retcode = this->ws_->detach_condition (this->q_condition_);
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "Getter_Base_T::remove_conditions - "
+ "Unable to detach query condition from waitset.\n"));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "Getter_Base_T::remove_conditions - "
+ "Query condition successfully detached from waitset.\n"));
+
+ retcode = this->impl ()->delete_readcondition (this->q_condition_);
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "Getter_Base_T::remove_conditions - "
+ "Unable to delete query condition from DDSDataReader.\n"));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "Getter_Base_T::remove_conditions - "
+ "Query condition successfully deleted from DDSDataReader.\n"));
+ }
+ }
+ }
+ else
+ {
+ retcode = this->ws_->detach_condition (this->rd_condition_);
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "Getter_Base_T::remove_conditions - "
+ "Unable to detach read condition from waitset.\n"));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "Getter_Base_T::remove_conditions - "
+ "Read condition successfully detached from waitset.\n"));
+ }
+ }
+ retcode = this->impl ()->delete_readcondition (this->rd_condition_);
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "Getter_Base_T::remove_conditions - "
+ "Unable to delete read condition from DDSDataReader.\n"));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "Getter_Base_T::remove_conditions - "
+ "Read condition successfully deleted from DDSDataReader.\n"));
+ }
+ delete this->ws_;
+ this->ws_ = 0;
+
+ return retcode;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+DDS_ReturnCode_t
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::passivate ()
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::passivate");
+ return this->remove_conditions ();
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::create_conditions ()
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::create_conditions");
+
+ // Now create the waitset conditions
+ ACE_NEW_THROW_EX (this->ws_,
+ DDSWaitSet (),
+ CORBA::NO_MEMORY ());
+ this->rd_condition_ = this->impl ()->create_readcondition (DDS_NOT_READ_SAMPLE_STATE,
+ DDS_NEW_VIEW_STATE | DDS_NOT_NEW_VIEW_STATE,
+ DDS_ALIVE_INSTANCE_STATE | DDS_NOT_ALIVE_INSTANCE_STATE);
+ DDS_ReturnCode_t retcode = this->ws_->attach_condition (this->rd_condition_);
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "GETTER: Unable to attach read condition to waitset.\n"));
+ throw CCM_DDS::InternalError (retcode, 1);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::create_querycondition (
+ const char * query,
+ const ::DDS_StringSeq & qp)
+{
+ this->q_condition_ = this->impl ()->create_querycondition (
+ DDS_NOT_READ_SAMPLE_STATE,
+ DDS_NEW_VIEW_STATE | DDS_NOT_NEW_VIEW_STATE,
+ DDS_ALIVE_INSTANCE_STATE,
+ query,
+ qp);
+ if (!this->q_condition_)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Getter_T::create_querycondition - "
+ "Error creating query condition."));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
+ }
+ DDS_ReturnCode_t retcode = this->ws_->detach_condition (this->rd_condition_);
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "Getter_Base_T::create_querycondition - "
+ "Unable to detach read condition from waitset.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
+ }
+ retcode = this->ws_->attach_condition (this->q_condition_);
+ if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "Getter_Base_T::create_querycondition - "
+ "Unable to attach query condition to waitset.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::set_queryparameters (
+ const ::DDS_StringSeq & qp)
+{
+ ::DDS::ReturnCode_t retval = this->q_condition_->set_query_parameters (qp);
+ if (retval != ::DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Getter_T::set_queryparameters - "
+ "Error setting expression_parameters. "
+ "Retval is %C\n",
+ translate_retcode(retval)));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, retval);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::DDS_CCM::Getter_Base_T<DDS_TYPE, CCM_TYPE>::set_impl (
+ CCM_DDS_DataReader_i *reader)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::set_impl");
+
+ if (!reader)
+ {
+ delete this->ws_;
+ this->ws_ = 0;
+ this->reader_ = 0;
+ }
+ else
+ {
+ this->reader_ = reader;
+ this->create_conditions ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+bool
+CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, true>::get_one (
+ typename DDS_TYPE::value_type::_out_type an_instance,
+ ::CCM_DDS::ReadInfo_out info)
+{
+ DDSConditionSeq active_conditions;
+ if (!this->wait (active_conditions))
+ {
+ return false;
+ }
+
+ for (::DDS_Long i = 0; i < active_conditions.length(); i++)
+ {
+ if (active_conditions[i] == this->rd_condition_ ||
+ active_conditions[i] == this->q_condition_)
+ {
+ bool valid_data_read = false;
+
+ while (!valid_data_read)
+ {
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+ DDS_ReturnCode_t retcode = DDS_RETCODE_OK;
+ if (this->q_condition_)
+ {
+ retcode = this->impl ()->read_w_condition (data,
+ sample_info,
+ 1,
+ this->q_condition_);
+ }
+ else
+ {
+ retcode = this->impl ()->read_w_condition (data,
+ sample_info,
+ 1,
+ this->rd_condition_);
+ }
+ if (retcode == DDS_RETCODE_NO_DATA)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, true>::get_one - "
+ "DDS returned DDS_RETCODE_NO_DATA. No data available in DDS.\n"));
+ return false;
+ }
+ else if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, true>::get_one - "
+ "Error while reading from DDS: <%C>\n",
+ translate_retcode (retcode)));
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_T<DDS_TYPE, CCM_TYPE, true>::get_one - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+
+ throw CCM_DDS::InternalError (retcode, 1);
+ }
+ else if (data.length () == 1 &&
+ sample_info[0].valid_data)
+ {
+ info <<= sample_info[0];
+ an_instance = data[0];
+ valid_data_read = true;
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, true>::get_one - "
+ "No valid available in DDS.\n"));
+ }
+ //return the loan of each read.
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_T<DDS_TYPE, CCM_TYPE, true>::get_one - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+bool
+CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, false>::get_one (
+ typename DDS_TYPE::value_type::_out_type an_instance,
+ ::CCM_DDS::ReadInfo_out info)
+{
+ an_instance = 0;
+ ACE_NEW_THROW_EX (an_instance,
+ typename DDS_TYPE::value_type,
+ CORBA::NO_MEMORY ());
+ DDSConditionSeq active_conditions;
+ if (!this->wait (active_conditions))
+ {
+ return false;
+ }
+
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+ for (::DDS_Long i = 0; i < active_conditions.length(); i++)
+ {
+ if (active_conditions[i] == this->rd_condition_ ||
+ active_conditions[i] == this->q_condition_)
+ {
+ bool valid_data_read = false;
+
+ while (!valid_data_read)
+ {
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+ DDS_ReturnCode_t retcode = DDS_RETCODE_OK;
+ if (this->q_condition_)
+ {
+ retcode = this->impl ()->read_w_condition (data,
+ sample_info,
+ 1,
+ this->q_condition_);
+ }
+ else
+ {
+ retcode = this->impl ()->read_w_condition (data,
+ sample_info,
+ 1,
+ this->rd_condition_);
+ }
+ if (retcode == DDS_RETCODE_NO_DATA)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, false>::get_one - "
+ "DDS returned DDS_RETCODE_NO_DATA. No data available in DDS.\n"));
+ return false;
+ }
+ else if (retcode != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, false>::get_one - "
+ "Error while reading from DDS: <%C>\n",
+ translate_retcode (retcode)));
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_T<DDS_TYPE, CCM_TYPE, false>::get_one - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ throw CCM_DDS::InternalError (retcode, 1);
+ }
+ else if (data.length () == 1 &&
+ sample_info[0].valid_data)
+ {
+ info <<= sample_info[0];
+ *an_instance = data[0];
+ valid_data_read = true;
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_T<DDS_TYPE, CCM_TYPE, false>::get_one - "
+ "No valid available in DDS.\n"));
+ }
+ // Return the loan of each read.
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Getter_Base_T::Getter_T<DDS_TYPE, CCM_TYPE, false>::get_one - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h
new file mode 100644
index 00000000000..dcea39a902b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Getter_T.h
@@ -0,0 +1,149 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef GETTER_T_H
+#define GETTER_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::GuardCondition DDSGuardCondition;
+typedef ::DDS::WaitSet DDSWaitSet;
+typedef ::DDS::ReadCondition DDSReadCondition;
+typedef ::DDS::ConditionSeq DDSConditionSeq;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ namespace DDS_CCM
+ {
+ /**
+ * @class Getter_Base_T<DDS_TYPE,CCM_TYPE>
+ *
+ * @brief Templated base class for the Getter port.
+ *
+ * Spec: Get operations are performed with the following parameters
+ * · SampleStateMask: NO_READ,
+ * · ViewStateMask: NEW or NOT_NEW,
+ * · InstanceStateMask: ALIVE or NOT_ALIVE,
+ * · Through the query (if any) of the Reader associated to the port,
+ * · Within the time limit specified in time_out.
+ *
+ * All methods return a boolean as result indicating whether actual data
+ * are provided (TRUE) or if the time-out occurred (FALSE).
+ */
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class Getter_Base_T :
+ public virtual CCM_TYPE::getter_type,
+ public virtual ::CORBA::LocalObject,
+ private virtual ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ Getter_Base_T (void);
+
+ /// Destructor
+ virtual ~Getter_Base_T (void);
+
+ /**
+ * Spec : get_many returns all the available samples
+ * in the limits set by the attribute max_delivered_data.
+ * In case there are more available samples, the first
+ * max_delivered_data are returned. The default value for
+ * that attribute is UNLIMITED (0)
+ */
+ virtual bool get_many (
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos);
+ virtual ::DDS::Duration_t time_out (void);
+ virtual void time_out (const ::DDS::Duration_t & time_out);
+
+ virtual ::CCM_DDS::DataNumber_t max_delivered_data (void);
+ virtual void max_delivered_data (
+ ::CCM_DDS::DataNumber_t max_delivered_data);
+
+ /**
+ * Set the actual pointer to DDS Datareader
+ */
+ void set_impl (CCM_DDS_DataReader_i *reader);
+
+ DDS_ReturnCode_t passivate (void);
+
+ DDS_ReturnCode_t remove_conditions (void);
+
+ void create_querycondition (const char * query,
+ const ::DDS_StringSeq & qp);
+ void set_queryparameters (const ::DDS_StringSeq & qp);
+
+ protected:
+ CCM_DDS_DataReader_i * reader_;
+ DDSQueryCondition * condition_;
+ ::DDS::Duration_t time_out_;
+ ::CCM_DDS::DataNumber_t max_delivered_data_;
+ DDSWaitSet * ws_;
+ DDSReadCondition * rd_condition_;
+ DDSQueryCondition * q_condition_;
+
+ void create_conditions ();
+
+ bool wait (DDSConditionSeq& active_conditions);
+
+ typename DDS_TYPE::data_reader * impl (void);
+ };
+
+ template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+ class Getter_T;
+
+ /**
+ * @brief Implementation of the Getter port for variable sized data types.
+ *
+ */
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class Getter_T <DDS_TYPE, CCM_TYPE, false> :
+ public Getter_Base_T <DDS_TYPE, CCM_TYPE>
+ {
+ public:
+ /**
+ *
+ * @brief get_one implementation for variable sized datatypes.
+ *
+ * Spec : get_one returns the next sample to be gotten.
+ */
+ virtual bool get_one (
+ typename DDS_TYPE::value_type::_out_type an_instance,
+ ::CCM_DDS::ReadInfo_out info);
+ };
+
+ /**
+ * @brief Implementation of the Getter port for fixed sized data types.
+ *
+ */
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class Getter_T <DDS_TYPE, CCM_TYPE, true> :
+ public Getter_Base_T <DDS_TYPE, CCM_TYPE>
+ {
+ public:
+ /**
+ * @brief get_one implementation for fixed sized datatypes.
+ *
+ * Spec : get_one returns the next sample to be gotten.
+ */
+ virtual bool get_one (
+ typename DDS_TYPE::value_type::_out_type an_instance,
+ ::CCM_DDS::ReadInfo_out info);
+ };
+ }
+ }
+}
+
+#include "dds4ccm/impl/dds/Getter_T.cpp"
+
+#endif /* GETTER_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.cpp
new file mode 100644
index 00000000000..cbcd0859bcc
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.cpp
@@ -0,0 +1,73 @@
+// $Id$
+
+#include "dds4ccm/impl/dds/DataWriter.h"
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/ndds/InstanceHandle_t.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, typename BASE_TYPE>
+CIAO::DDS4CCM::InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, BASE_TYPE>::InstanceHandleManager_T (void)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, typename BASE_TYPE>
+CIAO::DDS4CCM::InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, BASE_TYPE>::~InstanceHandleManager_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::InstanceHandleManager_T::~InstanceHandleManager_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, typename BASE_TYPE>
+typename DDS_TYPE::data_writer *
+CIAO::DDS4CCM::InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, BASE_TYPE>::impl (void)
+{
+ if (this->writer_)
+ {
+ return DDS_TYPE::data_writer::narrow (this->writer_->get_impl ());
+ }
+ else
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, typename BASE_TYPE>
+::DDS::InstanceHandle_t
+CIAO::DDS4CCM::InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, BASE_TYPE>::
+ register_instance (const typename DDS_TYPE::value_type & datum)
+{
+ ::DDS::InstanceHandle_t dds_handle;
+ ::DDS_InstanceHandle_t const handle = this->impl ()->register_instance (datum);
+ dds_handle <<= handle;
+ return dds_handle;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, typename BASE_TYPE>
+void
+CIAO::DDS4CCM::InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, BASE_TYPE>::unregister_instance (
+ const typename DDS_TYPE::value_type & datum,
+ const ::DDS::InstanceHandle_t & instance_handle)
+{
+ ::DDS_InstanceHandle_t handle = ::DDS_HANDLE_NIL;
+ handle <<= instance_handle;
+ this->impl ()->unregister_instance (datum, handle);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, typename BASE_TYPE>
+void
+CIAO::DDS4CCM::InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, BASE_TYPE>::set_impl (
+ CCM_DDS_DataWriter_i *writer)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::InstanceHandleManager_T::set_impl");
+
+ if (!writer)
+ {
+ this->writer_ = 0;
+ }
+ else
+ {
+ this->writer_ = writer;
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.h
new file mode 100644
index 00000000000..5a12a7b7a82
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/InstanceHandleManager_T.h
@@ -0,0 +1,51 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef INSTANCE_HANDLEMANGER_T_H
+#define INSTANCE_HANDLEMANGER_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE, typename BASE_TYPE>
+ class InstanceHandleManager_T :
+ public virtual BASE_TYPE,
+ public virtual ::CORBA::LocalObject,
+ private virtual ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ InstanceHandleManager_T (void);
+
+ /// Destructor
+ virtual ~InstanceHandleManager_T (void);
+
+ virtual ::DDS::InstanceHandle_t register_instance (
+ const typename DDS_TYPE::value_type & datum);
+
+ virtual void unregister_instance (
+ const typename DDS_TYPE::value_type & datum,
+ const ::DDS::InstanceHandle_t & instance_handle);
+
+ void set_impl (CCM_DDS_DataWriter_i *writer);
+
+ typename DDS_TYPE::data_writer * impl (void);
+
+ private:
+ CCM_DDS_DataWriter_i *writer_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/InstanceHandleManager_T.cpp"
+
+#endif /* INSTANCE_HANDLEMANGER_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.cpp
new file mode 100644
index 00000000000..d2f6c3d9a4e
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.cpp
@@ -0,0 +1,182 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds/DataReaderHandler_T.h"
+#include "tao/ORB_Core.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::PortStatusListener_T (
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ACE_Reactor* reactor)
+ : port_status_listener_ (::CCM_DDS::PortStatusListener::_duplicate (port_status_listener)),
+ reactor_ (reactor)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PortStatusListener_T::PortStatusListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::~PortStatusListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PortStatusListener_T::~PortStatusListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::on_requested_deadline_missed (
+ ::DDS::DataReader_ptr the_reader,
+ const ::DDS::RequestedDeadlineMissedStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PortStatusListener_T::on_requested_deadline_missed");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PortStatusListener_T::on_requested_deadline_missed: ")
+ ACE_TEXT ("total count <%d> - total change <%d> - ")
+ ACE_TEXT ("last instance handle <length <%l> - isValid <%l>\n"),
+ status.total_count, status.total_count_change,
+ status.last_instance_handle.length, status.last_instance_handle.isValid));
+
+ if (! ::CORBA::is_nil (this->port_status_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnRequestedDeadlineMissedHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnRequestedDeadlineMissedHandler (
+ this->port_status_listener_, the_reader, status));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ ACE_TEXT ("PortStatusListener_T::on_requested_deadline_missed: ")
+ ACE_TEXT ("failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->port_status_listener_->on_requested_deadline_missed (the_reader, status);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("PortStatusListener_T::on_requested_deadline_missed: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG,
+ ACE_TEXT ("PortStatusListener_T::on_requested_deadline_missed: ")
+ ACE_TEXT ("No portstatus listener installed\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::on_sample_lost (
+ ::DDS::DataReader_ptr the_reader,
+ const ::DDS::SampleLostStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PortStatusListener_T::on_sample_lost");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PortStatusListener_T::on_sample_lost: ")
+ ACE_TEXT ("total count <%d> - total change <%d>\n"),
+ status.total_count, status.total_count_change));
+
+ if (! ::CORBA::is_nil (this->port_status_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnSampleLostHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnSampleLostHandler (
+ this->port_status_listener_,
+ the_reader,
+ status));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ ACE_TEXT ("PortStatusListener_T::on_sample_lost: ")
+ ACE_TEXT ("failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->port_status_listener_->on_sample_lost (the_reader, status);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("PortStatusListener_T::on_sample_lost: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG,
+ ACE_TEXT ("PortStatusListener_T::on_sample_lost: ")
+ ACE_TEXT ("No portstatus listener installed\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedIncompatibleQosStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::on_sample_rejected (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleRejectedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::on_liveliness_changed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::LivelinessChangedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::on_data_available (
+ ::DDS::DataReader_ptr )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::on_subscription_matched (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SubscriptionMatchedStatus & )
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::PortStatusListener_T<DDS_TYPE, CCM_TYPE>::get_mask (
+ ::CCM_DDS::PortStatusListener_ptr psl)
+{
+ if (! ::CORBA::is_nil (psl) || CIAO_debug_level >= 10)
+ {
+ return DDS_REQUESTED_DEADLINE_MISSED_STATUS |
+ DDS_SAMPLE_LOST_STATUS;
+ }
+ else
+ {
+ return 0;
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.h
new file mode 100644
index 00000000000..14cbecb1e5a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/PortStatusListener_T.h
@@ -0,0 +1,84 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_PORTSTATUSLISTENER_T_H
+#define DDS4CCM_PORTSTATUSLISTENER_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Reactor;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class PortStatusListener_T :
+ public ::DDS::DataReaderListener,
+ private ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ PortStatusListener_T (
+ ::CCM_DDS::PortStatusListener_ptr port_status_listener,
+ ACE_Reactor* reactor);
+
+ /// Destructor
+ virtual ~PortStatusListener_T (void);
+
+ virtual void on_requested_deadline_missed (
+ ::DDS::DataReader_ptr the_reader,
+ const ::DDS::RequestedDeadlineMissedStatus & status);
+
+ virtual void on_sample_lost (
+ ::DDS::DataReader_ptr the_reader,
+ const ::DDS::SampleLostStatus & status);
+
+ virtual void
+ on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedIncompatibleQosStatus & );
+
+ virtual void
+ on_sample_rejected (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleRejectedStatus & );
+
+ virtual void
+ on_liveliness_changed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::LivelinessChangedStatus & );
+
+ virtual void
+ on_data_available (
+ ::DDS::DataReader_ptr );
+
+ virtual void
+ on_subscription_matched (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SubscriptionMatchedStatus & );
+
+ static ::DDS::StatusMask get_mask (
+ ::CCM_DDS::PortStatusListener_ptr psl);
+
+ private:
+ ::CCM_DDS::PortStatusListener_var port_status_listener_;
+ protected:
+ ACE_Reactor* reactor_;
+
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/PortStatusListener_T.cpp"
+
+#endif /* DDS4CCM_PORTSTATUSLISTENER_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.cpp
new file mode 100644
index 00000000000..6b18f7b07f4
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.cpp
@@ -0,0 +1,456 @@
+// $Id$
+
+#include "Publisher.h"
+#include "PublisherListener.h"
+#include "Topic.h"
+#include "DataWriter.h"
+#include "StatusCondition.h"
+#include "Utils.h"
+#include "DataWriterListener.h"
+
+#include "ndds/InstanceHandle_t.h"
+#include "ndds/Duration_t.h"
+#include "ndds/DataWriterQos.h"
+#include "ndds/PublisherQos.h"
+#include "ndds/TopicQos.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_Publisher_i::CCM_DDS_Publisher_i (DDSPublisher * dw)
+ : impl_ (dw)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::CCM_DDS_Publisher_i");
+ }
+
+ CCM_DDS_Publisher_i::~CCM_DDS_Publisher_i (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::~CCM_DDS_Publisher_i");
+ }
+
+ ::DDS::DataWriter_ptr
+ CCM_DDS_Publisher_i::create_datawriter (::DDS::Topic_ptr a_topic,
+ const ::DDS::DataWriterQos & qos,
+ ::DDS::DataWriterListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::create_datawriter");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ACE_UNUSED_ARG (qos);
+
+ CCM_DDS_Topic_i * topic = dynamic_cast < CCM_DDS_Topic_i * > (a_topic);
+
+ if (!topic)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Publisher_i::create_datawriter - "
+ "Error: Unable to cast provided topic to its servant.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0);
+ }
+
+ DDSDataWriterListener *ccm_dds_drl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_drl,
+ CCM_DDS_DataWriterListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ DDS_DataWriterQos ccm_dds_qos = DDS_DATAWRITER_QOS_DEFAULT;
+ DDSDataWriter *ccm_dds_dw = this->impl ()->create_datawriter (
+ topic->get_impl (),
+ ccm_dds_qos,
+ ccm_dds_drl,
+ mask);
+
+ if (!ccm_dds_dw)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Publisher_i::create_datawriter - "
+ "Error: RTI Topic returned a nil datawriter.\n"));
+ delete ccm_dds_drl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+
+ ::DDS::DataWriter_var retval = ::DDS::DataWriter::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataWriter_i (ccm_dds_dw),
+ CORBA::NO_MEMORY ());
+
+ ccm_dds_dw->enable ();
+ CCM_DDS_DataWriter_i *dw = dynamic_cast< CCM_DDS_DataWriter_i * > (retval.in ());
+ dw->set_impl (ccm_dds_dw);
+
+ return retval._retn ();
+#else
+ return this->impl ()->create_datawriter (
+ a_topic,
+ qos,
+ a_listener,
+ mask);
+#endif
+ }
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::DataWriter_ptr
+ CCM_DDS_Publisher_i::create_datawriter_with_profile (::DDS::Topic_ptr a_topic,
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::DataWriterListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::create_datawriter");
+
+ CCM_DDS_Topic_i * topic = dynamic_cast < CCM_DDS_Topic_i * > (a_topic);
+
+ if (!topic)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Publisher_i::create_datawriter_with_profile - "
+ "Error: Unable to cast provided topic to its servant.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0);
+ }
+
+ DDSDataWriterListener *ccm_dds_drl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_drl,
+ CCM_DDS_DataWriterListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ DDSDataWriter *ccm_dds_dw = this->impl ()->create_datawriter_with_profile (
+ topic->get_impl (),
+ library_name,
+ profile_name,
+ ccm_dds_drl,
+ mask);
+
+ if (!ccm_dds_dw)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Publisher_i::create_datawriter_with_profile - "
+ "Error: RTI Topic returned a nil datawriter.\n"));
+ delete ccm_dds_drl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "CCM_DDS_Publisher_i::create_datareader_with_profile - "
+ "Successfully created datawriter with profile <%C#%C>.\n",
+ library_name,
+ profile_name));
+ }
+
+ ::DDS::DataWriter_var retval = ::DDS::DataWriter::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataWriter_i (ccm_dds_dw),
+ CORBA::NO_MEMORY ());
+
+ ccm_dds_dw->enable ();
+
+ return retval._retn ();
+ }
+#endif
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::delete_datawriter (::DDS::DataWriter_ptr a_datawriter)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::delete_datawriter");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_DataWriter_i *top = dynamic_cast< CCM_DDS_DataWriter_i *> (a_datawriter);
+
+ if (top == 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Publisher_i::delete_datawriter - "
+ "Unable to cast provided object reference to servant.\n"));
+ return ::DDS::RETCODE_BAD_PARAMETER;
+ }
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_Publisher_i::delete_datawriter - "
+ "Successfully casted provided object reference to servant.\n"));
+
+ DDS_ReturnCode_t const retval = this->impl ()->delete_datawriter (top->get_impl ());
+
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Publisher_i::delete_datawriter - "
+ "Error: RTI delete_datawriter returned non-ok error code %C\n",
+ translate_retcode (retval)));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_Publisher_i::delete_datawriter - "
+ "Provided datawriter successfully deleted\n"));
+ }
+
+ return retval;
+#else
+ return this->impl ()->delete_datawriter (a_datawriter);
+#endif
+ }
+
+ ::DDS::DataWriter_ptr
+ CCM_DDS_Publisher_i::lookup_datawriter (const char * impl_name)
+ {
+ ::DDS::DataWriter_var retval = ::DDS::DataWriter::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDataWriter* dw = this->impl ()->lookup_datawriter (impl_name);
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataWriter_i (dw),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::DataWriter_var dw = this->impl ()->lookup_datawriter (impl_name);
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataWriter_i (dw.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::delete_contained_entities (void)
+ {
+ return this->impl ()->delete_contained_entities ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::set_qos (const ::DDS::PublisherQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::set_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_PublisherQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl ()->set_qos (ccm_dds_qos);
+#else
+ return this->impl ()->set_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::get_qos (::DDS::PublisherQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::get_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_PublisherQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ ::DDS::ReturnCode_t retcode = this->impl()->
+ get_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl ()->get_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::set_listener (::DDS::PublisherListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::set_listener");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_PublisherListener_i *ccm_dds_impl_list = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_impl_list,
+ CCM_DDS_PublisherListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ return this->impl ()->set_listener (ccm_dds_impl_list, mask);
+#else
+ return this->impl ()->set_listener (a_listener, mask);
+#endif
+ }
+
+ ::DDS::PublisherListener_ptr
+ CCM_DDS_Publisher_i::get_listener (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::get_listener");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSPublisherListener *ccm_dds_pub_list = this->impl ()->get_listener ();
+ CCM_DDS_PublisherListener_i *list_proxy = dynamic_cast <CCM_DDS_PublisherListener_i *> (ccm_dds_pub_list);
+ if (!list_proxy)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, "CCM_DDS_Publisher_i::get_listener - "
+ "DDS returned a NIL listener.\n"));
+ return ::DDS::PublisherListener::_nil ();
+ }
+ return list_proxy->get_publisher_listener ();
+#else
+ return this->impl ()->get_listener ();
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::suspend_publications (void)
+ {
+ return this->impl ()->suspend_publications ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::resume_publications (void)
+ {
+ return this->impl ()->resume_publications ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::begin_coherent_changes (void)
+ {
+ return this->impl ()->begin_coherent_changes ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::end_coherent_changes (void)
+ {
+ return this->impl ()->end_coherent_changes ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::wait_for_acknowledgments (const ::DDS::Duration_t & max_wait)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_Duration_t ccm_dds_dds_duration;
+ ccm_dds_dds_duration <<= max_wait;
+ return this->impl ()->wait_for_acknowledgments (ccm_dds_dds_duration);
+#else
+ return this->impl ()->wait_for_acknowledgments (max_wait);
+#endif
+ }
+
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_Publisher_i::get_participant (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::get_participant");
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDomainParticipant* p = this->impl ()->get_participant ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::DomainParticipant_var p = this->impl ()->get_participant ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::set_default_datawriter_qos (const ::DDS::DataWriterQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::set_default_datawriter_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataWriterQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl()->set_default_datawriter_qos (ccm_dds_qos);
+#else
+ return this->impl()->set_default_datawriter_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::get_default_datawriter_qos (::DDS::DataWriterQos & qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::get_default_datawriter_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataWriterQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode =
+ this->impl()->get_default_datawriter_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl()->get_default_datawriter_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::copy_from_topic_qos (::DDS::DataWriterQos & a_dataimpl_qos,
+ const ::DDS::TopicQos & a_impl_qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Publisher_i::copy_from_topic_qos");
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataWriterQos ccm_dds_qos;
+ ::DDS_TopicQos ccm_dds_topic_qos;
+
+ ccm_dds_qos <<= a_dataimpl_qos;
+ ccm_dds_topic_qos <<= a_impl_qos;
+ ::DDS::ReturnCode_t const retcode =
+ this->impl()->copy_from_topic_qos (ccm_dds_qos, ccm_dds_topic_qos);
+ a_dataimpl_qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl()->copy_from_topic_qos (a_dataimpl_qos, a_impl_qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Publisher_i::enable (void)
+ {
+ return this->impl ()->enable ();
+ }
+
+ ::DDS::StatusCondition_ptr
+ CCM_DDS_Publisher_i::get_statuscondition (void)
+ {
+ ::DDS::StatusCondition_var retval = ::DDS::StatusCondition::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSStatusCondition* sc = this->impl ()->get_statuscondition ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::StatusCondition_var sc = this->impl ()->get_statuscondition ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::StatusMask
+ CCM_DDS_Publisher_i::get_status_changes (void)
+ {
+ return this->impl ()->get_status_changes ();
+ }
+
+ ::DDS::InstanceHandle_t
+ CCM_DDS_Publisher_i::get_instance_handle (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t const rtihandle = this->impl ()->get_instance_handle ();
+ ::DDS::InstanceHandle_t handle;
+ handle <<= rtihandle;
+ return handle;
+#else
+ return this->impl ()->get_instance_handle ();
+#endif
+ }
+
+ DDSPublisher *
+ CCM_DDS_Publisher_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_Publisher_i::set_impl (DDSPublisher * dw)
+ {
+ this->impl_ = dw;
+ }
+
+ DDSPublisher *
+ CCM_DDS_Publisher_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.h
new file mode 100644
index 00000000000..46705e0f284
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Publisher.h
@@ -0,0 +1,133 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_PUBLISHER_H
+#define DDS4CCM_PUBLISHER_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::Publisher DDSPublisher;
+#endif
+
+#include "tao/LocalObject.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_Publisher_i :
+ public virtual ::DDS::CCM_Publisher,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_Publisher_i (DDSPublisher * dw);
+
+ /// Destructor
+ virtual ~CCM_DDS_Publisher_i (void);
+
+ virtual
+ ::DDS::DataWriter_ptr create_datawriter (::DDS::Topic_ptr a_topic,
+ const ::DDS::DataWriterQos & qos,
+ ::DDS::DataWriterListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual
+ ::DDS::DataWriter_ptr create_datawriter_with_profile (::DDS::Topic_ptr a_topic,
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::DataWriterListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual
+ ::DDS::ReturnCode_t delete_datawriter (::DDS::DataWriter_ptr a_datawriter);
+
+ virtual
+ ::DDS::DataWriter_ptr lookup_datawriter (const char * impl_name);
+
+ virtual
+ ::DDS::ReturnCode_t delete_contained_entities (void);
+
+ virtual
+ ::DDS::ReturnCode_t set_qos (const ::DDS::PublisherQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t get_qos (::DDS::PublisherQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t set_listener (::DDS::PublisherListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual
+ ::DDS::PublisherListener_ptr get_listener (void);
+
+ virtual
+ ::DDS::ReturnCode_t suspend_publications (void);
+
+ virtual
+ ::DDS::ReturnCode_t resume_publications (void);
+
+ virtual
+ ::DDS::ReturnCode_t begin_coherent_changes (void);
+
+ virtual
+ ::DDS::ReturnCode_t end_coherent_changes (void);
+
+ virtual
+ ::DDS::ReturnCode_t wait_for_acknowledgments (const ::DDS::Duration_t & max_wait);
+
+ virtual
+ ::DDS::DomainParticipant_ptr get_participant (void);
+
+ virtual
+ ::DDS::ReturnCode_t set_default_datawriter_qos (const ::DDS::DataWriterQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t get_default_datawriter_qos (::DDS::DataWriterQos & qos);
+
+ virtual
+ ::DDS::ReturnCode_t copy_from_topic_qos (::DDS::DataWriterQos & a_dataimpl_qos,
+ const ::DDS::TopicQos & a_impl_qos);
+
+ virtual
+ ::DDS::ReturnCode_t enable (void);
+
+ virtual
+ ::DDS::StatusCondition_ptr get_statuscondition (void);
+
+ virtual
+ ::DDS::StatusMask get_status_changes (void);
+
+ virtual
+ ::DDS::InstanceHandle_t get_instance_handle (void);
+
+ DDSPublisher * get_impl (void);
+
+ void set_impl (DDSPublisher *p);
+
+ private:
+ DDSPublisher *impl_;
+
+ DDSPublisher *impl (void);
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.cpp
new file mode 100644
index 00000000000..0749c455e56
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.cpp
@@ -0,0 +1,156 @@
+// $Id$
+
+#include "PublisherListener.h"
+#include "Publisher.h"
+#include "DataWriter.h"
+
+#include "ndds/PublicationMatchedStatus.h"
+#include "ndds/LivelinessLostStatus.h"
+#include "ndds/OfferedIncompatibleQosStatus.h"
+#include "ndds/OfferedDeadlineMissedStatus.h"
+#include "ndds/ReliableReaderActivityChangedStatus.h"
+#include "ndds/ReliableWriterCacheChangedStatus.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_PublisherListener_i::CCM_DDS_PublisherListener_i ( ::DDS::PublisherListener_ptr p)
+ : impl_ (::DDS::PublisherListener::_duplicate (p))
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::CCM_DDS_PublisherListener_i");
+ }
+
+ CCM_DDS_PublisherListener_i::~CCM_DDS_PublisherListener_i (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::~CCM_DDS_PublisherListener_i");
+ }
+
+ void
+ CCM_DDS_PublisherListener_i::on_offered_deadline_missed (
+ ::DDSDataWriter* writer,
+ const ::DDS_OfferedDeadlineMissedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::on_offered_deadline_missed");
+
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (writer));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::OfferedDeadlineMissedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_offered_deadline_missed (dds_writer.in (), ddsstatus);
+#else
+ this->impl_->on_offered_deadline_missed (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_PublisherListener_i::on_offered_incompatible_qos (
+ ::DDSDataWriter* writer,
+ const ::DDS_OfferedIncompatibleQosStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::on_offered_incompatible_qos");
+
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (writer));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::OfferedIncompatibleQosStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_offered_incompatible_qos (dds_writer.in (), ddsstatus);
+#else
+ this->impl_->on_offered_incompatible_qos (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_PublisherListener_i::on_liveliness_lost (
+ ::DDSDataWriter* writer,
+ const ::DDS_LivelinessLostStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::on_liveliness_lost");
+
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (writer));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::LivelinessLostStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_liveliness_lost (dds_writer.in (), ddsstatus);
+#else
+ this->impl_->on_liveliness_lost (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_PublisherListener_i::on_publication_matched (
+ ::DDSDataWriter* writer,
+ const ::DDS_PublicationMatchedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::on_publication_matched");
+
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (writer));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::PublicationMatchedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_publication_matched (dds_writer.in (), ddsstatus);
+#else
+ this->impl_->on_publication_matched (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_PublisherListener_i::on_reliable_reader_activity_changed (
+ ::DDSDataWriter *writer,
+ const ::DDS_ReliableReaderActivityChangedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::on_reliable_reader_activity_changed");
+
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (writer));
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::ReliableReaderActivityChangedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_reliable_reader_activity_changed (dds_writer.in (), ddsstatus);
+#else
+ this->impl_->on_reliable_reader_activity_changed (dds_writer.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_PublisherListener_i::on_reliable_writer_cache_changed (
+ ::DDSDataWriter* writer,
+ const ::DDS_ReliableWriterCacheChangedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_PublisherListener_i::on_reliable_writer_cache_changed");
+
+ ::DDS::DataWriter_var dds_writer = ::DDS::DataWriter::_nil ();
+ ACE_NEW (dds_writer,
+ CCM_DDS_DataWriter_i (writer));
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::ReliableWriterCacheChangedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_reliable_writer_cache_changed (dds_writer.in (), ddsstatus);
+#else
+ this->impl_->on_reliable_writer_cache_changed (dds_writer.in (), status);
+#endif
+ }
+
+ ::DDS::PublisherListener_ptr
+ CCM_DDS_PublisherListener_i::get_publisher_listener (void)
+ {
+ return ::DDS::PublisherListener::_duplicate (this->impl_.in ());
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.h b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.h
new file mode 100644
index 00000000000..9f26a421124
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener.h
@@ -0,0 +1,90 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_PUBLISHERLISTENER_H
+#define DDS4CCM_PUBLISHERLISTENER_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::PublisherListener DDSPublisherListener;
+typedef ::DDS::DataWriter DDSDataWriter;
+typedef ::DDS::OfferedDeadlineMissedStatus DDS_OfferedDeadlineMissedStatus;
+typedef ::DDS::OfferedIncompatibleQosStatus DDS_OfferedIncompatibleQosStatus;
+typedef ::DDS::LivelinessLostStatus DDS_LivelinessLostStatus;
+typedef ::DDS::PublicationMatchedStatus DDS_PublicationMatchedStatus;
+typedef ::DDS::ReliableWriterCacheChangedStatus DDS_ReliableWriterCacheChangedStatus;
+#endif
+
+#include "tao/LocalObject.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_PublisherListener_i :
+ public virtual ::DDSPublisherListener
+ {
+ public:
+ /// Constructor
+ CCM_DDS_PublisherListener_i (::DDS::PublisherListener_ptr p);
+
+ /// Destructor
+ virtual ~CCM_DDS_PublisherListener_i (void);
+
+ virtual void
+ on_offered_deadline_missed (
+ ::DDSDataWriter *writer,
+ const ::DDS_OfferedDeadlineMissedStatus & status);
+
+ virtual void
+ on_offered_incompatible_qos (
+ ::DDSDataWriter *writer,
+ const ::DDS_OfferedIncompatibleQosStatus & status);
+
+ virtual void
+ on_liveliness_lost (
+ ::DDSDataWriter *writer,
+ const ::DDS_LivelinessLostStatus & status);
+
+ virtual void
+ on_publication_matched (
+ ::DDSDataWriter *writer,
+ const ::DDS_PublicationMatchedStatus & status);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual void
+ on_reliable_reader_activity_changed (
+ ::DDSDataWriter *writer,
+ const ::DDS_ReliableReaderActivityChangedStatus & status);
+
+ virtual void
+ on_reliable_writer_cache_changed (
+ ::DDSDataWriter *writer,
+ const ::DDS_ReliableWriterCacheChangedStatus & status);
+#endif
+
+ ::DDS::PublisherListener_ptr get_publisher_listener (void);
+ private:
+ ::DDS::PublisherListener_var impl_;
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.cpp
new file mode 100644
index 00000000000..fd298923e7f
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.cpp
@@ -0,0 +1,294 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds/DataReaderHandler_T.h"
+#include "dds4ccm/impl/dds/DDSCallbackStatusHandler.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+#include "tao/ORB_Core.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::PublisherListener_T (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ACE_Reactor* reactor)
+ : error_listener_ (::CCM_DDS::ConnectorStatusListener::_duplicate (error_listener)),
+ reactor_ (reactor)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::PublisherListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::~PublisherListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::~PublisherListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::on_unexpected_status (
+ ::DDS::Entity_ptr entity,
+ ::DDS::StatusKind status_kind)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::on_unexpected_status");
+
+ if (! ::CORBA::is_nil (this->error_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnUnexpectedStatusHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnUnexpectedStatusHandler (
+ this->error_listener_, entity, status_kind));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("PublisherListener_T::failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->error_listener_->on_unexpected_status (entity, status_kind);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG,
+ ACE_TEXT ("PublisherListener_T::on_unexpected_status: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_offered_deadline_missed: ")
+ ACE_TEXT ("No error listener connected\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::OfferedDeadlineMissedStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::on_offered_deadline_missed");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_offered_deadline_missed: ")
+ ACE_TEXT ("total count <%d> - count change <%d> - ")
+ ACE_TEXT ("last instance handle <length <%d> - isValid <%d>\n"),
+ status.total_count, status.total_count_change,
+ status.last_instance_handle.length,
+ status.last_instance_handle.isValid));
+
+ if (! ::CORBA::is_nil (this->error_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnOfferedDeadlineMissedHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnOfferedDeadlineMissedHandler (
+ this->error_listener_, the_Writer, status));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("PublisherListener_T::failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->error_listener_->on_offered_deadline_missed (the_Writer, status);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("PublisherListener_T::on_offered_deadline_missed: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_offered_deadline_missed: ")
+ ACE_TEXT ("No error listener connected\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::OfferedIncompatibleQosStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::on_offered_incompatible_qos");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_offered_incompatible_qos: ")
+ ACE_TEXT ("total count <%d> - total change <%d> - ")
+ ACE_TEXT ("last policy id <%d> - policies "),
+ status.total_count, status.total_count_change,
+ status.last_policy_id));
+ for (CORBA::ULong i = 0; i < status.policies.length (); ++i)
+ {
+ DDS4CCM_DEBUG (10, (LM_DEBUG,
+ ACE_TEXT ("\t\tid <%d> - count <%d>\n"),
+ status.policies[i].policy_id,
+ status.policies[i].count));
+ }
+
+ if (! ::CORBA::is_nil (this->error_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnOfferedIncompatibleQoSHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnOfferedIncompatibleQoSHandler (
+ this->error_listener_, the_Writer, status));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("PublisherListener_T::failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->error_listener_->on_offered_incompatible_qos (the_Writer, status);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("PublisherListener_T::on_offered_incompatible_qos: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_offered_incompatible_qos: ")
+ ACE_TEXT ("No error listener connected\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::on_liveliness_lost (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::LivelinessLostStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::on_liveliness_lost");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_liveliness_lost: ")
+ ACE_TEXT ("total count <%d> - count change <%d>\n"),
+ status.total_count, status.total_count_change));
+
+ this->on_unexpected_status (the_Writer, ::DDS::LIVELINESS_LOST_STATUS);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::on_publication_matched (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::PublicationMatchedStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::on_publication_matched");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_publication_matched: ")
+ ACE_TEXT ("total count <%d> - count change <%d> - ")
+ ACE_TEXT ("current count <%d> - current count change <%d> ")
+ ACE_TEXT ("last publication handle <length <%d> - isValid <%d>\n"),
+ status.total_count, status.total_count_change,
+ status.current_count, status.current_count_change,
+ status.last_subscription_handle.length,
+ status.last_subscription_handle.isValid));
+
+ this->on_unexpected_status (the_Writer, ::DDS::PUBLICATION_MATCHED_STATUS);
+}
+
+#if (CIAO_DDS4CCM_NDDS==1)
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::on_reliable_writer_cache_changed (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::ReliableWriterCacheChangedStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::on_reliable_writer_cache_changed");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_reliable_writer_cache_changed: ")
+ ACE_TEXT ("empty_reliable_writer_cache.total_count <%d> - ")
+ ACE_TEXT ("empty_reliable_writer_cache.total_count_change <%d> - ")
+ ACE_TEXT ("full_reliable_writer_cache.total_count <%d> - ")
+ ACE_TEXT ("full_reliable_writer_cache.total_count_change <%d> - ")
+ ACE_TEXT ("low_watermark_reliable_writer_cache.total_count <%d> - ")
+ ACE_TEXT ("low_watermark_reliable_writer_cache.total_count_change <%d> - ")
+ ACE_TEXT ("high_watermark_reliable_writer_cache.total_count <%d> - ")
+ ACE_TEXT ("high_watermark_reliable_writer_cache.total_count_change <%d> - ")
+ ACE_TEXT ("unacknowledged_sample_count <%d> - ")
+ ACE_TEXT ("unacknowledged_sample_count_peak <%d>\n"),
+ status.empty_reliable_writer_cache.total_count,
+ status.empty_reliable_writer_cache.total_count_change,
+ status.full_reliable_writer_cache.total_count,
+ status.full_reliable_writer_cache.total_count_change,
+ status.low_watermark_reliable_writer_cache.total_count,
+ status.low_watermark_reliable_writer_cache.total_count_change,
+ status.high_watermark_reliable_writer_cache.total_count,
+ status.high_watermark_reliable_writer_cache.total_count_change,
+ status.unacknowledged_sample_count,
+ status.unacknowledged_sample_count_peak));
+
+ this->on_unexpected_status (the_Writer, ::DDS::RELIABLE_WRITER_CACHE_CHANGED_STATUS);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::on_reliable_reader_activity_changed (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::ReliableReaderActivityChangedStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::PublisherListener_T::on_reliable_reader_activity_changed");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("PublisherListener_T::on_reliable_reader_activity_changed: ")
+ ACE_TEXT ("active count <%d> - active change <%d> - ")
+ ACE_TEXT ("not active count <%d> - inactive count change <%d>")
+ ACE_TEXT ("last instance handle <length <%d> - isValid <%d>\n"),
+ status.active_count, status.active_count_change,
+ status.inactive_count, status.inactive_count_change,
+ status.last_instance_handle.length,
+ status.last_instance_handle.isValid));
+
+ this->on_unexpected_status (the_Writer, ::DDS::RELIABLE_READER_ACTIVITY_CHANGED_STATUS);
+}
+#endif
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::PublisherListener_T<DDS_TYPE, CCM_TYPE>::get_mask (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener)
+{
+ if (! ::CORBA::is_nil (error_listener) || CIAO_debug_level >= 10)
+ {
+ return ::DDS::OFFERED_DEADLINE_MISSED_STATUS |
+ ::DDS::OFFERED_INCOMPATIBLE_QOS_STATUS |
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::RELIABLE_WRITER_CACHE_CHANGED_STATUS |
+ ::DDS::RELIABLE_READER_ACTIVITY_CHANGED_STATUS |
+#endif
+ ::DDS::LIVELINESS_LOST_STATUS |
+ ::DDS::PUBLICATION_MATCHED_STATUS;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.h
new file mode 100644
index 00000000000..e352c86084c
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/PublisherListener_T.h
@@ -0,0 +1,83 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS_PUBLISHERLISTENER_T_H_
+#define DDS_PUBLISHERLISTENER_T_H_
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+#include "ace/Copy_Disabled.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Reactor;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class PublisherListener_T :
+ public ::DDS::PublisherListener,
+ private ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ PublisherListener_T (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ACE_Reactor* reactor);
+
+ virtual void on_offered_deadline_missed (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::OfferedDeadlineMissedStatus & status);
+
+ virtual void on_liveliness_lost (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::LivelinessLostStatus & status);
+
+ virtual void on_offered_incompatible_qos (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::OfferedIncompatibleQosStatus & status);
+
+ virtual void on_publication_matched (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::PublicationMatchedStatus & status);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual void on_reliable_writer_cache_changed (
+ ::DDS::DataWriter_ptr the_writer,
+ const ::DDS::ReliableWriterCacheChangedStatus & status);
+
+ virtual void on_reliable_reader_activity_changed (
+ ::DDS::DataWriter_ptr the_Writer,
+ const ::DDS::ReliableReaderActivityChangedStatus & status);
+#endif
+
+ /// Destructor
+ virtual ~PublisherListener_T (void);
+
+ static ::DDS::StatusMask get_mask (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener);
+
+ private:
+ virtual void on_unexpected_status (
+ ::DDS::Entity_ptr entity,
+ ::DDS::StatusKind status_kind);
+
+ ::CCM_DDS::ConnectorStatusListener_var error_listener_;
+
+ ACE_Reactor* reactor_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/PublisherListener_T.cpp"
+
+#endif /* DDS_PUBLISHERLISTENER_T_H_ */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.cpp
new file mode 100644
index 00000000000..3209ccc6149
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.cpp
@@ -0,0 +1,134 @@
+// $Id$
+
+#include "QueryCondition.h"
+#include "Subscriber.h"
+#include "DataReader.h"
+
+#include "ndds/StringSeq.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_QueryCondition_i::CCM_DDS_QueryCondition_i (DDSQueryCondition * qc)
+ : impl_ (qc)
+ {
+ }
+
+ CCM_DDS_QueryCondition_i::~CCM_DDS_QueryCondition_i (void)
+ {
+ }
+
+ ::CORBA::Boolean
+ CCM_DDS_QueryCondition_i::get_trigger_value (void)
+ {
+ return this->impl ()->get_trigger_value ();
+ }
+
+ ::DDS::SampleStateMask
+ CCM_DDS_QueryCondition_i::get_sample_state_mask (void)
+ {
+ return this->impl ()->get_sample_state_mask ();
+ }
+
+ ::DDS::ViewStateMask
+ CCM_DDS_QueryCondition_i::get_view_state_mask (void)
+ {
+ return this->impl ()->get_view_state_mask ();
+ }
+
+ ::DDS::InstanceStateMask
+ CCM_DDS_QueryCondition_i::get_instance_state_mask (void)
+ {
+ return this->impl ()->get_instance_state_mask ();
+ }
+
+ ::DDS::DataReader_ptr
+ CCM_DDS_QueryCondition_i::get_datareader (void)
+ {
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDSDataReader* reader = this->impl ()->get_datareader ();
+ if (reader)
+ {
+ ACE_NEW_THROW_EX (dds_reader,
+ CCM_DDS_DataReader_i (reader),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::DataReader_var reader = this->impl ()->get_datareader ();
+ if (! ::CORBA::is_nil (reader.in ()))
+ {
+ ACE_NEW_THROW_EX (dds_reader,
+ CCM_DDS_DataReader_i (reader.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return dds_reader._retn ();
+ }
+
+ char *
+ CCM_DDS_QueryCondition_i::get_query_expression (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ return ::CORBA::string_dup (this->impl ()->get_query_expression ());
+#else
+ return this->impl ()->get_query_expression ();
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_QueryCondition_i::get_query_parameters (
+ ::DDS::StringSeq & query_parameters)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_StringSeq parameters;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_query_parameters (parameters);
+ query_parameters <<= parameters;
+ return retval;
+#else
+ return this->impl ()->get_query_parameters (query_parameters);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_QueryCondition_i::set_query_parameters (
+ const ::DDS::StringSeq & query_parameters)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_StringSeq parameters;
+ parameters <<= query_parameters;
+ return this->impl ()->set_query_parameters (parameters);
+#else
+ return this->impl ()->set_query_parameters (query_parameters);
+#endif
+ }
+
+ DDSQueryCondition *
+ CCM_DDS_QueryCondition_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_QueryCondition_i::set_impl (DDSQueryCondition * dw)
+ {
+ this->impl_ = dw;
+ }
+
+ DDSQueryCondition *
+ CCM_DDS_QueryCondition_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.h b/modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.h
new file mode 100644
index 00000000000..959101a3d6e
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/QueryCondition.h
@@ -0,0 +1,76 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_QUERYCONDITION_H
+#define DDS4CCM_QUERYCONDITION_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::QueryCondition DDSQueryCondition;
+#endif
+
+#include "tao/LocalObject.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_QueryCondition_i :
+ public virtual ::DDS::CCM_QueryCondition,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_QueryCondition_i (DDSQueryCondition * qc);
+
+ /// Destructor
+ virtual ~CCM_DDS_QueryCondition_i (void);
+
+ virtual ::CORBA::Boolean get_trigger_value (void);
+
+ virtual ::DDS::SampleStateMask get_sample_state_mask (void);
+
+ virtual ::DDS::ViewStateMask get_view_state_mask (void);
+
+ virtual ::DDS::InstanceStateMask get_instance_state_mask (void);
+
+ virtual ::DDS::DataReader_ptr get_datareader (void);
+
+ virtual char *get_query_expression (void);
+
+ virtual ::DDS::ReturnCode_t
+ get_query_parameters (::DDS::StringSeq & query_parameters);
+
+ virtual ::DDS::ReturnCode_t
+ set_query_parameters (const ::DDS::StringSeq & query_parameters);
+
+ DDSQueryCondition * get_impl (void);
+
+ void set_impl (DDSQueryCondition * qc);
+
+ private:
+ DDSQueryCondition * impl_;
+
+ DDSQueryCondition * impl ();
+ };
+ }
+}
+
+#endif /* DDS4CCM_QUERYCONDITION_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.cpp
new file mode 100644
index 00000000000..e8459b51e0a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.cpp
@@ -0,0 +1,80 @@
+// $Id$
+
+#include "ReadCondition.h"
+#include "DataReader.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_ReadCondition_i::CCM_DDS_ReadCondition_i (DDSReadCondition * rc)
+ : impl_ (rc)
+ {
+ }
+
+ CCM_DDS_ReadCondition_i::~CCM_DDS_ReadCondition_i (void)
+ {
+ }
+
+ ::CORBA::Boolean
+ CCM_DDS_ReadCondition_i::get_trigger_value (void)
+ {
+ return this->impl ()->get_trigger_value ();
+ }
+
+ ::DDS::SampleStateMask
+ CCM_DDS_ReadCondition_i::get_sample_state_mask (void)
+ {
+ return this->impl ()->get_sample_state_mask ();
+ }
+
+ ::DDS::ViewStateMask
+ CCM_DDS_ReadCondition_i::get_view_state_mask (void)
+ {
+ return this->impl ()->get_view_state_mask ();
+ }
+
+ ::DDS::InstanceStateMask
+ CCM_DDS_ReadCondition_i::get_instance_state_mask (void)
+ {
+ return this->impl ()->get_instance_state_mask ();
+ }
+
+ ::DDS::DataReader_ptr
+ CCM_DDS_ReadCondition_i::get_datareader (void)
+ {
+ ::DDS::DataReader_var retval = ::DDS::DataReader::_nil ();
+ ::DDSDataReader* rd = this->impl ()->get_datareader ();
+ if (rd)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataReader_i (rd),
+ CORBA::NO_MEMORY ());
+ }
+ return retval._retn ();
+ }
+
+ DDSReadCondition *
+ CCM_DDS_ReadCondition_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_ReadCondition_i::set_impl (DDSReadCondition * rc)
+ {
+ this->impl_ = rc;
+ }
+
+ DDSReadCondition *
+ CCM_DDS_ReadCondition_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.h
new file mode 100644
index 00000000000..de289f58c05
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ReadCondition.h
@@ -0,0 +1,68 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_READCONDITION_H
+#define DDS4CCM_READCONDITION_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::ReadCondition DDSReadCondition;
+#endif
+
+#include "tao/LocalObject.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_ReadCondition_i :
+ public virtual ::DDS::CCM_ReadCondition,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_ReadCondition_i (DDSReadCondition * rc);
+
+ /// Destructor
+ virtual ~CCM_DDS_ReadCondition_i (void);
+
+ virtual ::CORBA::Boolean get_trigger_value (void);
+
+ virtual ::DDS::SampleStateMask get_sample_state_mask (void);
+
+ virtual ::DDS::ViewStateMask get_view_state_mask (void);
+
+ virtual ::DDS::InstanceStateMask get_instance_state_mask (void);
+
+ virtual ::DDS::DataReader_ptr get_datareader (void);
+
+ DDSReadCondition * get_impl (void);
+
+ void set_impl (DDSReadCondition * rc);
+
+ private:
+ DDSReadCondition *impl_;
+
+ DDSReadCondition * impl (void);
+ };
+ }
+}
+
+#endif /* DDS4CCM_READCONDITION_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp
new file mode 100644
index 00000000000..ecfc048b600
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.cpp
@@ -0,0 +1,682 @@
+// $Id$
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/dds/DataReaderListener_T.h"
+#include "dds4ccm/impl/dds/Utils.h"
+#include "dds4ccm/impl/dds/Subscriber.h"
+#include "dds4ccm/impl/dds/QueryCondition.h"
+
+#include "dds4ccm/impl/dds/ndds/SampleInfo.h"
+#include "dds4ccm/impl/dds/ndds/StringSeq.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::Reader_T (void)
+ : reader_ (0),
+ dds_get_ (0),
+ library_name_ (""),
+ profile_name_ ("")
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::Reader_T");
+ #if (DDS4CCM_USES_QUERY_CONDITION==1)
+ this->qc_ = 0;
+ #else
+ this->cft_ = 0;
+ #endif
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::~Reader_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::~Reader_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+typename DDS_TYPE::data_reader *
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::impl (void)
+{
+ if (this->reader_)
+ {
+ return DDS_TYPE::data_reader::narrow (this->reader_->get_impl ());
+ }
+ else
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+}
+
+// For the requirement : 'samples ordered by instances' the following settings are necessary:
+// ordered_access -> true and DDS_INSTANCE_PRESENTATION_QOS (default) .
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+CORBA::ULong
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::get_nr_valid_samples (
+ const DDS_SampleInfoSeq& sample_info,
+ bool determine_last)
+{
+ CORBA::ULong nr_of_samples = 0;
+ for (::DDS_Long i = 0 ; i < sample_info.length(); ++i)
+ {
+ if (determine_last)
+ {
+ if (sample_info[i].sample_rank == 0 && sample_info[i].valid_data)
+ {
+ ++nr_of_samples;
+ }
+ }
+ else if (sample_info[i].valid_data)
+ {
+ ++nr_of_samples;
+ }
+ }
+ return nr_of_samples;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::read_without_instance (
+ typename DDS_TYPE::dds_seq_type & data,
+ DDS_SampleInfoSeq & sample_info)
+{
+ DDS_ReturnCode_t retval = DDS_RETCODE_ERROR;
+#if (DDS4CCM_USES_QUERY_CONDITION==1)
+ if (this->qc_)
+ {
+ retval = this->impl ()->read_w_condition (data,
+ sample_info,
+ DDS_LENGTH_UNLIMITED,
+ this->qc_);
+ }
+ else
+ {
+#endif
+ retval = this->impl ()->read (data,
+ sample_info,
+ DDS_LENGTH_UNLIMITED,
+ DDS_READ_SAMPLE_STATE | DDS_NOT_READ_SAMPLE_STATE,
+ DDS_NEW_VIEW_STATE | DDS_NOT_NEW_VIEW_STATE,
+ DDS_ALIVE_INSTANCE_STATE);
+#if (DDS4CCM_USES_QUERY_CONDITION==1)
+ }
+#endif
+ if (retval != DDS_RETCODE_OK && retval != DDS_RETCODE_NO_DATA)
+ {
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Reader_T::read_without_instance - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("CIAO::DDS4CCM::DDS_CCM::Reader_T::read_without_instance - ")
+ ACE_TEXT ("retval is %C\n"), translate_retcode(retval)));
+ throw ::CCM_DDS::InternalError (retval, 0);
+ }
+}
+
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::read_last (
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos)
+{
+ // This function has to return the last sample of all instances
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+
+ this->read_without_instance (data, sample_info);
+
+ typename CCM_TYPE::seq_type * inst_seq = 0;
+ ACE_NEW_THROW_EX (inst_seq,
+ typename CCM_TYPE::seq_type,
+ CORBA::NO_MEMORY ());
+ ::CCM_DDS::ReadInfoSeq * infoseq = 0;
+ ACE_NEW_THROW_EX (infoseq,
+ ::CCM_DDS::ReadInfoSeq,
+ CORBA::NO_MEMORY ());
+
+ CORBA::ULong const nr_of_last_samples = this->get_nr_valid_samples (sample_info, true);
+
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("CIAO::DDS4CCM::DDS_CCM::Reader_T::read_last - ")
+ ACE_TEXT ("total number of samples <%u> - ")
+ ACE_TEXT ("last number of samples <%u>\n"),
+ data.length(),
+ nr_of_last_samples));
+ CORBA::ULong ix = 0;
+
+ infoseq->length (nr_of_last_samples);
+ inst_seq->length (nr_of_last_samples);
+
+ // We need only the last sample of each instance
+ for (::DDS_Long i = 0 ; i < sample_info.length(); ++i)
+ {
+ if((sample_info[i].sample_rank == 0) && (sample_info[i].valid_data))
+ {
+ (*infoseq)[ix] <<= sample_info[i];
+ (*inst_seq)[ix] = data[i];
+ ++ix;
+ }
+ }
+
+ // Return the loan
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Reader_T::read_last - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ infos = infoseq;
+ instances = inst_seq;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::read_all (
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos)
+{
+ // This function has to return all samples of all instances
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+
+ this->read_without_instance (data, sample_info);
+
+ CORBA::ULong const nr_of_valid_samples = this->get_nr_valid_samples (sample_info);
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("CIAO::DDS4CCM::DDS_CCM::Reader_T::read_all - ")
+ ACE_TEXT ("total number of samples <%u> - ")
+ ACE_TEXT ("valid number of samples <%u>\n"),
+ data.length (),
+ nr_of_valid_samples));
+
+ typename CCM_TYPE::seq_type * inst_seq = 0;
+ ACE_NEW_THROW_EX (inst_seq,
+ typename CCM_TYPE::seq_type,
+ CORBA::NO_MEMORY ());
+ ::CCM_DDS::ReadInfoSeq * infoseq = 0;
+ ACE_NEW_THROW_EX (infoseq,
+ ::CCM_DDS::ReadInfoSeq,
+ CORBA::NO_MEMORY ());
+
+ infoseq->length (nr_of_valid_samples);
+ inst_seq->length (nr_of_valid_samples);
+
+ CORBA::ULong ix = 0;
+
+ for (::DDS_Long i = 0 ; i < sample_info.length(); ++i)
+ {
+ if(sample_info[i].valid_data)
+ {
+ (*infoseq)[ix] <<= sample_info[i];
+ (*inst_seq)[ix] = data[i];
+ ++ix;
+ }
+ }
+
+ // Return the loan
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Reader_T::read_all - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+
+ infos = infoseq;
+ instances = inst_seq;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_InstanceHandle_t
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::check_handle (
+ const typename DDS_TYPE::value_type& an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle)
+{
+ DDS_InstanceHandle_t hnd = ::DDS_HANDLE_NIL;
+ hnd <<= instance_handle;
+
+ DDS_InstanceHandle_t const lookup_hnd =
+ this->impl ()->lookup_instance (an_instance);
+ if (!DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL) &&
+ !DDS_InstanceHandle_equals (&hnd, &lookup_hnd))
+ {
+ throw ::CCM_DDS::InternalError (0, 0);
+ }
+ if (DDS_InstanceHandle_equals (&lookup_hnd, &::DDS_HANDLE_NIL))
+ {
+ throw ::CCM_DDS::NonExistent ();
+ }
+ return lookup_hnd;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::read_with_instance (
+ typename DDS_TYPE::dds_seq_type & data,
+ const ::DDS_InstanceHandle_t & lookup_hnd,
+ DDS_SampleInfoSeq & sample_info)
+{
+ DDS4CCM_DEBUG (6, (LM_INFO, ACE_TEXT ("CIAO::DDS4CCM::DDS_CCM::Reader_T::read_with_instance - ")
+ ACE_TEXT ("Reading with instance.\n")));
+ DDS_ReturnCode_t const retval = this->impl ()->read_instance (
+ data,
+ sample_info,
+ DDS_LENGTH_UNLIMITED,
+ lookup_hnd,
+ DDS_READ_SAMPLE_STATE | DDS_NOT_READ_SAMPLE_STATE ,
+ DDS_NEW_VIEW_STATE | DDS_NOT_NEW_VIEW_STATE,
+ DDS_ALIVE_INSTANCE_STATE);
+ if (retval != DDS_RETCODE_OK && retval != DDS_RETCODE_NO_DATA)
+ {
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Reader_T::read_with_instance - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+ DDS4CCM_ERROR (1, (LM_ERROR, ACE_TEXT ("CIAO::DDS4CCM::DDS_CCM::Reader_T::read_with_instance - ")
+ ACE_TEXT ("retval is %C\n"), translate_retcode(retval)));
+ throw ::CCM_DDS::InternalError (retval, 0);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::read_one_last (
+ typename DDS_TYPE::value_type& an_instance,
+ ::CCM_DDS::ReadInfo_out info,
+ const ::DDS::InstanceHandle_t & instance_handle)
+{
+ DDS_InstanceHandle_t const lookup_hnd = this->check_handle (an_instance, instance_handle);
+
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+
+ // For now, only read with instance...
+ this->read_with_instance (data, lookup_hnd, sample_info);
+
+ ::DDS_Long sample = data.length();
+ DDS4CCM_DEBUG (6, (LM_INFO,
+ ACE_TEXT ("CIAO::DDS4CCM::DDS_CCM::Reader_T::read_one_last - ")
+ ACE_TEXT ("total number of samples <%u>\n"),
+ sample));
+ while (sample >= 0 && !sample_info[sample-1].valid_data)
+ {
+ --sample;
+ }
+ if (sample >= 0)
+ {
+ if(sample_info[sample-1].valid_data)
+ {
+ an_instance = data[sample-1];
+ info <<= sample_info[sample-1];
+ }
+ }
+ // Return the loan
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Reader_T::read_one_last - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::read_one_all (
+ const typename DDS_TYPE::value_type& an_instance,
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos,
+ const ::DDS::InstanceHandle_t & instance_handle)
+{
+ DDS_InstanceHandle_t const lookup_hnd =
+ this->check_handle (an_instance, instance_handle);
+
+ DDS_SampleInfoSeq sample_info;
+ typename DDS_TYPE::dds_seq_type data;
+
+ this->read_with_instance (data, lookup_hnd, sample_info);
+
+ // Count the number of valid samples
+ CORBA::ULong const nr_of_valid_samples = this->get_nr_valid_samples (sample_info);
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("CIAO::DDS4CCM::DDS_CCM::Reader_T::read_all - ")
+ ACE_TEXT ("total number of samples <%u> - ")
+ ACE_TEXT ("valid number of samples <%u>\n"),
+ data.length (),
+ nr_of_valid_samples));
+
+ typename CCM_TYPE::seq_type * inst_seq = 0;
+ ACE_NEW_THROW_EX (inst_seq,
+ typename CCM_TYPE::seq_type (nr_of_valid_samples),
+ CORBA::NO_MEMORY ());
+ ::CCM_DDS::ReadInfoSeq * infoseq = 0;
+ ACE_NEW_THROW_EX (infoseq,
+ ::CCM_DDS::ReadInfoSeq (nr_of_valid_samples),
+ CORBA::NO_MEMORY ());
+
+ infoseq->length (nr_of_valid_samples);
+ inst_seq->length (nr_of_valid_samples);
+
+ // Copy the valid samples
+ CORBA::ULong ix = 0;
+ for (::DDS_Long i = 0 ; i < sample_info.length(); ++i)
+ {
+ if(sample_info[i].valid_data)
+ {
+ (*infoseq)[ix] <<= sample_info[i];
+ (*inst_seq)[ix] = data[i];
+ ++ix;
+ }
+ }
+
+ // Return the loan
+ DDS_ReturnCode_t const retval = this->impl ()->return_loan (data, sample_info);
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ "CIAO::DDS4CCM::DDS_CCM::Reader_T::read_one_all - "
+ "Error returning loan to DDS - <%C>\n",
+ translate_retcode (retval)));
+ }
+
+ infos = infoseq;
+ instances = inst_seq;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::create_contentfilteredtopic (
+ const ::CCM_DDS::QueryFilter & filter,
+ ::DDSSubscriber * sub)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::create_contentfilteredtopic");
+
+ // To create a ContentFilteredTopic we need a DDSTopic.
+ // Since a ContentFilteredTopic is created on the DomainParticipant,
+ // we need to obtain the DomainParticipant through the
+ // Subscriber.
+ ::DDSDomainParticipant * dp = sub->get_participant ();
+ if (!dp)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::create_contentfilteredtopic - "
+ "Unable to get the Participant from the DDS Subscriber\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
+ }
+ // Now, get the topic.
+ ::DDSTopicDescription * td = this->reader_->get_impl ()->get_topicdescription ();
+ if (!td)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::create_contentfilteredtopic - "
+ "Unable to get the TopicDescription from the DDS DomainParticipant\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 2);
+ }
+ ::DDSTopic * tp = ::DDSTopic::narrow (td);
+ if (!tp)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::create_contentfilteredtopic - "
+ "Unable to narrow the DDS TopicDescription to a DDS Topic\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 3);
+ }
+ // Now create the ContentFilteredTopic
+ DDS_StringSeq params;
+ params <<= filter.query_parameters;
+ this->cft_ = dp->create_contentfilteredtopic (
+ "DDS4CCMContentFilteredTopic",
+ tp,
+ filter.query,
+ params);
+ if (!this->cft_)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::create_contentfilteredtopic - "
+ "Error: Unable to create ContentFilteredTopic.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 4);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::delete_datareader (
+ ::DDSSubscriber * sub)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::delete_datareader");
+ DDS_ReturnCode_t const retval = sub->delete_datareader (this->impl ());
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::delete_datareader - "
+ "Unable to delete original DataReader. "
+ "Retval is %C\n",
+ translate_retcode(retval)));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::create_filter (
+ const ::CCM_DDS::QueryFilter & filter)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::create_filter");
+
+ // we need to use the DDS entities direct since we're not allowed
+ // to change the CORBA interfaces. These are known to component
+ // the end user has created.
+
+ // To set a ContentFilteredTopic on a DataReader, the DataReader
+ // should be recreated. Since the Getter uses the same DataReader,
+ // the original DataReader should not be destroyed.
+ ::DDSSubscriber * sub = this->impl ()->get_subscriber ();
+ if (!sub)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::create_filter - "
+ "Unable to get the Subscriber from the type specific DDS DataReader\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+ this->create_contentfilteredtopic (filter, sub);
+
+ // Now recreate the DataReader, using the ContentFilteredTopic.
+ // After recreation, connect the original DataReaderListener to it.
+ ::DDSDataReaderListener *drl = this->impl ()->get_listener ();
+
+ ::DDSDataReader * dr = 0;
+ if (this->library_name_.length () > 0 &&
+ this->profile_name_.length () > 0)
+ {
+ dr = sub->create_datareader_with_profile (this->cft_,
+ this->library_name_.c_str (),
+ this->profile_name_.c_str (),
+ drl,
+ ::DDS::DATA_AVAILABLE_STATUS |
+ ::DDS::REQUESTED_DEADLINE_MISSED_STATUS |
+ ::DDS::SAMPLE_LOST_STATUS);
+ }
+ else
+ {
+ DDS_DataReaderQos const qos = DDS_DATAREADER_QOS_DEFAULT;
+ dr = sub->create_datareader (this->cft_,
+ qos,
+ drl,
+ ::DDS::DATA_AVAILABLE_STATUS |
+ ::DDS::REQUESTED_DEADLINE_MISSED_STATUS |
+ ::DDS::SAMPLE_LOST_STATUS);
+ }
+ if (!dr)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::create_filter - "
+ "Error: Unable to create a new DataReader.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
+ }
+ // Inform the Getter that there's a new DataReader created
+ if (this->dds_get_)
+ {
+ this->dds_get_->remove_conditions ();
+ this->delete_datareader (sub);
+ // Now we need to set the new created DataReader in our proxy classes.
+ this->reader_->set_impl (dr);
+ this->dds_get_->set_impl (this->reader_);
+ }
+ else
+ {
+ this->delete_datareader (sub);
+ this->reader_->set_impl (dr);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+ ::CCM_DDS::QueryFilter *
+ CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::filter (void)
+{
+ #if (DDS4CCM_USES_QUERY_CONDITION==1)
+ if (!this->qc_)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::filter - "
+ "Error: No QueryCondition set yet. First set a filter.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+ ::CCM_DDS::QueryFilter_var filter = 0;
+ ACE_NEW_THROW_EX (filter,
+ ::CCM_DDS::QueryFilter(),
+ CORBA::NO_MEMORY ());
+ filter->query = this->qc_->get_query_expression ();
+ ::DDS_StringSeq dds_qp;
+ this->qc_->get_query_parameters (dds_qp);
+ filter->query_parameters <<= dds_qp;
+ return filter._retn ();
+ #else
+ if (!this->cft_)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::filter - "
+ "Error: No ContentFilter set yet. First set a filter.\n"));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+ ::CCM_DDS::QueryFilter_var filter = 0;
+ ACE_NEW_THROW_EX (filter,
+ ::CCM_DDS::QueryFilter(),
+ CORBA::NO_MEMORY ());
+ filter->query = this->cft_->get_filter_expression ();
+ DDS_StringSeq params;
+ ::DDS::ReturnCode_t const retval = this->cft_->get_expression_parameters (
+ params);
+ filter->query_parameters <<= params;
+ if (retval != DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::filter - "
+ "Error getting expression_parameters. "
+ "Retval is %C\n",
+ translate_retcode(retval)));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, retval);
+ }
+ return filter._retn ();
+ #endif
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::filter (
+ const ::CCM_DDS::QueryFilter & filter)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::filter");
+ #if (DDS4CCM_USES_QUERY_CONDITION==1)
+ if (!this->qc_)
+ {
+ ::DDS_StringSeq dds_qp;
+ dds_qp <<= filter.query_parameters;
+ this->qc_ = this->impl ()->create_querycondition (
+ DDS_READ_SAMPLE_STATE | DDS_NOT_READ_SAMPLE_STATE,
+ DDS_NEW_VIEW_STATE | DDS_NOT_NEW_VIEW_STATE,
+ DDS_ALIVE_INSTANCE_STATE,
+ filter.query,
+ dds_qp);
+ if (!this->qc_)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::filter - "
+ "Error creating query condition."));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 1);
+ }
+ if (this->dds_get_)
+ {
+ this->dds_get_->create_querycondition (filter.query, dds_qp);
+ }
+ }
+ else
+ {
+ ::DDS_StringSeq dds_qp;
+ dds_qp <<= filter.query_parameters;
+ ::DDS::ReturnCode_t retval = this->qc_->set_query_parameters (
+ dds_qp);
+ if (retval != ::DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::filter - "
+ "Error setting expression_parameters. "
+ "Retval is %C\n",
+ translate_retcode(retval)));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, retval);
+ }
+ if (this->dds_get_)
+ {
+ this->dds_get_->set_queryparameters (dds_qp);
+ }
+ }
+ #else
+ if (!this->cft_)
+ {
+ this->create_filter (filter);
+ }
+ else
+ {
+ DDS_StringSeq params;
+ params <<= filter.query_parameters;
+ ::DDS::ReturnCode_t retval = this->cft_->set_expression_parameters (
+ params);
+ if (retval != ::DDS::RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::DDS_CCM::Reader_T::filter - "
+ "Error setting expression_parameters. "
+ "Retval is %C\n",
+ translate_retcode(retval)));
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, retval);
+ }
+ }
+ #endif
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::set_contentfilteredtopic_data (
+ const char * library_name,
+ const char * profile_name,
+ Getter_T<DDS_TYPE, CCM_TYPE, FIXED> * dds_get)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::set_contentfilteredtopic_data");
+ this->library_name_ = library_name;
+ this->profile_name_ = profile_name;
+ this->dds_get_ = dds_get;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+DDS_ReturnCode_t
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::passivate ()
+{
+ #if (DDS4CCM_USES_QUERY_CONDITION==1)
+ if (this->qc_)
+ {
+ return this->impl ()->delete_readcondition (this->qc_);
+ }
+ #endif
+ return DDS_RETCODE_OK;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+void
+CIAO::DDS4CCM::DDS_CCM::Reader_T<DDS_TYPE, CCM_TYPE, FIXED>::set_impl (
+ CCM_DDS_DataReader_i *reader)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::DDS_CCM::Reader_T::set_impl");
+ this->reader_ = reader;
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h
new file mode 100644
index 00000000000..20c6f49ef47
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Reader_T.h
@@ -0,0 +1,123 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+#ifndef DDS_READER_T
+#define DDS_READER_T
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+#include "dds4ccm/impl/dds/Getter_T.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::InstanceHandle_t DDS_InstanceHandle_t;
+typedef ::DDS::SampleInfoSeq DDS_SampleInfoSeq;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ namespace DDS_CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE, bool FIXED>
+ class Reader_T :
+ public virtual CCM_TYPE::reader_type,
+ public virtual ::CORBA::LocalObject,
+ private virtual ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ Reader_T (void);
+
+ /// Destructor
+ virtual ~Reader_T (void);
+
+ virtual void read_last (
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos);
+
+ virtual void read_all (
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos);
+
+ virtual void read_one_last (
+ typename DDS_TYPE::value_type& an_instance,
+ ::CCM_DDS::ReadInfo_out info,
+ const ::DDS::InstanceHandle_t & instance_handle);
+
+ virtual void read_one_all (
+ const typename DDS_TYPE::value_type& an_instance,
+ typename CCM_TYPE::seq_type::_out_type instances,
+ ::CCM_DDS::ReadInfoSeq_out infos,
+ const ::DDS::InstanceHandle_t & instance_handle);
+
+ virtual ::CCM_DDS::QueryFilter *filter (void);
+
+ virtual void filter (const ::CCM_DDS::QueryFilter & filter);
+
+ void set_contentfilteredtopic_data (
+ const char * libary_name,
+ const char * profile_name,
+ Getter_T<DDS_TYPE, CCM_TYPE, FIXED> * dds_get=0);
+
+ void set_impl (CCM_DDS_DataReader_i *reader);
+
+ DDS_ReturnCode_t passivate (void);
+
+ private:
+ CCM_DDS_DataReader_i *reader_;
+
+ Getter_T<DDS_TYPE, CCM_TYPE, FIXED> * dds_get_;
+
+ ACE_CString library_name_;
+ ACE_CString profile_name_;
+
+ #if (DDS4CCM_USES_QUERY_CONDITION==1)
+ ::DDSQueryCondition * qc_;
+ #else
+ ::DDSContentFilteredTopic * cft_;
+ #endif
+
+ typename DDS_TYPE::data_reader * impl (void);
+
+ DDS_InstanceHandle_t check_handle (
+ const typename DDS_TYPE::value_type& an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle);
+
+ void read_with_instance (
+ typename DDS_TYPE::dds_seq_type & data,
+ const ::DDS_InstanceHandle_t & lookup_hnd,
+ DDS_SampleInfoSeq & sample_info);
+
+ void read_without_instance (
+ typename DDS_TYPE::dds_seq_type & data,
+ DDS_SampleInfoSeq & sample_info);
+
+ CORBA::ULong get_nr_valid_samples (
+ const DDS_SampleInfoSeq & sample_info,
+ bool determine_last = false);
+
+ void delete_datareader (
+ ::DDSSubscriber * sub);
+
+ void create_filter (
+ const ::CCM_DDS::QueryFilter & filter);
+
+ void create_contentfilteredtopic (
+ const ::CCM_DDS::QueryFilter & filter,
+ ::DDSSubscriber * sub);
+ };
+ }
+ }
+}
+
+#include "dds4ccm/impl/dds/Reader_T.cpp"
+
+#endif /* DDS_READER_T */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.cpp
new file mode 100644
index 00000000000..197e999eae8
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.cpp
@@ -0,0 +1,35 @@
+// -*- C++ -*-
+// $Id$
+
+template <typename BASE_TYPE>
+CCM_DDS_StateListenerControl_T<BASE_TYPE>::CCM_DDS_StateListenerControl_T (void)
+ : is_filter_interpreted_ (false)
+{
+ DDS4CCM_TRACE ("CCM_DDS_StateListenerControl_T::CCM_DDS_StateListenerControl_T");
+}
+
+template <typename BASE_TYPE>
+CCM_DDS_StateListenerControl_T<BASE_TYPE>::~CCM_DDS_StateListenerControl_T (void)
+{
+ DDS4CCM_TRACE ("CCM_DDS_StateListenerControl_T::~CCM_DDS_StateListenerControl_T");
+}
+
+template <typename BASE_TYPE>
+::CORBA::Boolean
+CCM_DDS_StateListenerControl_T<BASE_TYPE>::is_filter_interpreted (void)
+{
+ DDS4CCM_TRACE ("CCM_DDS_StateListenerControl_T::is_filter_interpreted");
+
+ return this->is_filter_interpreted_.value ();
+}
+
+template <typename BASE_TYPE>
+void
+CCM_DDS_StateListenerControl_T<BASE_TYPE>::is_filter_interpreted (
+ ::CORBA::Boolean is_filter_interpreted)
+{
+ DDS4CCM_TRACE ("CCM_DDS_StateListenerControl_T::is_filter_interpreted");
+
+ this->is_filter_interpreted_ = is_filter_interpreted;
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.h
new file mode 100644
index 00000000000..bbee0e73a71
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/StateListenerControl_T.h
@@ -0,0 +1,38 @@
+// -*- C++ -*-
+// $Id$
+
+#ifndef DDS4CCM_STATELISTENERCONTROLI_H_
+#define DDS4CCM_STATELISTENERCONTROLI_H_
+
+#include "dds4ccm/impl/dds/DataListenerControl_T.h"
+#include "dds4ccm/idl/dds4ccm_StateListenerControlEC.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+#pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+template <typename BASE_TYPE>
+class CCM_DDS_StateListenerControl_T
+ : public virtual CCM_DDS_DataListenerControl_T<BASE_TYPE>
+{
+public:
+ /// Constructor
+ CCM_DDS_StateListenerControl_T (void);
+
+ /// Destructor
+ virtual ~CCM_DDS_StateListenerControl_T (void);
+
+ /// Set the is_filter_interpreted
+ virtual ::CORBA::Boolean is_filter_interpreted (void);
+
+ /// Get the is_filter_interpreted
+ virtual void is_filter_interpreted (::CORBA::Boolean is_filter_interpreted);
+
+private:
+ ACE_Atomic_Op <TAO_SYNCH_MUTEX, ::CORBA::Boolean> is_filter_interpreted_;
+};
+
+#include "dds4ccm/impl/dds/StateListenerControl_T.cpp"
+
+#endif /* DDS4CCM_STATELISTENERCONTROLI_H_ */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.cpp
new file mode 100644
index 00000000000..37baef77d72
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.cpp
@@ -0,0 +1,72 @@
+// $Id$
+
+#include "StatusCondition.h"
+#include "Subscriber.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_StatusCondition_i::CCM_DDS_StatusCondition_i (
+ DDSStatusCondition * sc) :
+ impl_ (sc)
+ {
+ }
+
+ CCM_DDS_StatusCondition_i::~CCM_DDS_StatusCondition_i (void)
+ {
+ }
+
+ ::CORBA::Boolean
+ CCM_DDS_StatusCondition_i::get_trigger_value (void)
+ {
+ return this->impl ()->get_trigger_value ();
+ }
+
+ ::DDS::StatusMask
+ CCM_DDS_StatusCondition_i::get_enabled_statuses (void)
+ {
+ return this->impl ()->get_enabled_statuses ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_StatusCondition_i::set_enabled_statuses (
+ ::DDS::StatusMask mask)
+ {
+ return this->impl ()->set_enabled_statuses (mask);
+ }
+
+ ::DDS::Entity_ptr
+ CCM_DDS_StatusCondition_i::get_entity (void)
+ {
+ throw CORBA::NO_IMPLEMENT ();
+ }
+
+ DDSStatusCondition *
+ CCM_DDS_StatusCondition_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_StatusCondition_i::set_impl (DDSStatusCondition * sc)
+ {
+ this->impl_ = sc;
+ }
+
+ DDSStatusCondition *
+ CCM_DDS_StatusCondition_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.h b/modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.h
new file mode 100644
index 00000000000..f3caf0d4c97
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/StatusCondition.h
@@ -0,0 +1,65 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_STATUSCONDITION_H
+#define DDS4CCM_STATUSCONDITION_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::StatusCondition DDSStatusCondition;
+#endif
+
+#include "tao/LocalObject.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_StatusCondition_i :
+ public virtual ::DDS::CCM_StatusCondition,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_StatusCondition_i (DDSStatusCondition *sc);
+
+ /// Destructor
+ virtual ~CCM_DDS_StatusCondition_i (void);
+
+ virtual ::CORBA::Boolean get_trigger_value (void);
+
+ virtual ::DDS::StatusMask get_enabled_statuses (void);
+
+ virtual ::DDS::ReturnCode_t set_enabled_statuses (::DDS::StatusMask mask);
+
+ virtual ::DDS::Entity_ptr get_entity (void);
+
+ DDSStatusCondition * get_impl (void);
+
+ void set_impl (DDSStatusCondition * sc);
+
+ private:
+ DDSStatusCondition * impl_;
+ DDSStatusCondition * impl (void);
+ };
+ }
+}
+
+#endif /* DDS4CCM_STATUSCONDITION_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.cpp
new file mode 100644
index 00000000000..ea334641528
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.cpp
@@ -0,0 +1,537 @@
+// $Id$
+
+#include "Subscriber.h"
+#include "SubscriberListener.h"
+#include "Topic.h"
+#include "ContentFilteredTopic.h"
+#include "DataReader.h"
+#include "DataReaderListener.h"
+#include "Utils.h"
+#include "StatusCondition.h"
+
+#include "ndds/InstanceHandle_t.h"
+#include "ndds/DataReaderQos.h"
+#include "ndds/SubscriberQos.h"
+#include "ndds/TopicQos.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_Subscriber_i::CCM_DDS_Subscriber_i (DDSSubscriber * sub)
+ : impl_ (sub)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Subscriber_i::CCM_DDS_Subscriber_i");
+ }
+
+ CCM_DDS_Subscriber_i::~CCM_DDS_Subscriber_i (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Subscriber_i::~CCM_DDS_Subscriber_i");
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::enable (void)
+ {
+ return this->impl ()->enable ();
+ }
+
+ ::DDS::StatusCondition_ptr
+ CCM_DDS_Subscriber_i::get_statuscondition (void)
+ {
+ ::DDS::StatusCondition_var retval = ::DDS::StatusCondition::_nil ();
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ DDSStatusCondition* sc = this->impl ()->get_statuscondition ();
+ if (sc)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::StatusCondition_var sc = this->impl ()->get_statuscondition ();
+ if (! ::CORBA::is_nil (sc.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::StatusMask
+ CCM_DDS_Subscriber_i::get_status_changes (void)
+ {
+ return this->impl ()->get_status_changes ();
+ }
+
+ ::DDS::InstanceHandle_t
+ CCM_DDS_Subscriber_i::get_instance_handle (void)
+ {
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t const rtihandle = this->impl ()->get_instance_handle ();
+ ::DDS::InstanceHandle_t handle;
+ handle <<= rtihandle;
+ return handle;
+#else
+ return this->impl ()->get_instance_handle ();
+#endif
+ }
+
+ DDSDataReader *
+ CCM_DDS_Subscriber_i::create_datareader (
+ DDSContentFilteredTopic * topic,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask,
+ const ::DDS::DataReaderQos & qos)
+ {
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ACE_UNUSED_ARG (qos);
+ DDS_DataReaderQos ccm_dds_qos = DDS_DATAREADER_QOS_DEFAULT;
+ return this->impl ()->create_datareader (topic,
+ ccm_dds_qos,
+ ccm_dds_drl,
+ mask);
+#else
+ return this->impl ()->create_datareader (topic,
+ qos,
+ ccm_dds_drl,
+ mask);
+#endif
+ }
+
+ DDSDataReader *
+ CCM_DDS_Subscriber_i::create_datareader (
+ DDSTopic * topic,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask,
+ const ::DDS::DataReaderQos & qos)
+ {
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ACE_UNUSED_ARG (qos);
+ DDS_DataReaderQos ccm_dds_qos = DDS_DATAREADER_QOS_DEFAULT;
+ return this->impl ()->create_datareader (topic,
+ ccm_dds_qos,
+ ccm_dds_drl,
+ mask);
+#else
+ return this->impl ()->create_datareader (topic,
+ qos,
+ ccm_dds_drl,
+ mask);
+#endif
+ }
+
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ DDSDataReader *
+ CCM_DDS_Subscriber_i::create_datareader_with_profile (
+ DDSContentFilteredTopic * topic,
+ const char * library_name,
+ const char * profile_name,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask)
+ {
+ return this->impl ()->create_datareader_with_profile (topic,
+ library_name,
+ profile_name,
+ ccm_dds_drl,
+ mask);
+ }
+#endif
+
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ DDSDataReader *
+ CCM_DDS_Subscriber_i::create_datareader_with_profile (
+ DDSTopic * topic,
+ const char * library_name,
+ const char * profile_name,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask)
+ {
+ return this->impl ()->create_datareader_with_profile (topic,
+ library_name,
+ profile_name,
+ ccm_dds_drl,
+ mask);
+ }
+#endif
+
+ ::DDS::DataReader_ptr
+ CCM_DDS_Subscriber_i::create_datareader (
+ ::DDS::TopicDescription_ptr a_topic,
+ const ::DDS::DataReaderQos & qos,
+ ::DDS::DataReaderListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Subscriber_i::create_datareader");
+ ::DDS::DataReader_var retval = ::DDS::DataReader::_nil ();
+ DDSDataReaderListener *ccm_dds_drl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_drl,
+ CCM_DDS_DataReaderListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ DDSDataReader * ccm_dds_dr = 0;
+ CCM_DDS_Topic_i * topic = dynamic_cast < CCM_DDS_Topic_i * > (a_topic);
+
+ if (!topic)
+ {
+ CCM_DDS_ContentFilteredTopic_i * cf_topic =
+ dynamic_cast < CCM_DDS_ContentFilteredTopic_i * > (a_topic);
+ if (!cf_topic)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Subscriber_i::create_datareader - "
+ "Error: Unable to cast provided topic to one of its servant.\n"));
+ delete ccm_dds_drl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0);
+ }
+ else
+ ccm_dds_dr = this->create_datareader (cf_topic->get_impl (), ccm_dds_drl, mask, qos);
+ }
+ else
+ ccm_dds_dr = this->create_datareader (topic->get_impl (), ccm_dds_drl, mask, qos);
+
+ if (!ccm_dds_dr)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Subscriber_i::create_datareader - "
+ "Error: RTI Topic returned a nil datareader.\n"));
+ delete ccm_dds_drl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "CCM_DDS_Subscriber_i::create_datareader_with_profile - "
+ "Successfully created datareader.\n"));
+ }
+
+ ccm_dds_dr->enable ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataReader_i (ccm_dds_dr),
+ CORBA::NO_MEMORY ());
+ return retval._retn ();
+ }
+
+ ::DDS::DataReader_ptr
+ CCM_DDS_Subscriber_i::create_datareader_with_profile (
+ ::DDS::TopicDescription_ptr a_topic,
+ const char * library_name,
+ const char * profile_name,
+ ::DDS::DataReaderListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Subscriber_i::create_datareader_with_profile");
+ DDSDataReaderListener *ccm_dds_drl = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_drl,
+ CCM_DDS_DataReaderListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+
+ DDSDataReader * ccm_dds_dr = 0;
+ CCM_DDS_Topic_i * topic = dynamic_cast < CCM_DDS_Topic_i * > (a_topic);
+
+ if (!topic)
+ {
+ CCM_DDS_ContentFilteredTopic_i * cf_topic =
+ dynamic_cast < CCM_DDS_ContentFilteredTopic_i * > (a_topic);
+ if (!cf_topic)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Subscriber_i::create_datareader_with_profile - "
+ "Error: Unable to cast provided topic to one of its servant.\n"));
+ delete ccm_dds_drl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_BAD_PARAMETER, 0);
+ }
+ else
+ {
+ ccm_dds_dr = this->create_datareader_with_profile (cf_topic->get_impl (),
+ library_name,
+ profile_name,
+ ccm_dds_drl,
+ mask);
+ }
+ }
+ else
+ {
+ ccm_dds_dr = this->create_datareader_with_profile (topic->get_impl (),
+ library_name,
+ profile_name,
+ ccm_dds_drl,
+ mask);
+ }
+
+ if (!ccm_dds_dr)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Subscriber_i::create_datareader_with_profile - "
+ "Error: RTI Topic returned a nil datareader.\n"));
+ delete ccm_dds_drl;
+ throw CCM_DDS::InternalError (::DDS::RETCODE_ERROR, 0);
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO "CCM_DDS_Subscriber_i::create_datareader_with_profile - "
+ "Successfully created datareader with profile <%C#%C>.\n",
+ library_name,
+ profile_name));
+ }
+
+ ::DDS::DataReader_var retval = ::DDS::DataReader::_nil ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataReader_i (ccm_dds_dr),
+ CORBA::NO_MEMORY ());
+
+ ccm_dds_dr->enable ();
+
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::delete_datareader (
+ ::DDS::DataReader_ptr a_datareader)
+ {
+ CCM_DDS_DataReader_i *dr = dynamic_cast< CCM_DDS_DataReader_i *> (a_datareader);
+ if (!dr)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Subscriber_i::delete_datareader - "
+ "Unable to cast provided object reference to servant.\n"));
+ return ::DDS::RETCODE_BAD_PARAMETER;
+ }
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CCM_DDS_Subscriber_i::delete_datareader - "
+ "Successfully casted provided object reference to servant.\n"));
+
+ DDS_ReturnCode_t const retval = this->impl ()->delete_datareader (dr->get_impl ());
+
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CCM_DDS_Subscriber_i::delete_datareader - "
+ "Error: Returned non-ok error code %C\n",
+ translate_retcode (retval)));
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_INFO, CLINFO "CCM_DDS_Subscriber_i::delete_datareader - "
+ "Datareader successfully deleted\n"));
+ }
+
+ return retval;
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::delete_contained_entities (void)
+ {
+ return this->impl ()->delete_contained_entities ();
+ }
+
+ ::DDS::DataReader_ptr
+ CCM_DDS_Subscriber_i::lookup_datareader (
+ const char * impl_name)
+ {
+ ::DDS::DataReader_var retval = ::DDS::DataReader::_nil ();
+ DDSDataReader* dr = this->impl ()->lookup_datareader (impl_name);
+ if (dr)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DataReader_i (dr),
+ CORBA::NO_MEMORY ());
+ }
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::get_datareaders (
+ ::DDS::DataReaderSeq & /*readers*/,
+ ::DDS::SampleStateMask /*sample_states*/,
+ ::DDS::ViewStateMask /*view_states*/,
+ ::DDS::InstanceStateMask /*instance_states*/)
+ {
+ throw CORBA::NO_IMPLEMENT ();
+ // Add your implementation here
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::notify_datareaders (void)
+ {
+ return this->impl ()->notify_datareaders ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::set_qos (
+ const ::DDS::SubscriberQos & qos)
+ {
+ CIAO_TRACE ("CCM_DDS_Subscriber_i::set_qos");
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_SubscriberQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl ()->get_qos (ccm_dds_qos);
+#else
+ return this->impl ()->set_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::get_qos (
+ ::DDS::SubscriberQos & qos)
+ {
+ CIAO_TRACE ("CCM_DDS_Subscriber_i::get_qos");
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_SubscriberQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode = this->impl ()->get_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl ()->get_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::set_listener (
+ ::DDS::SubscriberListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Subscriber_i::set_listener");
+
+ CCM_DDS_SubscriberListener_i* ccm_dds_impl_list = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_impl_list,
+ CCM_DDS_SubscriberListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ return this->impl ()->set_listener (ccm_dds_impl_list, mask);
+ }
+
+ ::DDS::SubscriberListener_ptr
+ CCM_DDS_Subscriber_i::get_listener (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Subscriber_i::get_listener");
+
+ DDSSubscriberListener *ccm_dds_impl_list = this->impl ()->get_listener ();
+ CCM_DDS_SubscriberListener_i *list_proxy = dynamic_cast <CCM_DDS_SubscriberListener_i *> (ccm_dds_impl_list);
+ if (!list_proxy)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, "CCM_DDS_Subscriber_i::get_listener - "
+ "DDS returned a NIL listener.\n"));
+ return ::DDS::SubscriberListener::_nil ();
+ }
+ return list_proxy->get_subscriber_listener ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::begin_access (void)
+ {
+ return this->impl ()->begin_access ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::end_access (void)
+ {
+ return this->impl ()->end_access ();
+ }
+
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_Subscriber_i::get_participant (void)
+ {
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ DDSDomainParticipant* p = this->impl ()->get_participant ();
+ if (p)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::DomainParticipant_var p = this->impl ()->get_participant ();
+ if (! ::CORBA::is_nil (p.in))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::set_default_datareader_qos (
+ const ::DDS::DataReaderQos & qos)
+ {
+ CIAO_TRACE ("CCM_DDS_Subscriber_i::set_default_datareader_qos");
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataReaderQos ccm_dds_qos;
+ ccm_dds_qos <<= qos;
+ return this->impl ()->set_default_datareader_qos (ccm_dds_qos);
+#else
+ return this->impl ()->set_default_datareader_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::get_default_datareader_qos (
+ ::DDS::DataReaderQos & qos)
+ {
+ CIAO_TRACE ("CCM_DDS_Subscriber_i::get_default_datareader_qos");
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataReaderQos ccm_dds_qos;
+ ::DDS::ReturnCode_t retcode = this->impl ()->get_default_datareader_qos (ccm_dds_qos);
+ qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl ()->get_default_datareader_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Subscriber_i::copy_from_topic_qos (
+ ::DDS::DataReaderQos & a_datareader_qos,
+ const ::DDS::TopicQos & a_impl_qos)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Subscriber_i::copy_from_topic_qos");
+#if defined (CIAO_DDS4CCM_NDDS) && (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_DataReaderQos ccm_dds_qos;
+ ::DDS_TopicQos ccm_dds_topic_qos;
+
+ ccm_dds_qos <<= a_datareader_qos;
+ ccm_dds_topic_qos <<= a_impl_qos;
+ ::DDS::ReturnCode_t retcode =
+ this->impl()->copy_from_topic_qos (ccm_dds_qos,
+ ccm_dds_topic_qos);
+ a_datareader_qos <<= ccm_dds_qos;
+ return retcode;
+#else
+ return this->impl()->copy_from_topic_qos (a_datareader_qos,
+ a_impl_qos);
+#endif
+ }
+
+ DDSSubscriber *
+ CCM_DDS_Subscriber_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_Subscriber_i::set_impl (DDSSubscriber * sub)
+ {
+ this->impl_ = sub;
+ }
+
+ DDSSubscriber *
+ CCM_DDS_Subscriber_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.h
new file mode 100644
index 00000000000..76dc06ef111
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Subscriber.h
@@ -0,0 +1,177 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_SUBSCRIBER_H
+#define DDS4CCM_SUBSCRIBER_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#include "tao/LocalObject.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::Subscriber DDSSubscriber;
+typedef ::DDS::DataReaderListener DDSDataReaderListener;
+typedef ::DDS::DataReader DDSDataReader;
+typedef ::DDS::ContentFilteredTopic DDSContentFilteredTopic;
+typedef ::DDS::Topic DDSTopic;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_Subscriber_i :
+ public virtual ::DDS::CCM_Subscriber,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_Subscriber_i (DDSSubscriber * sub);
+
+ /// Destructor
+ virtual ~CCM_DDS_Subscriber_i (void);
+
+ virtual ::DDS::ReturnCode_t enable (void);
+
+ virtual ::DDS::StatusCondition_ptr get_statuscondition (void);
+
+ virtual ::DDS::StatusMask get_status_changes (void);
+
+ virtual ::DDS::InstanceHandle_t get_instance_handle (void);
+
+ virtual ::DDS::DataReader_ptr create_datareader (
+ ::DDS::TopicDescription_ptr a_topic,
+ const ::DDS::DataReaderQos & qos,
+ ::DDS::DataReaderListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ virtual ::DDS::DataReader_ptr
+ create_datareader_with_profile (
+ ::DDS::TopicDescription_ptr a_topic,
+ const char* library_name,
+ const char *profile_name,
+ ::DDS::DataReaderListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+#endif
+
+ virtual ::DDS::ReturnCode_t
+ delete_datareader (
+ ::DDS::DataReader_ptr a_datareader);
+
+ virtual ::DDS::ReturnCode_t delete_contained_entities (void);
+
+ virtual ::DDS::DataReader_ptr lookup_datareader (
+ const char * impl_name);
+
+ virtual ::DDS::ReturnCode_t
+ get_datareaders (
+ ::DDS::DataReaderSeq & readers,
+ ::DDS::SampleStateMask sample_states,
+ ::DDS::ViewStateMask view_states,
+ ::DDS::InstanceStateMask instance_states);
+
+ virtual ::DDS::ReturnCode_t
+ notify_datareaders (void);
+
+ virtual ::DDS::ReturnCode_t
+ set_qos (
+ const ::DDS::SubscriberQos & qos);
+
+ virtual ::DDS::ReturnCode_t
+ get_qos (
+ ::DDS::SubscriberQos & qos);
+
+ virtual ::DDS::ReturnCode_t
+ set_listener (
+ ::DDS::SubscriberListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual ::DDS::SubscriberListener_ptr
+ get_listener (void);
+
+ virtual ::DDS::ReturnCode_t
+ begin_access (void);
+
+ virtual ::DDS::ReturnCode_t
+ end_access (void);
+
+ virtual ::DDS::DomainParticipant_ptr
+ get_participant (void);
+
+ virtual ::DDS::ReturnCode_t
+ set_default_datareader_qos (
+ const ::DDS::DataReaderQos & qos);
+
+ virtual ::DDS::ReturnCode_t
+ get_default_datareader_qos (
+ ::DDS::DataReaderQos & qos);
+
+ virtual ::DDS::ReturnCode_t
+ copy_from_topic_qos (
+ ::DDS::DataReaderQos & a_datareader_qos,
+ const ::DDS::TopicQos & a_impl_qos);
+
+ DDSSubscriber * get_impl (void);
+
+ void set_impl (DDSSubscriber * sub);
+
+ private:
+ DDSSubscriber *impl_;
+
+ DDSSubscriber *impl (void);
+
+ DDSDataReader *
+ create_datareader (
+ DDSTopic * topic,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask,
+ const ::DDS::DataReaderQos & qos);
+
+ DDSDataReader *
+ create_datareader (
+ DDSContentFilteredTopic * topic,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask,
+ const ::DDS::DataReaderQos & qos);
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDataReader *
+ create_datareader_with_profile (
+ DDSContentFilteredTopic * topic,
+ const char* library_name,
+ const char *profile_name,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask);
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDataReader *
+ create_datareader_with_profile (
+ DDSTopic * topic,
+ const char* library_name,
+ const char *profile_name,
+ DDSDataReaderListener * ccm_dds_drl,
+ ::DDS::StatusMask mask);
+#endif
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.cpp
new file mode 100644
index 00000000000..43acb3e5757
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.cpp
@@ -0,0 +1,178 @@
+// $Id$
+
+#include "SubscriberListener.h"
+#include "Subscriber.h"
+#include "DataReader.h"
+
+#include "ndds/SampleLostStatus.h"
+#include "ndds/SubscriptionMatchedStatus.h"
+#include "ndds/RequestedDeadlineMissedStatus.h"
+#include "ndds/SampleRejectedStatus.h"
+#include "ndds/LivelinessChangedStatus.h"
+#include "ndds/RequestedIncompatibleQosStatus.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_SubscriberListener_i::CCM_DDS_SubscriberListener_i (::DDS::SubscriberListener_ptr p)
+ : impl_ ( ::DDS::SubscriberListener::_duplicate (p))
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::CCM_DDS_SubscriberListener_i");
+ }
+
+ CCM_DDS_SubscriberListener_i::~CCM_DDS_SubscriberListener_i (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::~CCM_DDS_SubscriberListener_i");
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_data_on_readers (
+ ::DDSSubscriber* the_subscriber)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_data_on_readers");
+
+ ::DDS::Subscriber_var sub = ::DDS::Subscriber::_nil ();
+ ACE_NEW (sub,
+ CCM_DDS_Subscriber_i (the_subscriber));
+ this->impl_->on_data_on_readers (sub.in ());
+ the_subscriber->notify_datareaders ();
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_requested_deadline_missed (
+ ::DDSDataReader* the_reader,
+ const ::DDS_RequestedDeadlineMissedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_requested_deadline_missed");
+
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::RequestedDeadlineMissedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_requested_deadline_missed (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_requested_deadline_missed (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_requested_incompatible_qos (
+ ::DDSDataReader* the_reader,
+ const ::DDS_RequestedIncompatibleQosStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_requested_incompatible_qos");
+
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::RequestedIncompatibleQosStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_requested_incompatible_qos (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_requested_incompatible_qos (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_sample_rejected (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SampleRejectedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_sample_rejected");
+
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::SampleRejectedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_sample_rejected (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_sample_rejected (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_liveliness_changed (
+ ::DDSDataReader* the_reader,
+ const ::DDS_LivelinessChangedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_liveliness_changed");
+
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::LivelinessChangedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_liveliness_changed (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_liveliness_changed (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_data_available (
+ ::DDSDataReader* the_reader)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_data_available");
+
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+ this->impl_->on_data_available (dds_reader.in ());
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_subscription_matched (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SubscriptionMatchedStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_subscription_matched");
+
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::SubscriptionMatchedStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_subscription_matched (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_subscription_matched (dds_reader.in (), status);
+#endif
+ }
+
+ void
+ CCM_DDS_SubscriberListener_i::on_sample_lost (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SampleLostStatus & status)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_SubscriberListener_i::on_sample_lost");
+
+ ::DDS::DataReader_var dds_reader = ::DDS::DataReader::_nil ();
+ ACE_NEW (dds_reader,
+ CCM_DDS_DataReader_i (the_reader));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::SampleLostStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_sample_lost (dds_reader.in (), ddsstatus);
+#else
+ this->impl_->on_sample_lost (dds_reader.in (), status);
+#endif
+ }
+
+ ::DDS::SubscriberListener_ptr
+ CCM_DDS_SubscriberListener_i::get_subscriber_listener (void)
+ {
+ return ::DDS::SubscriberListener::_duplicate (this->impl_.in ());
+ }
+ }
+}
+
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.h b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.h
new file mode 100644
index 00000000000..e8c624d4e7c
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener.h
@@ -0,0 +1,95 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_SUBSCRIBERLISTENER_H
+#define DDS4CCM_SUBSCRIBERLISTENER_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::SubscriberListener DDSSubscriberListener;
+typedef ::DDS::DataReader DDSDataReader;
+typedef ::DDS::Subscriber DDSSubscriber;
+typedef ::DDS::RequestedDeadlineMissedStatus DDS_RequestedDeadlineMissedStatus;
+typedef ::DDS::LivelinessChangedStatus DDS_LivelinessChangedStatus;
+typedef ::DDS::RequestedIncompatibleQosStatus DDS_RequestedIncompatibleQosStatus;
+typedef ::DDS::SampleRejectedStatus DDS_SampleRejectedStatus;
+typedef ::DDS::SubscriptionMatchedStatus DDS_SubscriptionMatchedStatus;
+typedef ::DDS::SampleLostStatus DDS_SampleLostStatus;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_SubscriberListener_i :
+ public virtual ::DDSSubscriberListener
+ {
+ public:
+ /// Constructor
+ CCM_DDS_SubscriberListener_i ( ::DDS::SubscriberListener_ptr s);
+
+ /// Destructor
+ virtual ~CCM_DDS_SubscriberListener_i (void);
+
+ virtual void
+ on_requested_deadline_missed (
+ ::DDSDataReader* the_reader,
+ const ::DDS_RequestedDeadlineMissedStatus & status);
+
+ virtual void
+ on_requested_incompatible_qos (
+ ::DDSDataReader* the_reader,
+ const ::DDS_RequestedIncompatibleQosStatus & status);
+
+ virtual void
+ on_sample_rejected (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SampleRejectedStatus & status);
+
+ virtual void
+ on_liveliness_changed (
+ ::DDSDataReader* the_reader,
+ const ::DDS_LivelinessChangedStatus & status);
+
+ virtual void
+ on_data_available (
+ ::DDSDataReader* the_reader);
+
+ virtual void
+ on_subscription_matched (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SubscriptionMatchedStatus & status);
+
+ virtual void
+ on_sample_lost (
+ ::DDSDataReader* the_reader,
+ const ::DDS_SampleLostStatus & status);
+
+ virtual void
+ on_data_on_readers (
+ ::DDSSubscriber* the_subscriber);
+
+ ::DDS::SubscriberListener_ptr get_subscriber_listener (void);
+ private:
+ ::DDS::SubscriberListener_var impl_;
+ };
+ }
+}
+
+#endif
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.cpp
new file mode 100644
index 00000000000..2ce57d7afcc
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.cpp
@@ -0,0 +1,277 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/DataReader.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds/DDSCallbackStatusHandler.h"
+#include "dds4ccm/impl/dds/Utils.h"
+#include "tao/ORB_Core.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::SubscriberListener_T (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ACE_Reactor* reactor)
+ : error_listener_ (::CCM_DDS::ConnectorStatusListener::_duplicate (error_listener)),
+ reactor_ (reactor)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::SubscriberListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::~SubscriberListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::~SubscriberListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr reader,
+ const ::DDS::RequestedIncompatibleQosStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::on_requested_incompatible_qos");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_requested_incompatible_qos: ")
+ ACE_TEXT ("total count <%d> - total change <%d> - ")
+ ACE_TEXT ("last policy id <%d> - policies\n"),
+ status.total_count, status.total_count_change,
+ status.last_policy_id));
+ for (CORBA::ULong i = 0; i < status.policies.length (); ++i)
+ {
+ DDS4CCM_DEBUG (10, (LM_DEBUG,
+ ACE_TEXT ("\t\tid <%d> - count <%d>\n"),
+ status.policies[i].policy_id,
+ status.policies[i].count));
+ }
+
+ if (! ::CORBA::is_nil (this->error_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnRequestedOncompatibleQosHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnRequestedOncompatibleQosHandler (
+ this->error_listener_, reader, status));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_requested_incompatible_qos: ")
+ ACE_TEXT ("failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->error_listener_->on_requested_incompatible_qos (reader, status);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("SubscriberListener_T::on_requested_incompatible_qos: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_requested_incompatible_qos: ")
+ ACE_TEXT ("No error listener connected\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_unexpected_status (
+ ::DDS::Entity_ptr entity,
+ ::DDS::StatusKind status_kind)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::on_unexpected_status");
+
+ if (! ::CORBA::is_nil (this->error_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnUnexpectedStatusHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnUnexpectedStatusHandler (
+ this->error_listener_, entity, status_kind));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_unexpected_status: ")
+ ACE_TEXT ("failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->error_listener_->on_unexpected_status (entity, status_kind);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG,
+ ACE_TEXT ("SubscriberListener_T::on_unexpected_status: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_requested_incompatible_qos: ")
+ ACE_TEXT ("No error listener connected\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_liveliness_changed (
+ ::DDS::DataReader* reader,
+ const ::DDS::LivelinessChangedStatus& status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::on_liveliness_changed");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_liveliness_changed: ")
+ ACE_TEXT ("alive count <%d> - not alive count <%d> - ")
+ ACE_TEXT ("alive count change <%d> - not alive count change <%d> ")
+ ACE_TEXT ("last publication handle length <%d> - isValid <%d>\n"),
+ status.alive_count, status.not_alive_count,
+ status.alive_count_change, status.not_alive_count_change,
+ status.last_publication_handle.length,
+ status.last_publication_handle.isValid));
+
+ this->on_unexpected_status (reader, ::DDS::LIVELINESS_CHANGED_STATUS);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_sample_rejected (
+ ::DDS::DataReader_ptr reader,
+ const ::DDS::SampleRejectedStatus& status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::on_sample_rejected");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_sample_rejected: ")
+ ACE_TEXT ("total count <%d> - count change <%d> - ")
+ ACE_TEXT ("last reason <%C> - last instance handle ")
+ ACE_TEXT ("<length <%d> - isValid <%d>\n"),
+ status.total_count, status.total_count_change,
+ translate_rejectedstatuskind (status.last_reason),
+ status.last_instance_handle.length,
+ status.last_instance_handle.isValid));
+
+ if (! ::CORBA::is_nil (this->error_listener_))
+ {
+ try
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnSampleRejectedHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnSampleRejectedHandler (
+ this->error_listener_, reader, status));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_sample_rejected: ")
+ ACE_TEXT ("failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->error_listener_->on_sample_rejected (reader, status);
+ }
+ }
+ catch (...)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, ACE_TEXT ("SubscriberListener_T::on_sample_rejected: ")
+ ACE_TEXT ("DDS Exception caught\n")));
+ }
+ }
+ else
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_sample_rejected: ")
+ ACE_TEXT ("No error listener connected\n")));
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_subscription_matched(
+ ::DDS::DataReader* reader,
+ const ::DDS::SubscriptionMatchedStatus& status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::on_subscription_matched");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("SubscriberListener_T::on_subscription_matched: ")
+ ACE_TEXT ("total count <%d> - count change <%d> - ")
+ ACE_TEXT ("current count <%d> - current count change <%d> ")
+ ACE_TEXT ("last publication handle length <%d> - isValid <%d>\n"),
+ status.total_count, status.total_count_change,
+ status.current_count, status.current_count_change,
+ status.last_publication_handle.length,
+ status.last_publication_handle.isValid));
+
+ this->on_unexpected_status (reader, ::DDS::SUBSCRIPTION_MATCHED_STATUS);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_data_on_readers(
+ ::DDS::Subscriber *)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::SubscriberListener_T::on_data_on_readers");
+ //do nothing by design
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_requested_deadline_missed (
+ ::DDS::DataReader_ptr,
+ const ::DDS::RequestedDeadlineMissedStatus &)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_data_available (
+ ::DDS::DataReader_ptr)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::on_sample_lost (
+ ::DDS::DataReader_ptr,
+ const ::DDS::SampleLostStatus &)
+{
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::SubscriberListener_T<DDS_TYPE, CCM_TYPE>::get_mask (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl)
+{
+ if (! ::CORBA::is_nil (csl) || CIAO_debug_level >= 10)
+ {
+ return ::DDS::REQUESTED_INCOMPATIBLE_QOS_STATUS |
+ ::DDS::SAMPLE_REJECTED_STATUS |
+ ::DDS::LIVELINESS_CHANGED_STATUS |
+ ::DDS::SUBSCRIPTION_MATCHED_STATUS;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.h
new file mode 100644
index 00000000000..7cdf42eb1a5
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/SubscriberListener_T.h
@@ -0,0 +1,87 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS_SUBSCRIBERLISTENER_T_H_
+#define DDS_SUBSCRIBERLISTENER_T_H_
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Reactor;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class SubscriberListener_T :
+ public ::DDS::CCM_SubscriberListener,
+ private ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ SubscriberListener_T (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ACE_Reactor* reactor);
+
+ /// Destructor
+ virtual ~SubscriberListener_T (void);
+
+ virtual void on_requested_incompatible_qos (
+ ::DDS::DataReader_ptr reader,
+ const ::DDS::RequestedIncompatibleQosStatus & status);
+
+ virtual void on_liveliness_changed(
+ ::DDS::DataReader* reader,
+ const ::DDS::LivelinessChangedStatus& status);
+
+ virtual void on_sample_rejected(
+ ::DDS::DataReader* reader,
+ const ::DDS::SampleRejectedStatus& status);
+
+ virtual void on_subscription_matched(
+ ::DDS::DataReader* reader,
+ const ::DDS::SubscriptionMatchedStatus& status);
+
+ virtual void on_data_on_readers(
+ ::DDS::Subscriber* subscriber);
+
+ virtual void on_requested_deadline_missed (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::RequestedDeadlineMissedStatus & );
+
+ virtual void on_data_available (
+ ::DDS::DataReader_ptr );
+
+ virtual void on_sample_lost (
+ ::DDS::DataReader_ptr ,
+ const ::DDS::SampleLostStatus & );
+
+ static ::DDS::StatusMask get_mask (
+ ::CCM_DDS::ConnectorStatusListener_ptr csl);
+
+ private:
+ typename CCM_TYPE::context_type::_var_type context_;
+
+ virtual void on_unexpected_status(
+ ::DDS::Entity_ptr entity,
+ ::DDS::StatusKind status_kind);
+
+ ::CCM_DDS::ConnectorStatusListener_var error_listener_;
+
+ ACE_Reactor* reactor_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/SubscriberListener_T.cpp"
+
+#endif /* DDS_SUBSCRIBERLISTENER_T_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/TimeUtilities.h b/modules/CIAO/connectors/dds4ccm/impl/dds/TimeUtilities.h
new file mode 100644
index 00000000000..e6f1050e518
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/TimeUtilities.h
@@ -0,0 +1,34 @@
+// $Id$
+
+//=============================================================================
+/**
+ * @file TimeUtilities.h
+ *
+ * $Id$
+ *
+ * @author Marcel Smit <msmit@remedy.nl>
+ */
+//=============================================================================
+
+
+#ifndef DDS4CCM_TIME_UTILITIES_H
+#define DDS4CCM_TIME_UTILITIES_H
+
+#include "ace/Time_Value.h"
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+
+inline void
+operator<<= (::DDS::Time_t & dds_time, const ::ACE_Time_Value & ace_time)
+{
+ dds_time.sec = static_cast < ::CORBA::Long> (ace_time.sec ());
+ dds_time.nanosec = ace_time.usec () * 1000;
+}
+
+inline void
+operator<<= (::ACE_Time_Value & ace_time, const ::DDS::Time_t &dds_time)
+{
+ ace_time.sec (dds_time.sec);
+ ace_time.usec (dds_time.nanosec/1000);
+}
+
+#endif /* DDS4CCM_TIME_UTILITIES_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Topic.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Topic.cpp
new file mode 100644
index 00000000000..d0ce219972a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Topic.cpp
@@ -0,0 +1,217 @@
+// $Id$
+
+#include "Topic.h"
+#include "ContentFilteredTopic.h"
+#include "StatusCondition.h"
+#include "TopicListener.h"
+
+#include "ndds/InstanceHandle_t.h"
+#include "ndds/InconsistentTopicStatus.h"
+#include "ndds/TopicQos.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_Topic_i::CCM_DDS_Topic_i (DDSTopic* topic)
+ : impl_ (topic)
+ {
+ }
+
+ CCM_DDS_Topic_i::~CCM_DDS_Topic_i (void)
+ {
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Topic_i::set_qos (const ::DDS::TopicQos &qos)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_TopicQos ddsqos;
+ ddsqos <<= qos;
+ return this->impl ()->set_qos (ddsqos);
+#else
+ return this->impl ()->set_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Topic_i::get_qos (::DDS::TopicQos &qos)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_TopicQos ddsqos;
+ ::DDS_ReturnCode_t const retval = this->impl ()->get_qos (ddsqos);
+ qos <<= ddsqos;
+ return retval;
+#else
+ return this->impl ()->get_qos (qos);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Topic_i::set_listener (
+ ::DDS::TopicListener_ptr a_listener,
+ ::DDS::StatusMask mask)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Topic_i::set_listener");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ CCM_DDS_TopicListener_i *ccm_dds_impl_list = 0;
+ if (! ::CORBA::is_nil (a_listener))
+ {
+ ACE_NEW_THROW_EX (ccm_dds_impl_list,
+ CCM_DDS_TopicListener_i (a_listener),
+ CORBA::NO_MEMORY ());
+ }
+ return this->impl ()->set_listener (ccm_dds_impl_list, mask);
+#else
+ return this->impl ()->set_listener (a_listener, mask);
+#endif
+ }
+
+ ::DDS::TopicListener_ptr
+ CCM_DDS_Topic_i::get_listener (void)
+ {
+ DDS4CCM_TRACE ("CCM_DDS_Topic_i::get_listener");
+
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSTopicListener *ccm_dds_topic_list = this->impl ()->get_listener ();
+ CCM_DDS_TopicListener_i *list_proxy = dynamic_cast <CCM_DDS_TopicListener_i *> (ccm_dds_topic_list);
+ if (!list_proxy)
+ {
+ DDS4CCM_DEBUG (6, (LM_DEBUG, "CCM_DDS_Topic_i::get_listener - "
+ "DDS returned a NIL listener.\n"));
+ return ::DDS::TopicListener::_nil ();
+ }
+ return list_proxy->get_topiclistener ();
+#else
+ return this->impl ()->get_listener ();
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Topic_i::get_inconsistent_topic_status (
+ ::DDS::InconsistentTopicStatus & a_status)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDS_InconsistentTopicStatus ddsstatus;
+ ::DDS::ReturnCode_t const retval = this->impl ()->get_inconsistent_topic_status (ddsstatus);
+ a_status <<= ddsstatus;;
+ return retval;
+#else
+ return this->impl ()->get_inconsistent_topic_status (a_status);
+#endif
+ }
+
+ ::DDS::ReturnCode_t
+ CCM_DDS_Topic_i::enable (void)
+ {
+ return this->impl ()->enable ();
+ }
+
+ ::DDS::StatusCondition_ptr
+ CCM_DDS_Topic_i::get_statuscondition (void)
+ {
+ ::DDS::StatusCondition_var retval = ::DDS::StatusCondition::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSStatusCondition* sc = this->impl ()->get_statuscondition ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc),
+ CORBA::NO_MEMORY ());
+#else
+ ::DDS::StatusCondition_var sc = this->impl ()->get_statuscondition ();
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_StatusCondition_i (sc.in ()),
+ CORBA::NO_MEMORY ());
+#endif
+ return retval._retn ();
+ }
+
+ ::DDS::StatusMask
+ CCM_DDS_Topic_i::get_status_changes (void)
+ {
+ return this->impl ()->get_status_changes ();
+ }
+
+ ::DDS::InstanceHandle_t
+ CCM_DDS_Topic_i::get_instance_handle (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS_InstanceHandle_t const rtihandle = this->impl ()->get_instance_handle ();
+ ::DDS::InstanceHandle_t handle;
+ handle <<= rtihandle;
+ return handle;
+#else
+ return this->impl ()->get_instance_handle ();
+#endif
+ }
+
+ char *
+ CCM_DDS_Topic_i::get_type_name (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ return CORBA::string_dup (this->impl ()->get_type_name ());
+#else
+ return this->impl ()->get_type_name ();
+#endif
+ }
+
+ char *
+ CCM_DDS_Topic_i::get_name (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ return CORBA::string_dup (this->impl ()->get_name ());
+#else
+ return this->impl ()->get_name ();
+#endif
+ }
+
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_Topic_i::get_participant (void)
+ {
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDomainParticipant* p = this->impl ()->get_participant ();
+ if (p)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::DomainParticipant_var p = this->impl ()->get_participant ();
+ if (! ::CORBA::is_nil (p.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ DDSTopic *
+ CCM_DDS_Topic_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_Topic_i::set_impl (DDSTopic * topic)
+ {
+ this->impl_ = topic;
+ }
+
+ DDSTopic *
+ CCM_DDS_Topic_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Topic.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Topic.h
new file mode 100644
index 00000000000..981835d8e91
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Topic.h
@@ -0,0 +1,83 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef CIAO_NDDS_TOPIC_H
+#define CIAO_NDDS_TOPIC_H
+
+#include "DomainParticipant.h"
+
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "tao/LocalObject.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::Topic DDSTopic;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_Topic_i :
+ public virtual ::DDS::CCM_Topic,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_Topic_i (DDSTopic* topic);
+
+ /// Destructor
+ virtual ~CCM_DDS_Topic_i (void);
+
+ virtual ::DDS::ReturnCode_t set_qos (const ::DDS::TopicQos & qos);
+
+ virtual ::DDS::ReturnCode_t get_qos (::DDS::TopicQos & qos);
+
+ virtual ::DDS::ReturnCode_t set_listener (
+ ::DDS::TopicListener_ptr a_listener,
+ ::DDS::StatusMask mask);
+
+ virtual ::DDS::TopicListener_ptr get_listener (void);
+
+ virtual ::DDS::ReturnCode_t get_inconsistent_topic_status (
+ ::DDS::InconsistentTopicStatus & a_status);
+
+ virtual
+ ::DDS::ReturnCode_t enable (void);
+
+ virtual
+ ::DDS::StatusCondition_ptr get_statuscondition (void);
+
+ virtual
+ ::DDS::StatusMask get_status_changes (void);
+
+ virtual
+ ::DDS::InstanceHandle_t get_instance_handle (void);
+
+ virtual
+ char * get_type_name (void);
+
+ virtual
+ char * get_name (void);
+
+ virtual
+ ::DDS::DomainParticipant_ptr get_participant (void);
+
+ DDSTopic * get_impl (void);
+
+ void set_impl (DDSTopic* topic);
+
+ private:
+ DDSTopic * impl_;
+
+ DDSTopic * impl (void);
+ };
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.cpp
new file mode 100644
index 00000000000..298c3b5c567
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.cpp
@@ -0,0 +1,90 @@
+// $Id$
+
+#include "TopicDescription.h"
+#include "DomainParticipant.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_TopicDescription_i::CCM_DDS_TopicDescription_i (
+ DDSTopicDescription * rc) : impl_ (rc)
+ {
+ }
+
+ CCM_DDS_TopicDescription_i::~CCM_DDS_TopicDescription_i (void)
+ {
+ }
+
+ char *
+ CCM_DDS_TopicDescription_i::get_type_name (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ return CORBA::string_dup (this->impl ()->get_type_name ());
+#else
+ return this->impl ()->get_type_name ();
+#endif
+ }
+
+ char *
+ CCM_DDS_TopicDescription_i::get_name (void)
+ {
+#if (CIAO_DDS4CCM_NDDS==1)
+ return CORBA::string_dup (this->impl ()->get_name ());
+#else
+ return this->impl ()->get_name ();
+#endif
+ }
+
+ ::DDS::DomainParticipant_ptr
+ CCM_DDS_TopicDescription_i::get_participant (void)
+ {
+ ::DDS::DomainParticipant_var retval = ::DDS::DomainParticipant::_nil ();
+#if (CIAO_DDS4CCM_NDDS==1)
+ DDSDomainParticipant* p = this->impl ()->get_participant ();
+ if (p)
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p),
+ CORBA::NO_MEMORY ());
+ }
+#else
+ ::DDS::DomainParticipant_var p = this->impl ()->get_participant ();
+ if (! ::CORBA::is_nil (p.in ()))
+ {
+ ACE_NEW_THROW_EX (retval,
+ CCM_DDS_DomainParticipant_i (p.in ()),
+ CORBA::NO_MEMORY ());
+ }
+#endif
+ return retval._retn ();
+ }
+
+ DDSTopicDescription *
+ CCM_DDS_TopicDescription_i::get_impl (void)
+ {
+ return this->impl_;
+ }
+
+ void
+ CCM_DDS_TopicDescription_i::set_impl (DDSTopicDescription * rc)
+ {
+ this->impl_ = rc;
+ }
+
+ DDSTopicDescription *
+ CCM_DDS_TopicDescription_i::impl (void)
+ {
+ if (!this->impl_)
+ {
+ throw ::CORBA::BAD_INV_ORDER ();
+ }
+ return this->impl_;
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.h b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.h
new file mode 100644
index 00000000000..b107d4c75ac
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicDescription.h
@@ -0,0 +1,64 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef CIAO_DDS4CCM_TOPICDESCRIPTION_H
+#define CIAO_DDS4CCM_TOPICDESCRIPTION_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsEC.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds/dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#endif
+
+#include "tao/LocalObject.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::TopicDescription DDSTopicDescription;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_TopicDescription_i :
+ public virtual ::DDS::CCM_TopicDescription,
+ public virtual ::CORBA::LocalObject
+ {
+ public:
+ /// Constructor
+ CCM_DDS_TopicDescription_i (DDSTopicDescription * rc);
+
+ /// Destructor
+ virtual ~CCM_DDS_TopicDescription_i (void);
+
+ virtual char * get_type_name (void);
+
+ virtual char * get_name (void);
+
+ virtual ::DDS::DomainParticipant_ptr get_participant (void);
+
+ DDSTopicDescription * get_impl (void);
+
+ void set_impl (DDSTopicDescription * rc);
+
+ private:
+ DDSTopicDescription * impl_;
+
+ DDSTopicDescription * impl (void);
+ };
+ }
+}
+
+#endif /* CIAO_DDS4CCM_TOPICDESCRIPTION_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.cpp
new file mode 100644
index 00000000000..e2fcd574ce5
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.cpp
@@ -0,0 +1,49 @@
+// $Id$
+
+#include "TopicListener.h"
+#include "Topic.h"
+
+#include "ndds/InconsistentTopicStatus.h"
+
+#include "dds4ccm/idl/dds4ccm_BaseC.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ CCM_DDS_TopicListener_i::CCM_DDS_TopicListener_i (::DDS::TopicListener_ptr p)
+ : impl_ (::DDS::TopicListener::_duplicate (p))
+ {
+ }
+
+ CCM_DDS_TopicListener_i::~CCM_DDS_TopicListener_i (void)
+ {
+ }
+
+ void
+ CCM_DDS_TopicListener_i::on_inconsistent_topic (
+ ::DDSTopic* the_topic,
+ const ::DDS_InconsistentTopicStatus & status)
+ {
+ ::DDS::Topic_var dds_topic = ::DDS::Topic::_nil ();
+ ACE_NEW (dds_topic,
+ CCM_DDS_Topic_i (the_topic));
+#if (CIAO_DDS4CCM_NDDS==1)
+ ::DDS::InconsistentTopicStatus ddsstatus;
+ ddsstatus <<= status;
+ this->impl_->on_inconsistent_topic (dds_topic.in (), ddsstatus);
+#else
+ this->impl_->on_inconsistent_topic (dds_topic.in (), status);
+#endif
+ }
+
+ ::DDS::TopicListener_ptr
+ CCM_DDS_TopicListener_i::get_topiclistener (void)
+ {
+ return ::DDS::TopicListener::_duplicate (this->impl_.in ());
+ }
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.h b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.h
new file mode 100644
index 00000000000..553131e0070
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener.h
@@ -0,0 +1,53 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_TOPICLISTENER_H
+#define DDS4CCM_TOPICLISTENER_H
+
+#include "tao/LocalObject.h"
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm_dds_impl_export.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+# include "ndds/ndds_cpp.h"
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::TopicListener DDSTopicListener;
+typedef ::DDS::Topic DDSTopic;
+typedef ::DDS::InconsistentTopicStatus DDS_InconsistentTopicStatus;
+#endif
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ class DDS4CCM_DDS_IMPL_Export CCM_DDS_TopicListener_i :
+ public virtual ::DDSTopicListener
+ {
+ public:
+ /// Constructor
+ CCM_DDS_TopicListener_i (::DDS::TopicListener_ptr p);
+
+ /// Destructor
+ virtual ~CCM_DDS_TopicListener_i (void);
+
+ virtual void on_inconsistent_topic(
+ ::DDSTopic* topic,
+ const ::DDS_InconsistentTopicStatus& status);
+
+ ::DDS::TopicListener_ptr get_topiclistener (void);
+ private:
+ ::DDS::TopicListener_var impl_;
+ };
+ }
+}
+
+#endif /* DDS4CCM_TOPICLISTENER_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.cpp
new file mode 100644
index 00000000000..b9d60532edb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.cpp
@@ -0,0 +1,78 @@
+// $Id$
+#include "dds4ccm/impl/dds/Utils.h"
+
+#include "dds4ccm/impl/dds/Topic.h"
+#include "dds4ccm/impl/dds/DDSCallbackStatusHandler.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::TopicListener_T<DDS_TYPE, CCM_TYPE>::TopicListener_T (
+ ::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ACE_Reactor* reactor) :
+ error_listener_ (::CCM_DDS::ConnectorStatusListener::_duplicate (error_listener)),
+ reactor_ (reactor)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::TopicListener_T::TopicListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::TopicListener_T<DDS_TYPE, CCM_TYPE>::~TopicListener_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::TopicListener_T::~TopicListener_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::TopicListener_T<DDS_TYPE, CCM_TYPE>::on_inconsistent_topic (
+ ::DDS::Topic_ptr the_topic,
+ const ::DDS::InconsistentTopicStatus & status)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::TopicListener_T::on_inconsistent_topic");
+
+ DDS4CCM_DEBUG (10, (LM_DEBUG, CLINFO
+ ACE_TEXT ("TopicListener_T::on_inconsistent_topic: ")
+ ACE_TEXT ("total count <%d> - total change <%d> - "),
+ status.total_count, status.total_count_change));
+
+ if (! ::CORBA::is_nil (this->error_listener_.in ()))
+ {
+ if (this->reactor_)
+ {
+ ::CIAO::DDS4CCM::OnInconsistentTopicHandler* rh = 0;
+ ACE_NEW (rh,
+ ::CIAO::DDS4CCM::OnInconsistentTopicHandler (
+ this->error_listener_,
+ the_topic,
+ status));
+ ACE_Event_Handler_var safe_handler (rh);
+ if (this->reactor_->notify (rh) != 0)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO
+ ACE_TEXT ("TopicListener_T::on_inconsistent_topic: ")
+ ACE_TEXT ("failed to use reactor.\n")));
+ }
+ }
+ else
+ {
+ this->error_listener_->on_inconsistent_topic (the_topic, status);
+ }
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+::DDS::StatusMask
+CIAO::DDS4CCM::TopicListener_T<DDS_TYPE, CCM_TYPE>::get_mask (
+ CCM_DDS::ConnectorStatusListener_ptr error_listener)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::TopicListener_T::get_mask");
+
+ if (! ::CORBA::is_nil (error_listener) || CIAO_debug_level >= 10)
+ {
+ return ::DDS::INCONSISTENT_TOPIC_STATUS;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.h
new file mode 100644
index 00000000000..609978767e8
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/TopicListener_T.h
@@ -0,0 +1,47 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Reactor;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class TopicListener_T :
+ public ::DDS::TopicListener,
+ private ACE_Copy_Disabled
+ {
+ public:
+ /// Constructor
+ TopicListener_T (::CCM_DDS::ConnectorStatusListener_ptr error_listener,
+ ACE_Reactor* reactor);
+
+ /// Destructor
+ virtual ~TopicListener_T (void);
+
+ virtual void on_inconsistent_topic (
+ ::DDS::Topic_ptr the_topic,
+ const ::DDS::InconsistentTopicStatus & status);
+
+ static ::DDS::StatusMask get_mask (
+ CCM_DDS::ConnectorStatusListener_ptr error_listener);
+
+ private:
+ CCM_DDS::ConnectorStatusListener_var error_listener_;
+ ACE_Reactor* reactor_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/TopicListener_T.cpp"
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.cpp
new file mode 100644
index 00000000000..ee905982084
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.cpp
@@ -0,0 +1,304 @@
+// $Id$
+
+#include "dds4ccm/impl/dds/DataWriter.h"
+#include "dds4ccm/impl/dds/Utils.h"
+#include "dds4ccm/impl/dds/Coherent_Changes_Guard.h"
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::Updater_T (void)
+ : InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, typename CCM_TYPE::updater_type> (),
+ is_global_scope_ (false),
+ is_coherent_write_ (false)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::Updater_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::~Updater_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::~Updater_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+bool
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::is_global_scope ()
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::is_global_scope");
+ return this->is_global_scope_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+bool
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::is_coherent_write ()
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::is_coherent_write");
+ return this->is_coherent_write_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::is_coherent_write (bool value)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::is_coherent_write");
+ this->is_coherent_write_ = value;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::create_i (
+ const typename DDS_TYPE::value_type & an_instance,
+ ::CCM_DDS::DataNumber_t index)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::create_i");
+ DDS_InstanceHandle_t const hnd = this->impl ()->register_instance (an_instance);
+ if (DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR,
+ ACE_TEXT ("CIAO::DDS4CCM::Updater_T::create_i: ")
+ ACE_TEXT ("Unable to unregister instance, nil handle.\n")));
+ throw CCM_DDS::InternalError (::DDS_RETCODE_ERROR, index);
+ }
+ ::DDS_ReturnCode_t const result = this->impl ()->write (an_instance, hnd);
+ if (result != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR,
+ ACE_TEXT ("CIAO::DDS4CCM::Updater_T::create_i: ")
+ ACE_TEXT ("Unable to update data, error %C.\n"),
+ translate_retcode (result)));
+ throw CCM_DDS::InternalError (result, index);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::create_one (
+ const typename DDS_TYPE::value_type & an_instance)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::create_one");
+ DDS_InstanceHandle_t const hnd = this->impl ()->lookup_instance (an_instance);
+ if (!DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ throw CCM_DDS::AlreadyCreated (0);
+ }
+
+ this->create_i (an_instance, 0);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::update_i (
+ const typename DDS_TYPE::value_type & an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle,
+ ::CCM_DDS::DataNumber_t index)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::update_i");
+ DDS_InstanceHandle_t hnd = ::DDS_HANDLE_NIL;
+ hnd <<= instance_handle;
+ ::DDS_ReturnCode_t const result = this->impl ()->write (an_instance, hnd);
+ if (result != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR,
+ ACE_TEXT ("CIAO::DDS4CCM::Updater_T::update_i: ")
+ ACE_TEXT ("Unable to update data, error %C.\n"),
+ translate_retcode (result)));
+ throw CCM_DDS::InternalError (result, index);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::update_one (
+ const typename DDS_TYPE::value_type & an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::update_one");
+ DDS_InstanceHandle_t hnd = ::DDS_HANDLE_NIL;
+ hnd <<= instance_handle;
+ if (DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ hnd = this->impl ()->lookup_instance (an_instance);
+ }
+ else
+ {
+ // Check explicitly if the instance handle matches the instance, this
+ // is not checked by RTI DDS
+ DDS_InstanceHandle_t const instance_handle =
+ this->impl ()->lookup_instance (an_instance);
+
+ if (!DDS_InstanceHandle_equals (&hnd, &instance_handle))
+ {
+ throw CCM_DDS::InternalError (::DDS_RETCODE_BAD_PARAMETER, 0);
+ }
+ }
+ if (DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ throw CCM_DDS::NonExistent (0);
+ }
+ this->update_i (an_instance, instance_handle, 0);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::delete_i (
+ const typename DDS_TYPE::value_type & an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle,
+ ::CCM_DDS::DataNumber_t index)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::delete_i");
+ DDS_InstanceHandle_t hnd = ::DDS_HANDLE_NIL;
+ hnd <<= instance_handle;
+ ::DDS_ReturnCode_t result = this->impl ()->dispose (an_instance, hnd);
+ if (result != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR,
+ ACE_TEXT ("CIAO::DDS4CCM::Updater_T::delete_i: ")
+ ACE_TEXT ("Unable to dispose instance, error %C.\n"),
+ translate_retcode (result)));
+ throw CCM_DDS::InternalError (result, index);
+ }
+ result =
+ this->impl ()->unregister_instance (an_instance, hnd);
+ if (result != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR,
+ ACE_TEXT ("CIAO::DDS4CCM::Updater_T::delete_i: ")
+ ACE_TEXT ("Unable to unregister instance, error %C.\n"),
+ translate_retcode (result)));
+ throw CCM_DDS::InternalError (result, index);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::delete_one (
+ const typename DDS_TYPE::value_type & an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::delete_one");
+ DDS_InstanceHandle_t hnd = ::DDS_HANDLE_NIL;
+ hnd <<= instance_handle;
+ if (DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ hnd = this->impl ()->lookup_instance (an_instance);
+ }
+ else
+ {
+ // Check explicitly if the instance handle matches the instance, this
+ // is not checked by RTI DDS
+ DDS_InstanceHandle_t const instance_handle =
+ this->impl ()->lookup_instance (an_instance);
+
+ if (!DDS_InstanceHandle_equals (&hnd, &instance_handle))
+ {
+ throw CCM_DDS::InternalError (::DDS_RETCODE_BAD_PARAMETER, 0);
+ }
+ }
+ if (DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ throw CCM_DDS::NonExistent (0);
+ }
+ this->delete_i (an_instance, instance_handle, 0);
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::create_many (
+ const typename CCM_TYPE::seq_type& data)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::create_many");
+
+ // Check for existance of instances
+ this->check_already_created (data);
+
+ Coherent_Changes_Guard guard (this->impl ()->get_publisher(),
+ this->is_coherent_write_);
+
+ for (typename CCM_TYPE::seq_type::size_type index = 0; index < data.length (); index++)
+ {
+ this->create_i (data[index], index);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::check_existent (
+ const typename CCM_TYPE::seq_type& data)
+{
+ ::CCM_DDS::NonExistent exception;
+ for (typename CCM_TYPE::seq_type::size_type index = 0; index < data.length (); index++)
+ {
+ DDS_InstanceHandle_t const hnd = this->impl ()->lookup_instance (data[index]);
+ if (::DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ CORBA::ULong const length = exception.indexes.length ();
+ exception.indexes.length (length + 1);
+ exception.indexes[length] = index;
+ }
+ }
+
+ if (exception.indexes.length () > 0)
+ {
+ throw exception;
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::check_already_created (
+ const typename CCM_TYPE::seq_type& data)
+{
+ ::CCM_DDS::AlreadyCreated exception;
+ for (typename CCM_TYPE::seq_type::size_type index = 0; index < data.length (); index++)
+ {
+ DDS_InstanceHandle_t const hnd = this->impl ()->lookup_instance (data[index]);
+ if (!::DDS_InstanceHandle_equals (&hnd, &::DDS_HANDLE_NIL))
+ {
+ CORBA::ULong const length = exception.indexes.length ();
+ exception.indexes.length (length + 1);
+ exception.indexes[length] = index;
+ }
+ }
+
+ if (exception.indexes.length () > 0)
+ {
+ throw exception;
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::update_many (
+ const typename CCM_TYPE::seq_type& data)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::update_many");
+
+ // Check for existance of instances
+ this->check_existent (data);
+
+ Coherent_Changes_Guard guard (this->impl ()->get_publisher(), this->is_coherent_write_);
+
+ for (typename CCM_TYPE::seq_type::size_type index = 0; index < data.length (); index++)
+ {
+ this->update_i (data[index], ::DDS::HANDLE_NIL, index);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE>
+void
+CIAO::DDS4CCM::Updater_T<DDS_TYPE, CCM_TYPE>::delete_many (
+ const typename CCM_TYPE::seq_type& data)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Updater_T::delete_many");
+
+ // Check for existance of instances
+ this->check_existent (data);
+
+ Coherent_Changes_Guard guard (this->impl ()->get_publisher(), this->is_coherent_write_);
+
+ for (typename CCM_TYPE::seq_type::size_type index = 0; index < data.length (); index++)
+ {
+ this->delete_i (data[index], ::DDS::HANDLE_NIL, index);
+ }
+}
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.h
new file mode 100644
index 00000000000..376e333005e
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Updater_T.h
@@ -0,0 +1,86 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_UPDATER_H
+#define DDS4CCM_UPDATER_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+#include "InstanceHandleManager_T.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class Updater_T :
+ public InstanceHandleManager_T <DDS_TYPE, CCM_TYPE, typename CCM_TYPE::updater_type>
+ {
+ public:
+ /// Constructor
+ Updater_T (void);
+
+ /// Destructor
+ virtual ~Updater_T (void);
+
+ virtual void create_one (
+ const typename DDS_TYPE::value_type& an_instance);
+
+ virtual void update_one (
+ const typename DDS_TYPE::value_type& an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle);
+
+ virtual void delete_one (
+ const typename DDS_TYPE::value_type& an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle);
+
+ virtual void create_many (
+ const typename CCM_TYPE::seq_type& data);
+
+ virtual void update_many (
+ const typename CCM_TYPE::seq_type& data);
+
+ virtual void delete_many (
+ const typename CCM_TYPE::seq_type& data);
+
+ virtual bool is_global_scope ();
+
+ virtual bool is_coherent_write ();
+
+ virtual void is_coherent_write (bool value_);
+
+ private:
+ void create_i (
+ const typename DDS_TYPE::value_type& an_instance,
+ ::CCM_DDS::DataNumber_t index);
+
+ void update_i (
+ const typename DDS_TYPE::value_type& an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle,
+ ::CCM_DDS::DataNumber_t index);
+
+ void delete_i (
+ const typename DDS_TYPE::value_type& an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle,
+ ::CCM_DDS::DataNumber_t index);
+
+ void check_existent (
+ const typename CCM_TYPE::seq_type& data);
+
+ void check_already_created (
+ const typename CCM_TYPE::seq_type& data);
+
+ bool is_global_scope_;
+ bool is_coherent_write_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/Updater_T.cpp"
+
+#endif /* DDS4CCM_UPDATER_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Utils.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Utils.cpp
new file mode 100644
index 00000000000..0f270083afb
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Utils.cpp
@@ -0,0 +1,10 @@
+// $Id$
+
+#include "Utils.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Utils.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Utils.h
new file mode 100644
index 00000000000..a4d2c1a5f1a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Utils.h
@@ -0,0 +1,91 @@
+/**
+ * @file Utils.h
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ *
+ * $Id$
+ *
+ * Misc utility classes for NDDS.
+ */
+
+#ifndef NDDS_UTILS_H
+#define NDDS_UTILS_H
+
+#include "dds4ccm_dds_impl_export.h"
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ inline const char * translate_retcode (::DDS::ReturnCode_t ret)
+ {
+#define RTI_DDS_RETCODE(X) case X: return #X
+ switch (ret)
+ {
+ RTI_DDS_RETCODE (DDS::RETCODE_OK);
+ RTI_DDS_RETCODE (DDS::RETCODE_ERROR);
+ RTI_DDS_RETCODE (DDS::RETCODE_UNSUPPORTED);
+ RTI_DDS_RETCODE (DDS::RETCODE_BAD_PARAMETER);
+ RTI_DDS_RETCODE (DDS::RETCODE_PRECONDITION_NOT_MET);
+ RTI_DDS_RETCODE (DDS::RETCODE_OUT_OF_RESOURCES);
+ RTI_DDS_RETCODE (DDS::RETCODE_NOT_ENABLED);
+ RTI_DDS_RETCODE (DDS::RETCODE_IMMUTABLE_POLICY);
+ RTI_DDS_RETCODE (DDS::RETCODE_INCONSISTENT_POLICY);
+ RTI_DDS_RETCODE (DDS::RETCODE_ALREADY_DELETED);
+ RTI_DDS_RETCODE (DDS::RETCODE_TIMEOUT);
+ RTI_DDS_RETCODE (DDS::RETCODE_NO_DATA);
+ RTI_DDS_RETCODE (DDS::RETCODE_ILLEGAL_OPERATION);
+ }
+ return "***Unknown enum value, update RTI::translate_retcode()";
+#undef RTI_DDS_RETCODE
+ }
+
+ inline const char * translate_statuskind (DDS::StatusKind ret)
+ {
+#define RTI_DDS_RETCODE(X) case X: return #X
+ switch (ret)
+ {
+ RTI_DDS_RETCODE (DDS::INCONSISTENT_TOPIC_STATUS);
+ RTI_DDS_RETCODE (DDS::OFFERED_DEADLINE_MISSED_STATUS);
+ RTI_DDS_RETCODE (DDS::REQUESTED_DEADLINE_MISSED_STATUS);
+ RTI_DDS_RETCODE (DDS::OFFERED_INCOMPATIBLE_QOS_STATUS);
+ RTI_DDS_RETCODE (DDS::REQUESTED_INCOMPATIBLE_QOS_STATUS);
+ RTI_DDS_RETCODE (DDS::SAMPLE_LOST_STATUS);
+ RTI_DDS_RETCODE (DDS::SAMPLE_REJECTED_STATUS);
+ RTI_DDS_RETCODE (DDS::DATA_ON_READERS_STATUS);
+ RTI_DDS_RETCODE (DDS::DATA_AVAILABLE_STATUS);
+ RTI_DDS_RETCODE (DDS::LIVELINESS_LOST_STATUS);
+ RTI_DDS_RETCODE (DDS::LIVELINESS_CHANGED_STATUS);
+ RTI_DDS_RETCODE (DDS::PUBLICATION_MATCHED_STATUS);
+ RTI_DDS_RETCODE (DDS::SUBSCRIPTION_MATCHED_STATUS);
+#if (CIAO_DDS4CCM_NDDS==1)
+ RTI_DDS_RETCODE (DDS::RELIABLE_WRITER_CACHE_CHANGED_STATUS);
+ RTI_DDS_RETCODE (DDS::RELIABLE_READER_ACTIVITY_CHANGED_STATUS);
+#endif
+ //RTI_DDS_RETCODE (DDS::DATA_WRITER_CACHE_STATUS);
+ //RTI_DDS_RETCODE (DDS::DATA_WRITER_PROTOCOL_STATUS);
+ //RTI_DDS_RETCODE (DDS::DATA_READER_CACHE_STATUS);
+ //RTI_DDS_RETCODE (DDS::DATA_READER_PROTOCOL_STATUS);
+ }
+ return "***Unknown enum value, update RTI::translate_statuskind()";
+#undef RTI_DDS_RETCODE
+ }
+
+ inline const char * translate_rejectedstatuskind (DDS::SampleRejectedStatusKind ret)
+ {
+#define RTI_DDS_RETCODE(X) case X: return #X
+ switch (ret)
+ {
+ RTI_DDS_RETCODE (DDS::NOT_REJECTED);
+ RTI_DDS_RETCODE (DDS::REJECTED_BY_INSTANCES_LIMIT);
+ RTI_DDS_RETCODE (DDS::REJECTED_BY_SAMPLES_LIMIT);
+ RTI_DDS_RETCODE (DDS::REJECTED_BY_SAMPLES_PER_INSTANCE_LIMIT);
+ }
+ return "***Unknown enum value, update RTI::translate_rejectedstatuskind()";
+#undef RTI_DDS_RETCODE
+ }
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.cpp b/modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.cpp
new file mode 100644
index 00000000000..f7837a19975
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.cpp
@@ -0,0 +1,98 @@
+// $Id$
+
+#include "dds4ccm/impl/dds/DataWriter.h"
+#include "dds4ccm/impl/dds/Utils.h"
+#include "dds4ccm/impl/dds/Coherent_Changes_Guard.h"
+
+#include "dds4ccm/impl/dds/ndds/InstanceHandle_t.h"
+
+#include "dds4ccm/impl/logger/Log_Macros.h"
+
+template <typename DDS_TYPE, typename CCM_TYPE >
+CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE>::Writer_T (void)
+ : InstanceHandleManager_T<DDS_TYPE, CCM_TYPE, typename CCM_TYPE::writer_type> (),
+ is_coherent_write_ (false)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Writer_T::Writer_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE >
+CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE>::~Writer_T (void)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Writer_T::~Writer_T");
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE >
+void
+CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE>::write_i (
+ const typename DDS_TYPE::value_type& datum,
+ const ::DDS::InstanceHandle_t& instance_handle,
+ ::CCM_DDS::DataNumber_t index)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Writer_T::write_i");
+
+ ::DDS_InstanceHandle_t handle = ::DDS_HANDLE_NIL;
+ handle <<= instance_handle;
+ DDS_ReturnCode_t const retval = this->impl ()->write (datum, handle);
+
+ if (retval != DDS_RETCODE_OK)
+ {
+ DDS4CCM_ERROR (1, (LM_ERROR, CLINFO "CIAO::DDS4CCM::Writer_T::write_i - "
+ "Write unsuccessful, received error code %C\n",
+ translate_retcode (retval)));
+ throw CCM_DDS::InternalError (retval, index);
+ }
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE >
+void
+CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE>::write_one (
+ const typename DDS_TYPE::value_type & an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Writer_T::write_one");
+
+ this->write_i (an_instance, instance_handle, 0);
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CIAO::DDS4CCM::Writer_T::write_one - "
+ "Write successful\n"));
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE >
+void
+CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE>::write_many (
+ const typename CCM_TYPE::seq_type& instances)
+{
+ DDS4CCM_TRACE ("CIAO::DDS4CCM::Writer_T::write_many");
+
+ Coherent_Changes_Guard guard (this->impl ()->get_publisher(),
+ this->is_coherent_write_);
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CIAO::DDS4CCM::Writer_T::write_many - "
+ "Preparing to write to DDS\n"));
+
+ for (typename CCM_TYPE::seq_type::size_type index = 0;
+ index < instances.length();
+ index++)
+ {
+ this->write_i (instances[index], ::DDS::HANDLE_NIL, index);
+ }
+
+ DDS4CCM_DEBUG (9, (LM_TRACE, CLINFO "CIAO::DDS4CCM::Writer_T::write_many - "
+ "Write successful\n"));
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE >
+::CORBA::Boolean
+CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE>::is_coherent_write (void)
+{
+ return this->is_coherent_write_;
+}
+
+template <typename DDS_TYPE, typename CCM_TYPE >
+void
+CIAO::DDS4CCM::Writer_T<DDS_TYPE, CCM_TYPE>::is_coherent_write (
+ ::CORBA::Boolean value)
+{
+ this->is_coherent_write_ = value;
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.h b/modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.h
new file mode 100644
index 00000000000..d38887768c5
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/Writer_T.h
@@ -0,0 +1,55 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef WRITER_T_H
+#define WRITER_T_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "ace/Copy_Disabled.h"
+#include "InstanceHandleManager_T.h"
+
+namespace CIAO
+{
+ namespace DDS4CCM
+ {
+ template <typename DDS_TYPE, typename CCM_TYPE>
+ class Writer_T :
+ public InstanceHandleManager_T <DDS_TYPE, CCM_TYPE, typename CCM_TYPE::writer_type>
+ {
+ public:
+ /// Constructor
+ Writer_T (void);
+
+ /// Destructor
+ virtual ~Writer_T (void);
+
+ virtual void write_one (
+ const typename DDS_TYPE::value_type& an_instance,
+ const ::DDS::InstanceHandle_t & instance_handle);
+
+ virtual void write_many (
+ const typename CCM_TYPE::seq_type& instances);
+
+ virtual ::CORBA::Boolean is_coherent_write (void);
+
+ virtual void is_coherent_write ( ::CORBA::Boolean value);
+
+ private:
+ void write_i (const typename DDS_TYPE::value_type& datum,
+ const ::DDS::InstanceHandle_t& instance_handle,
+ ::CCM_DDS::DataNumber_t index);
+
+ bool is_coherent_write_;
+ };
+ }
+}
+
+#include "dds4ccm/impl/dds/Writer_T.cpp"
+
+#endif /* WRITER_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_dds_impl_export.h b/modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_dds_impl_export.h
new file mode 100644
index 00000000000..c22f3ecbe8f
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_dds_impl_export.h
@@ -0,0 +1,58 @@
+
+// -*- C++ -*-
+// $Id$
+// Definition for Win32 Export directives.
+// This file is generated automatically by generate_export_file.pl DDS4CCM_NDDS_IMPL
+// ------------------------------
+#ifndef DDS4CCM_DDS_IMPL_EXPORT_H
+#define DDS4CCM_DDS_IMPL_EXPORT_H
+
+#include "ace/config-all.h"
+
+#if defined (ACE_AS_STATIC_LIBS) && !defined (DDS4CCM_DDS_IMPL_HAS_DLL)
+# define DDS4CCM_DDS_IMPL_HAS_DLL 0
+#endif /* ACE_AS_STATIC_LIBS && DDS4CCM_DDS_IMPL_HAS_DLL */
+
+#if !defined (DDS4CCM_DDS_IMPL_HAS_DLL)
+# define DDS4CCM_DDS_IMPL_HAS_DLL 1
+#endif /* ! DDS4CCM_DDS_IMPL_HAS_DLL */
+
+#if defined (DDS4CCM_DDS_IMPL_HAS_DLL) && (DDS4CCM_DDS_IMPL_HAS_DLL == 1)
+# if defined (DDS4CCM_DDS_IMPL_BUILD_DLL)
+# define DDS4CCM_DDS_IMPL_Export ACE_Proper_Export_Flag
+# define DDS4CCM_DDS_IMPL_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T)
+# define DDS4CCM_DDS_IMPL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# else /* DDS4CCM_DDS_IMPL_BUILD_DLL */
+# define DDS4CCM_DDS_IMPL_Export ACE_Proper_Import_Flag
+# define DDS4CCM_DDS_IMPL_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T)
+# define DDS4CCM_DDS_IMPL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+# endif /* DDS4CCM_DDS_IMPL_BUILD_DLL */
+#else /* DDS4CCM_DDS_IMPL_HAS_DLL == 1 */
+# define DDS4CCM_DDS_IMPL_Export
+# define DDS4CCM_DDS_IMPL_SINGLETON_DECLARATION(T)
+# define DDS4CCM_DDS_IMPL_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK)
+#endif /* DDS4CCM_DDS_IMPL_HAS_DLL == 1 */
+
+// Set DDS4CCM_DDS_IMPL_NTRACE = 0 to turn on library specific tracing even if
+// tracing is turned off for ACE.
+#if !defined (DDS4CCM_DDS_IMPL_NTRACE)
+# if (ACE_NTRACE == 1)
+# define DDS4CCM_DDS_IMPL_NTRACE 1
+# else /* (ACE_NTRACE == 1) */
+# define DDS4CCM_DDS_IMPL_NTRACE 0
+# endif /* (ACE_NTRACE == 1) */
+#endif /* !DDS4CCM_DDS_IMPL_NTRACE */
+
+#if (DDS4CCM_DDS_IMPL_NTRACE == 1)
+# define DDS4CCM_DDS_IMPL_TRACE(X)
+#else /* (DDS4CCM_DDS_IMPL_NTRACE == 1) */
+# if !defined (ACE_HAS_TRACE)
+# define ACE_HAS_TRACE
+# endif /* ACE_HAS_TRACE */
+# define DDS4CCM_DDS_IMPL_TRACE(X) ACE_TRACE_IMPL(X)
+# include "ace/Trace.h"
+#endif /* (DDS4CCM_DDS_IMPL_NTRACE == 1) */
+
+#endif /* DDS4CCM_DDS_IMPL_EXPORT_H */
+
+// End of auto generated file.
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_impl.mpc b/modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_impl.mpc
new file mode 100644
index 00000000000..58326b8db12
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/dds4ccm_impl.mpc
@@ -0,0 +1,42 @@
+// $Id$
+
+project(CIAO_DDS4CCM_DDS_Impl) : dds4ccm_skel, taolib, ciao_output, ccm_stub, ciao_logger {
+
+ after += DDS4CCM_lem_stub
+ libs += DDS4CCM_lem_stub
+
+ dynamicflags = DDS4CCM_DDS_IMPL_BUILD_DLL
+ macros += BUILDING_DDS_LIB
+ Header_Files {
+ *.h
+ ndds/*.h
+ }
+
+ Template_Files {
+ *_T.cpp
+ }
+
+ Source_Files {
+ Coherent_Changes_Guard.cpp
+ DataWriter.cpp
+ DataWriterListener.cpp
+ DataReader.cpp
+ DataReaderListener.cpp
+ DomainParticipant.cpp
+ DomainParticipantListener.cpp
+ DomainParticipantFactory.cpp
+ ContentFilteredTopic.cpp
+ Topic.cpp
+ TopicDescription.cpp
+ Publisher.cpp
+ PublisherListener.cpp
+ Subscriber.cpp
+ SubscriberListener.cpp
+ StatusCondition.cpp
+ ReadCondition.cpp
+ QueryCondition.cpp
+ Utils.cpp
+ TopicListener.cpp
+ DDSCallbackStatusHandler.cpp
+ }
+}
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/BuiltinTopicKey_t.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/BuiltinTopicKey_t.h
new file mode 100644
index 00000000000..b9499075d09
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/BuiltinTopicKey_t.h
@@ -0,0 +1,28 @@
+ /**
+ * @author Marcel Smit <msmit@dre.vanderbilt.edu>
+ *
+ * $Id$
+ *
+ */
+
+#ifndef BUILTINTOPICKEY_T_H
+#define BUILTINTOPICKEY_T_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::BuiltinTopicKey_t &ddsbuiltintopickey, const ::DDS_BuiltinTopicKey_t & builtintopickey)
+{
+ ACE_OS::memcpy (ddsbuiltintopickey.value, builtintopickey.value, sizeof (builtintopickey.value));
+}
+
+inline void
+operator<<= (::DDS_BuiltinTopicKey_t &ddsbuiltintopickey, const ::DDS::BuiltinTopicKey_t & builtintopickey)
+{
+ ACE_OS::memcpy (ddsbuiltintopickey.value, builtintopickey.value, sizeof (builtintopickey.value));
+}
+
+#endif
+
+#endif /* BUILTINTOPICKEY_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataReaderQos.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataReaderQos.h
new file mode 100644
index 00000000000..8df844a7386
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataReaderQos.h
@@ -0,0 +1,68 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAREADERQOS_H
+#define DDS4CCM_DATAREADERQOS_H
+
+#include "DurabilityQosPolicy.h"
+#include "DeadlineQosPolicy.h"
+#include "LatencyBudgetQosPolicy.h"
+#include "LivelinessQosPolicy.h"
+#include "ReliabilityQosPolicy.h"
+#include "DestinationOrderQosPolicy.h"
+#include "HistoryQosPolicy.h"
+#include "ResourceLimitsQosPolicy.h"
+#include "UserDataQosPolicy.h"
+#include "OwnershipQosPolicy.h"
+#include "TimeBasedFilterQosPolicy.h"
+#include "ReaderDataLifecycleQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DataReaderQos DDS_DataReaderQos;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DataReaderQos &ddsqos, const ::DDS_DataReaderQos & qos)
+{
+ ddsqos.durability <<= qos.durability;
+ ddsqos.deadline <<= qos.deadline;
+ ddsqos.latency_budget <<= qos.latency_budget;
+ ddsqos.liveliness <<= qos.liveliness;
+ ddsqos.reliability <<= qos.reliability;
+ ddsqos.destination_order <<= qos.destination_order;
+ ddsqos.history <<= qos.history;
+ ddsqos.resource_limits <<= qos.resource_limits;
+ ddsqos.user_data <<= qos.user_data;
+ ddsqos.ownership <<= qos.ownership;
+ ddsqos.time_based_filter <<= qos.time_based_filter;
+ ddsqos.reader_data_lifecycle <<= qos.reader_data_lifecycle;
+}
+
+inline void
+operator<<= (::DDS_DataReaderQos &ddsqos, const ::DDS::DataReaderQos & qos)
+{
+ ddsqos.durability <<= qos.durability;
+ ddsqos.deadline <<= qos.deadline;
+ ddsqos.latency_budget <<= qos.latency_budget;
+ ddsqos.liveliness <<= qos.liveliness;
+ ddsqos.reliability <<= qos.reliability;
+ ddsqos.destination_order <<= qos.destination_order;
+ ddsqos.history <<= qos.history;
+ ddsqos.resource_limits <<= qos.resource_limits;
+ ddsqos.user_data <<= qos.user_data;
+ ddsqos.ownership <<= qos.ownership;
+ ddsqos.time_based_filter <<= qos.time_based_filter;
+ ddsqos.reader_data_lifecycle <<= qos.reader_data_lifecycle;
+}
+
+#endif
+
+#endif /* DDS4CCM_DATAREADERQOS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataWriterQos.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataWriterQos.h
new file mode 100644
index 00000000000..28eef81e587
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DataWriterQos.h
@@ -0,0 +1,77 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DATAWRITERQOS_H
+#define DDS4CCM_DATAWRITERQOS_H
+
+#include "DurabilityQosPolicy.h"
+#include "DurabilityServiceQosPolicy.h"
+#include "DeadlineQosPolicy.h"
+#include "LatencyBudgetQosPolicy.h"
+#include "LivelinessQosPolicy.h"
+#include "ReliabilityQosPolicy.h"
+#include "DestinationOrderQosPolicy.h"
+#include "HistoryQosPolicy.h"
+#include "ResourceLimitsQosPolicy.h"
+#include "TransportPriorityQosPolicy.h"
+#include "LifespanQosPolicy.h"
+#include "UserDataQosPolicy.h"
+#include "OwnershipQosPolicy.h"
+#include "OwnershipStrengthQosPolicy.h"
+#include "WriterDataLifecycleQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DataWriterQos DDS_DataWriterQos;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DataWriterQos &ddsqos, const ::DDS_DataWriterQos & qos)
+{
+ ddsqos.durability <<= qos.durability;
+ ddsqos.durability_service <<= qos.durability_service;
+ ddsqos.deadline <<= qos.deadline;
+ ddsqos.latency_budget <<= qos.latency_budget;
+ ddsqos.liveliness <<= qos.liveliness;
+ ddsqos.reliability <<= qos.reliability;
+ ddsqos.destination_order <<= qos.destination_order;
+ ddsqos.history <<= qos.history;
+ ddsqos.resource_limits <<= qos.resource_limits;
+ ddsqos.transport_priority <<= qos.transport_priority;
+ ddsqos.lifespan <<= qos.lifespan;
+ ddsqos.user_data <<= qos.user_data;
+ ddsqos.ownership <<= qos.ownership;
+ ddsqos.ownership_strength <<= qos.ownership_strength;
+ ddsqos.writer_data_lifecycle <<= qos.writer_data_lifecycle;
+}
+
+inline void
+operator<<= (::DDS_DataWriterQos &ddsqos, const ::DDS::DataWriterQos & qos)
+{
+ ddsqos.durability <<= qos.durability;
+ ddsqos.durability_service <<= qos.durability_service;
+ ddsqos.deadline <<= qos.deadline;
+ ddsqos.latency_budget <<= qos.latency_budget;
+ ddsqos.liveliness <<= qos.liveliness;
+ ddsqos.reliability <<= qos.reliability;
+ ddsqos.destination_order <<= qos.destination_order;
+ ddsqos.history <<= qos.history;
+ ddsqos.resource_limits <<= qos.resource_limits;
+ ddsqos.transport_priority <<= qos.transport_priority;
+ ddsqos.lifespan <<= qos.lifespan;
+ ddsqos.user_data <<= qos.user_data;
+ ddsqos.ownership <<= qos.ownership;
+ ddsqos.ownership_strength <<= qos.ownership_strength;
+ ddsqos.writer_data_lifecycle <<= qos.writer_data_lifecycle;
+}
+
+#endif
+
+#endif /* DDS4CCM_DATAWRITERQOS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DeadlineQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DeadlineQosPolicy.h
new file mode 100644
index 00000000000..59baeba5405
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DeadlineQosPolicy.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DEADLINEQOSPOLICY_H
+#define DDS4CCM_DEADLINEQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DeadlineQosPolicy DDS_DeadlineQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DeadlineQosPolicy &ddsqos, const ::DDS_DeadlineQosPolicy & qos)
+{
+ ddsqos.period <<= qos.period;
+}
+
+inline void
+operator<<= (::DDS_DeadlineQosPolicy &ddsqos, const ::DDS::DeadlineQosPolicy & qos)
+{
+ ddsqos.period <<= qos.period;
+}
+
+#endif
+
+#endif /* DDS4CCM_DEADLINEQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DestinationOrderQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DestinationOrderQosPolicy.h
new file mode 100644
index 00000000000..b28d8bedf75
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DestinationOrderQosPolicy.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DESTINATIONORDERQOSPOLICY_H
+#define DDS4CCM_DESTINATIONORDERQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DestinationOrderQosPolicy DDS_DestinationOrderQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DestinationOrderQosPolicy &ddsqos, const ::DDS_DestinationOrderQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS::DestinationOrderQosPolicyKind> (qos.kind);
+}
+
+inline void
+operator<<= (::DDS_DestinationOrderQosPolicy &ddsqos, const ::DDS::DestinationOrderQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS_DestinationOrderQosPolicyKind> (qos.kind);
+}
+
+#endif
+
+#endif /* DDS4CCM_DESTINATIONORDERQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantFactoryQos.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantFactoryQos.h
new file mode 100644
index 00000000000..5a392830c03
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantFactoryQos.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DOMAINPARTICIPANTFACTORYQOSPOLICY_H
+#define DDS4CCM_DOMAINPARTICIPANTFACTORYQOSPOLICY_H
+
+#include "EntityFactoryQosPolicy.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DomainParticipantFactoryQos DDS_DomainParticipantFactoryQos;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DomainParticipantFactoryQos &ddsqos, const ::DDS_DomainParticipantFactoryQos & qos)
+{
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+inline void
+operator<<= (::DDS_DomainParticipantFactoryQos &ddsqos, const ::DDS::DomainParticipantFactoryQos & qos)
+{
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+#endif
+
+#endif /* DDS4CCM_DOMAINPARTICIPANTFACTORYQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantQos.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantQos.h
new file mode 100644
index 00000000000..e6f8429ca35
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DomainParticipantQos.h
@@ -0,0 +1,38 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DOMAINPARTICIPANTQOSPOLICY_H
+#define DDS4CCM_DOMAINPARTICIPANTQOSPOLICY_H
+
+#include "UserDataQosPolicy.h"
+#include "EntityFactoryQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DomainParticipantQos DDS_DomainParticipantQos;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DomainParticipantQos &ddsqos, const ::DDS_DomainParticipantQos & qos)
+{
+ ddsqos.user_data <<= qos.user_data;
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+inline void
+operator<<= (::DDS_DomainParticipantQos &ddsqos, const ::DDS::DomainParticipantQos & qos)
+{
+ ddsqos.user_data <<= qos.user_data;
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+#endif
+
+#endif /* DDS4CCM_DOMAINPARTICIPANTQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityQosPolicy.h
new file mode 100644
index 00000000000..08ad411e188
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityQosPolicy.h
@@ -0,0 +1,33 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DURABILITYQOSPOLICY_H
+#define DDS4CCM_DURABILITYQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DurabilityQosPolicy DDS_DurabilityQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DurabilityQosPolicy &ddsqos, const ::DDS_DurabilityQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS::DurabilityQosPolicyKind> (qos.kind);
+}
+
+inline void
+operator<<= (::DDS_DurabilityQosPolicy &ddsqos, const ::DDS::DurabilityQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS_DurabilityQosPolicyKind> (qos.kind);
+}
+
+#endif
+
+#endif /* DDS4CCM_DURABILITYQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityServiceQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityServiceQosPolicy.h
new file mode 100644
index 00000000000..9686b01e59d
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/DurabilityServiceQosPolicy.h
@@ -0,0 +1,44 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DURABILITYSERVICEQOSPOLICY_H
+#define DDS4CCM_DURABILITYSERVICEQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::DurabilityServiceQosPolicy DDS_DurabilityServiceQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::DurabilityServiceQosPolicy &ddsqos, const ::DDS_DurabilityServiceQosPolicy & qos)
+{
+ ddsqos.service_cleanup_delay <<= qos.service_cleanup_delay;
+ ddsqos.history_kind = static_cast < ::DDS::HistoryQosPolicyKind> (qos.history_kind);
+ ddsqos.history_depth = qos.history_depth;
+ ddsqos.max_samples = qos.max_samples;
+ ddsqos.max_instances = qos.max_instances;
+ ddsqos.max_samples_per_instance = qos.max_samples_per_instance;
+}
+
+inline void
+operator<<= (::DDS_DurabilityServiceQosPolicy &ddsqos, const ::DDS::DurabilityServiceQosPolicy & qos)
+{
+ ddsqos.service_cleanup_delay <<= qos.service_cleanup_delay;
+ ddsqos.history_kind = static_cast < ::DDS_HistoryQosPolicyKind> (qos.history_kind);
+ ddsqos.history_depth = qos.history_depth;
+ ddsqos.max_samples = qos.max_samples;
+ ddsqos.max_instances = qos.max_instances;
+ ddsqos.max_samples_per_instance = qos.max_samples_per_instance;
+}
+
+#endif
+
+#endif /* DDS4CCM_DURABILITYSERVICEQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Duration_t.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Duration_t.h
new file mode 100644
index 00000000000..597339c10ab
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Duration_t.h
@@ -0,0 +1,37 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_DURATION_T_H
+#define DDS4CCM_DURATION_T_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::Duration_t DDS_Duration_t;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::Duration_t &ddsduration, const ::DDS_Duration_t & duration)
+{
+ ddsduration.sec = duration.sec;
+ ddsduration.nanosec = duration.nanosec;
+}
+
+inline void
+operator<<= (::DDS_Duration_t &ddsduration, const ::DDS::Duration_t & duration)
+{
+ ddsduration.sec = duration.sec;
+ ddsduration.nanosec = duration.nanosec;
+}
+
+#endif
+
+#endif /* DDS4CCM_DURATION_T_H */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/EntityFactoryQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/EntityFactoryQosPolicy.h
new file mode 100644
index 00000000000..356de511292
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/EntityFactoryQosPolicy.h
@@ -0,0 +1,33 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_ENTITYFACTORYQOSPOLICY_H
+#define DDS4CCM_ENTITYFACTORYQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::EntityFactoryQosPolicy DDS_EntityFactoryQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::EntityFactoryQosPolicy &ddsqos, const ::DDS_EntityFactoryQosPolicy & qos)
+{
+ ddsqos.autoenable_created_entities = qos.autoenable_created_entities;
+}
+
+inline void
+operator<<= (::DDS_EntityFactoryQosPolicy &ddsqos, const ::DDS::EntityFactoryQosPolicy & qos)
+{
+ ddsqos.autoenable_created_entities = qos.autoenable_created_entities;
+}
+
+#endif
+
+#endif /* DDS4CCM_ENTITYFACTORYQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/GroupDataQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/GroupDataQosPolicy.h
new file mode 100644
index 00000000000..c8c63445f29
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/GroupDataQosPolicy.h
@@ -0,0 +1,35 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_GROUPDATAQOSPOLICY_H
+#define DDS4CCM_GROUPDATAQOSPOLICY_H
+
+#include "OctetSeq.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::GroupDataQosPolicy DDS_GroupDataQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+
+inline void
+operator<<= (::DDS::GroupDataQosPolicy &ddsqos, const ::DDS_GroupDataQosPolicy & qos)
+{
+ ddsqos.value <<= qos.value;
+}
+
+inline void
+operator<<= (::DDS_GroupDataQosPolicy &ddsqos, const ::DDS::GroupDataQosPolicy & qos)
+{
+ ddsqos.value <<= qos.value;
+}
+
+#endif
+
+#endif /* DDS4CCM_GROUPDATAQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/HistoryQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/HistoryQosPolicy.h
new file mode 100644
index 00000000000..d2140f4ca63
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/HistoryQosPolicy.h
@@ -0,0 +1,35 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_HISTORYQOSPOLICY_H
+#define DDS4CCM_HISTORYQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::HistoryQosPolicy DDS_HistoryQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::HistoryQosPolicy &ddsqos, const ::DDS_HistoryQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS::HistoryQosPolicyKind> (qos.kind);
+ ddsqos.depth = qos.depth;
+}
+
+inline void
+operator<<= (::DDS_HistoryQosPolicy &ddsqos, const ::DDS::HistoryQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS_HistoryQosPolicyKind> (qos.kind);
+ ddsqos.depth = qos.depth;
+}
+
+#endif
+
+#endif /* DDS4CCM_HISTORYQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InconsistentTopicStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InconsistentTopicStatus.h
new file mode 100644
index 00000000000..6946874f57c
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InconsistentTopicStatus.h
@@ -0,0 +1,36 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_INCONSISTENTTOPICSTATUS_H
+#define DDS4CCM_INCONSISTENTTOPICSTATUS_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::InconsistentTopicStatus DDS_InconsistentTopicStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::InconsistentTopicStatus &ddsstatus, const ::DDS_InconsistentTopicStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+}
+
+inline void
+operator<<= (::DDS_InconsistentTopicStatus &ddsstatus, const ::DDS::InconsistentTopicStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+}
+
+#endif
+
+#endif /* DDS4CCM_INCONSISTENTTOPICSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandleSeq.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandleSeq.h
new file mode 100644
index 00000000000..6a95c92a610
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandleSeq.h
@@ -0,0 +1,48 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_INSTANCEHANDLESEQ_H
+#define DDS4CCM_INSTANCEHANDLESEQ_H
+
+#include "InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::InstanceHandleSeq DDS_InstanceHandleSeq;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+template <typename corbaseq, typename ddsseq>
+void convert_dds_to_corba_sequence(corbaseq & target, const ddsseq& source) {
+ target.length (source.length ());
+ for (::DDS_Long index = 0; index < source.length (); index++)
+ {
+ target[index] <<= source[index];
+ }
+}
+
+inline void
+operator<<= (::DDS::InstanceHandleSeq &ddsinstancehandleseqseq, const ::DDS_InstanceHandleSeq & instancehandleseq)
+{
+ convert_dds_to_corba_sequence (ddsinstancehandleseqseq, instancehandleseq);
+}
+
+inline void
+operator<<= (::DDS_InstanceHandleSeq &ddsinstancehandleseqseq, const ::DDS::InstanceHandleSeq & instancehandleseq)
+{
+ ddsinstancehandleseqseq.length (instancehandleseq.length ());
+ for (::DDS::InstanceHandleSeq::size_type index = 0; index < instancehandleseq.length (); index++)
+ {
+ ddsinstancehandleseqseq[index] <<= instancehandleseq[index];
+ }
+}
+
+#endif
+
+#endif /* DDS4CCM_INSTANCEHANDLESEQ_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandle_t.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandle_t.h
new file mode 100644
index 00000000000..8b2517eaa35
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/InstanceHandle_t.h
@@ -0,0 +1,92 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_INSTANCEHANDLE_T_H
+#define DDS4CCM_INSTANCEHANDLE_T_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+#include "ndds/ndds_cpp.h"
+#define DDS_INSTANCE_HANDLE_T_IN const ::DDS::InstanceHandle_t &
+#define DDS_INSTANCE_HANDLE_T_RETN ::DDS::InstanceHandle_t
+#endif
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+#define DDS_INSTANCE_HANDLE_T_IN ::DDS::InstanceHandle_t
+#define DDS_INSTANCE_HANDLE_T_RETN ::DDS::InstanceHandle_t
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::InstanceHandle_t &ddsinstancehandle, const ::DDS_InstanceHandle_t & instancehandle)
+{
+ ACE_OS::memcpy (ddsinstancehandle.value, instancehandle.keyHash.value, sizeof (instancehandle.keyHash.value));
+ ddsinstancehandle.length = instancehandle.keyHash.length;
+ ddsinstancehandle.isValid = instancehandle.isValid;
+}
+
+inline void
+operator<<= (::DDS_InstanceHandle_t &ddsinstancehandle, const ::DDS::InstanceHandle_t & instancehandle)
+{
+ ACE_OS::memcpy (ddsinstancehandle.keyHash.value, instancehandle.value, sizeof (instancehandle.value));
+ ddsinstancehandle.keyHash.length = instancehandle.length;
+ ddsinstancehandle.isValid = instancehandle.isValid;
+}
+
+inline bool
+operator== (const ::DDS::InstanceHandle_t & instancehandle1, const ::DDS::InstanceHandle_t & instancehandle2)
+{
+ return instancehandle1.length == instancehandle2.length &&
+ instancehandle1.isValid == instancehandle2.isValid &&
+ ACE_OS::memcmp (instancehandle1.value, instancehandle2.value, sizeof (instancehandle1.value)) == 0;
+}
+
+inline bool
+operator== (const DDS_InstanceHandle_t & dds_instancehandle, const ::DDS::InstanceHandle_t & ccm_instancehandle)
+{
+ return dds_instancehandle.keyHash.length == ccm_instancehandle.length &&
+ static_cast<CORBA::ULong>(dds_instancehandle.isValid) == ccm_instancehandle.isValid &&
+ ACE_OS::memcmp (dds_instancehandle.keyHash.value, ccm_instancehandle.value, sizeof (dds_instancehandle.keyHash.value)) == 0;
+}
+
+inline bool
+operator== (const ::DDS::InstanceHandle_t & ccm_instancehandle, const DDS_InstanceHandle_t & dds_instancehandle)
+{
+ return ccm_instancehandle.length == dds_instancehandle.keyHash.length &&
+ ccm_instancehandle.isValid == static_cast<CORBA::ULong>(dds_instancehandle.isValid) &&
+ ACE_OS::memcmp (ccm_instancehandle.value, dds_instancehandle.keyHash.value, sizeof (ccm_instancehandle.value)) == 0;
+}
+
+inline bool
+operator!= (const ::DDS::InstanceHandle_t & instancehandle1, const ::DDS::InstanceHandle_t & instancehandle2)
+{
+ return instancehandle1.length != instancehandle2.length ||
+ instancehandle1.isValid != instancehandle2.isValid ||
+ ACE_OS::memcmp (instancehandle1.value, instancehandle2.value, sizeof (instancehandle1.value)) != 0;
+}
+
+inline bool
+operator!= (const DDS_InstanceHandle_t & dds_instancehandle, const ::DDS::InstanceHandle_t & ccm_instancehandle)
+{
+ return dds_instancehandle.keyHash.length != ccm_instancehandle.length ||
+ static_cast<CORBA::ULong>(dds_instancehandle.isValid) != ccm_instancehandle.isValid ||
+ ACE_OS::memcmp (dds_instancehandle.keyHash.value, ccm_instancehandle.value, sizeof (dds_instancehandle.keyHash.value)) != 0;
+}
+
+inline bool
+operator!= (const ::DDS::InstanceHandle_t & ccm_instancehandle, const DDS_InstanceHandle_t & dds_instancehandle)
+{
+ return ccm_instancehandle.length != dds_instancehandle.keyHash.length ||
+ ccm_instancehandle.isValid != static_cast<CORBA::ULong>(dds_instancehandle.isValid) ||
+ ACE_OS::memcmp (ccm_instancehandle.value, dds_instancehandle.keyHash.value, sizeof (ccm_instancehandle.value)) != 0;
+}
+#endif
+
+#endif /* DDS4CCM_INSTANCEHANDLE_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LatencyBudgetQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LatencyBudgetQosPolicy.h
new file mode 100644
index 00000000000..27900434e79
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LatencyBudgetQosPolicy.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_LATENCYBUDGETQOSPOLICY_H
+#define DDS4CCM_LATENCYBUDGETQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::LatencyBudgetQosPolicy DDS_LatencyBudgetQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::LatencyBudgetQosPolicy &ddsqos, const ::DDS_LatencyBudgetQosPolicy & qos)
+{
+ ddsqos.duration <<= qos.duration;
+}
+
+inline void
+operator<<= (::DDS_LatencyBudgetQosPolicy &ddsqos, const ::DDS::LatencyBudgetQosPolicy & qos)
+{
+ ddsqos.duration <<= qos.duration;
+}
+
+#endif
+
+#endif /* DDS4CCM_LATENCYBUDGETQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LifespanQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LifespanQosPolicy.h
new file mode 100644
index 00000000000..53220c3b745
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LifespanQosPolicy.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_LIFESPANQOSPOLICY_H
+#define DDS4CCM_LIFESPANQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::LifespanQosPolicy DDS_LifespanQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::LifespanQosPolicy &ddsqos, const ::DDS_LifespanQosPolicy & qos)
+{
+ ddsqos.duration <<= qos.duration;
+}
+
+inline void
+operator<<= (::DDS_LifespanQosPolicy &ddsqos, const ::DDS::LifespanQosPolicy & qos)
+{
+ ddsqos.duration <<= qos.duration;
+}
+
+#endif
+
+#endif /* DDS4CCM_LIFESPANQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessChangedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessChangedStatus.h
new file mode 100644
index 00000000000..a588bb4cf31
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessChangedStatus.h
@@ -0,0 +1,43 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_LIVELINESSCHANGEDSTATUS_H
+#define DDS4CCM_LIVELINESSCHANGEDSTATUS_H
+
+#include "InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::LivelinessChangedStatus DDS_LivelinessChangedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::LivelinessChangedStatus &ddsstatus, const ::DDS_LivelinessChangedStatus & status)
+{
+ ddsstatus.alive_count = status.alive_count;
+ ddsstatus.not_alive_count = status.not_alive_count;
+ ddsstatus.alive_count_change = status.alive_count_change;
+ ddsstatus.not_alive_count_change = status.not_alive_count_change;
+ ddsstatus.last_publication_handle <<= status.last_publication_handle;
+}
+
+inline void
+operator<<= (::DDS_LivelinessChangedStatus &ddsstatus, const ::DDS::LivelinessChangedStatus & status)
+{
+ ddsstatus.alive_count = status.alive_count;
+ ddsstatus.not_alive_count = status.not_alive_count;
+ ddsstatus.alive_count_change = status.alive_count_change;
+ ddsstatus.not_alive_count_change = status.not_alive_count_change;
+ ddsstatus.last_publication_handle <<= status.last_publication_handle;
+}
+
+#endif
+
+#endif /* DDS4CCM_LIVELINESSCHANGEDSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessLostStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessLostStatus.h
new file mode 100644
index 00000000000..dff10ab7ab3
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessLostStatus.h
@@ -0,0 +1,36 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_LIVELINESSLOSTSTATUS_H
+#define DDS4CCM_LIVELINESSLOSTSTATUS_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::LivelinessLostStatus DDS_LivelinessLostStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::LivelinessLostStatus &ddsstatus, const ::DDS_LivelinessLostStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+}
+
+inline void
+operator<<= (::DDS_LivelinessLostStatus &ddsstatus, const ::DDS::LivelinessLostStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+}
+
+#endif
+
+#endif /* DDS4CCM_LIVELINESSLOSTSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessQosPolicy.h
new file mode 100644
index 00000000000..18b56dae8cf
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/LivelinessQosPolicy.h
@@ -0,0 +1,36 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_LIVELINESSQOSPOLICY_H
+#define DDS4CCM_LIVELINESSQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::LivelinessQosPolicy DDS_LivelinessQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::LivelinessQosPolicy &ddsqos, const ::DDS_LivelinessQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS::LivelinessQosPolicyKind> (qos.kind);
+ ddsqos.lease_duration <<= qos.lease_duration;
+}
+
+inline void
+operator<<= (::DDS_LivelinessQosPolicy &ddsqos, const ::DDS::LivelinessQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS_LivelinessQosPolicyKind> (qos.kind);
+ ddsqos.lease_duration <<= qos.lease_duration;
+}
+
+#endif
+
+#endif /* DDS4CCM_LIVELINESSQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OctetSeq.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OctetSeq.h
new file mode 100644
index 00000000000..ed0cc97a018
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OctetSeq.h
@@ -0,0 +1,32 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_OCTETSEQ_H
+#define DDS4CCM_OCTETSEQ_H
+
+inline void
+operator<<= (::DDS::OctetSeq &ddsseq, const ::DDS_OctetSeq & seq)
+{
+ ddsseq.length (seq.length ());
+ for (::DDS_Long i = 0; i < seq.length (); ++i)
+ {
+ ddsseq[i] = seq[i];
+ }
+}
+
+inline void
+operator<<= (::DDS_OctetSeq &ddsseq, const ::DDS::OctetSeq & seq)
+{
+ ddsseq.length (seq.length ());
+ for (::CORBA::ULong i = 0; i < seq.length (); ++i)
+ {
+ ddsseq[i] = seq[i];
+ }
+}
+
+#endif /* DDS4CCM_OCTETSEQ_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedDeadlineMissedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedDeadlineMissedStatus.h
new file mode 100644
index 00000000000..164d6a571c4
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedDeadlineMissedStatus.h
@@ -0,0 +1,39 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_OFFEREDDEADLINEMISSEDSTATUS_H
+#define DDS4CCM_OFFEREDDEADLINEMISSEDSTATUS_H
+
+#include "InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::OfferedDeadlineMissedStatus DDS_OfferedDeadlineMissedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::OfferedDeadlineMissedStatus &ddsstatus, const ::DDS_OfferedDeadlineMissedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+inline void
+operator<<= (::DDS_OfferedDeadlineMissedStatus &ddsstatus, const ::DDS::OfferedDeadlineMissedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+#endif
+
+#endif /* DDS4CCM_OFFEREDDEADLINEMISSEDSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedIncompatibleQosStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedIncompatibleQosStatus.h
new file mode 100644
index 00000000000..9b6391a747b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OfferedIncompatibleQosStatus.h
@@ -0,0 +1,41 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_OFFEREDINCOMPATIBLEQOSSTATUS_H
+#define DDS4CCM_OFFEREDINCOMPATIBLEQOSSTATUS_H
+
+#include "QosPolicyCountSeq.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::OfferedIncompatibleQosStatus DDS_OfferedIncompatibleQosStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::OfferedIncompatibleQosStatus &ddsstatus, const ::DDS_OfferedIncompatibleQosStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_policy_id = status.last_policy_id;
+ ddsstatus.policies <<= status.policies;
+}
+
+inline void
+operator<<= (::DDS_OfferedIncompatibleQosStatus &ddsstatus, const ::DDS::OfferedIncompatibleQosStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_policy_id = static_cast <DDS_QosPolicyId_t>(status.last_policy_id);
+ ddsstatus.policies <<= status.policies;
+}
+
+#endif
+
+#endif /* DDS4CCM_OFFEREDINCOMPATIBLEQOSSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipQosPolicy.h
new file mode 100644
index 00000000000..eec42c30ed1
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipQosPolicy.h
@@ -0,0 +1,33 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_OWNERSHIPQOSPOLICY_H
+#define DDS4CCM_OWNERSHIPQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::OwnershipQosPolicy DDS_OwnershipQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::OwnershipQosPolicy &ddsqos, const ::DDS_OwnershipQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS::OwnershipQosPolicyKind> (qos.kind);
+}
+
+inline void
+operator<<= (::DDS_OwnershipQosPolicy &ddsqos, const ::DDS::OwnershipQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS_OwnershipQosPolicyKind> (qos.kind);
+}
+
+#endif
+
+#endif /* DDS4CCM_OWNERSHIPQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipStrengthQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipStrengthQosPolicy.h
new file mode 100644
index 00000000000..77401f1d9e2
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/OwnershipStrengthQosPolicy.h
@@ -0,0 +1,33 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_OWNERSHIPSTRENGTHQOSPOLICY_H
+#define DDS4CCM_OWNERSHIPSTRENGTHQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::OwnershipStrengthQosPolicy DDS_OwnershipStrengthQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::OwnershipStrengthQosPolicy &ddsqos, const ::DDS_OwnershipStrengthQosPolicy & qos)
+{
+ ddsqos.value = qos.value;
+}
+
+inline void
+operator<<= (::DDS_OwnershipStrengthQosPolicy &ddsqos, const ::DDS::OwnershipStrengthQosPolicy & qos)
+{
+ ddsqos.value = qos.value;
+}
+
+#endif
+
+#endif /* DDS4CCM_OWNERSHIPSTRENGTHQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PartitionQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PartitionQosPolicy.h
new file mode 100644
index 00000000000..0059665c277
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PartitionQosPolicy.h
@@ -0,0 +1,35 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_PARTITIONQOSPOLICY_H
+#define DDS4CCM_PARTITIONQOSPOLICY_H
+
+#include "StringSeq.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::PartitionQosPolicy DDS_PartitionQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::PartitionQosPolicy &ddsqos, const ::DDS_PartitionQosPolicy & qos)
+{
+ ddsqos.name <<= qos.name;
+}
+
+inline void
+operator<<= (::DDS_PartitionQosPolicy &ddsqos, const ::DDS::PartitionQosPolicy & qos)
+{
+ ddsqos.name <<= qos.name;
+}
+
+#endif
+
+#endif /* DDS4CCM_PARTITIONQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PresentationQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PresentationQosPolicy.h
new file mode 100644
index 00000000000..7d5ab4fc283
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PresentationQosPolicy.h
@@ -0,0 +1,37 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_PRESENTATIONQOSPOLICY_H
+#define DDS4CCM_PRESENTATIONQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::PresentationQosPolicy DDS_PresentationQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::PresentationQosPolicy &ddsqos, const ::DDS_PresentationQosPolicy & qos)
+{
+ ddsqos.access_scope = static_cast < ::DDS::PresentationQosPolicyAccessScopeKind> (qos.access_scope);
+ ddsqos.coherent_access = qos.coherent_access;
+ ddsqos.ordered_access = qos.ordered_access;
+}
+
+inline void
+operator<<= (::DDS_PresentationQosPolicy &ddsqos, const ::DDS::PresentationQosPolicy & qos)
+{
+ ddsqos.access_scope = static_cast < DDS_PresentationQosPolicyAccessScopeKind> (qos.access_scope);
+ ddsqos.coherent_access = qos.coherent_access;
+ ddsqos.ordered_access = qos.ordered_access;
+}
+
+#endif
+
+#endif /* DDS4CCM_PRESENTATIONQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationBuiltinTopicData.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationBuiltinTopicData.h
new file mode 100644
index 00000000000..ce578f36e82
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationBuiltinTopicData.h
@@ -0,0 +1,81 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ */
+
+#ifndef PUBLICATIONBUILTINTOPICDATA_H_
+#define PUBLICATIONBUILTINTOPICDATA_H_
+
+#include "BuiltinTopicKey_t.h"
+#include "DurabilityQosPolicy.h"
+#include "DurabilityServiceQosPolicy.h"
+#include "DeadlineQosPolicy.h"
+#include "LatencyBudgetQosPolicy.h"
+#include "LivelinessQosPolicy.h"
+#include "ReliabilityQosPolicy.h"
+#include "LifespanQosPolicy.h"
+#include "UserDataQosPolicy.h"
+#include "OwnershipQosPolicy.h"
+#include "OwnershipStrengthQosPolicy.h"
+#include "DestinationOrderQosPolicy.h"
+#include "PresentationQosPolicy.h"
+#include "PartitionQosPolicy.h"
+#include "TopicDataQosPolicy.h"
+#include "GroupDataQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::PublicationBuiltinTopicData &ddstopicdata, const ::DDS_PublicationBuiltinTopicData & topicdata)
+{
+ ddstopicdata.key <<= topicdata.key;
+ ddstopicdata.participant_key <<= topicdata.participant_key;
+ ddstopicdata.topic_name = topicdata.topic_name;
+ ddstopicdata.type_name = topicdata.type_name;
+ ddstopicdata.durability <<= topicdata.durability;
+ ddstopicdata.durability_service <<= topicdata.durability_service;
+ ddstopicdata.deadline <<= topicdata.deadline;
+ ddstopicdata.latency_budget <<= topicdata.latency_budget;
+ ddstopicdata.liveliness <<= topicdata.liveliness;
+ ddstopicdata.reliability <<= topicdata.reliability;
+ ddstopicdata.lifespan <<= topicdata.lifespan;
+ ddstopicdata.user_data <<= topicdata.user_data;
+ ddstopicdata.ownership <<= topicdata.ownership;
+ ddstopicdata.ownership_strength <<= topicdata.ownership_strength;
+ ddstopicdata.destination_order <<= topicdata.destination_order;
+ ddstopicdata.presentation <<= topicdata.presentation;
+ ddstopicdata.partition <<= topicdata.partition;
+ ddstopicdata.topic_data <<= topicdata.topic_data;
+ ddstopicdata.group_data <<= topicdata.group_data;
+}
+
+inline void
+operator<<= (::DDS_PublicationBuiltinTopicData & ddstopicdata, const ::DDS::PublicationBuiltinTopicData & topicdata)
+{
+ ddstopicdata.key <<= topicdata.key;
+ ddstopicdata.participant_key <<= topicdata.participant_key;
+ ddstopicdata.topic_name = CORBA::string_dup (topicdata.topic_name);
+ ddstopicdata.type_name = CORBA::string_dup (topicdata.type_name);
+ ddstopicdata.durability <<= topicdata.durability;
+ ddstopicdata.durability_service <<= topicdata.durability_service;
+ ddstopicdata.deadline <<= topicdata.deadline;
+ ddstopicdata.latency_budget <<= topicdata.latency_budget;
+ ddstopicdata.liveliness <<= topicdata.liveliness;
+ ddstopicdata.reliability <<= topicdata.reliability;
+ ddstopicdata.lifespan <<= topicdata.lifespan;
+ ddstopicdata.user_data <<= topicdata.user_data;
+ ddstopicdata.ownership <<= topicdata.ownership;
+ ddstopicdata.ownership_strength <<= topicdata.ownership_strength;
+ ddstopicdata.destination_order <<= topicdata.destination_order;
+ ddstopicdata.presentation <<= topicdata.presentation;
+ ddstopicdata.partition <<= topicdata.partition;
+ ddstopicdata.topic_data <<= topicdata.topic_data;
+ ddstopicdata.group_data <<= topicdata.group_data;
+}
+
+#endif
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationMatchedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationMatchedStatus.h
new file mode 100644
index 00000000000..2374f58d2c2
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublicationMatchedStatus.h
@@ -0,0 +1,43 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_PUBLICATIONMATCHEDSTATUS_H
+#define DDS4CCM_PUBLICATIONMATCHEDSTATUS_H
+
+#include "InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::PublicationMatchedStatus DDS_PublicationMatchedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::PublicationMatchedStatus &ddsstatus, const ::DDS_PublicationMatchedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.current_count = status.current_count;
+ ddsstatus.current_count_change = status.current_count_change;
+ ddsstatus.last_subscription_handle <<= status.last_subscription_handle;
+}
+
+inline void
+operator<<= (::DDS_PublicationMatchedStatus &ddsstatus, const ::DDS::PublicationMatchedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.current_count = status.current_count;
+ ddsstatus.current_count_change = status.current_count_change;
+ ddsstatus.last_subscription_handle <<= status.last_subscription_handle;
+}
+
+#endif
+
+#endif /* DDS4CCM_PUBLICATIONMATCHEDSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublisherQos.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublisherQos.h
new file mode 100644
index 00000000000..6a129795137
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/PublisherQos.h
@@ -0,0 +1,44 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_PUBLISHERQOS_H
+#define DDS4CCM_PUBLISHERQOS_H
+
+#include "PresentationQosPolicy.h"
+#include "PartitionQosPolicy.h"
+#include "GroupDataQosPolicy.h"
+#include "EntityFactoryQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::PublisherQos DDS_PublisherQos;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::PublisherQos &ddsqos, const ::DDS_PublisherQos & qos)
+{
+ ddsqos.presentation <<= qos.presentation;
+ ddsqos.partition <<= qos.partition;
+ ddsqos.group_data <<= qos.group_data;
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+inline void
+operator<<= (::DDS_PublisherQos &ddsqos, const ::DDS::PublisherQos & qos)
+{
+ ddsqos.presentation <<= qos.presentation;
+ ddsqos.partition <<= qos.partition;
+ ddsqos.group_data <<= qos.group_data;
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+#endif
+
+#endif /* DDS4CCM_PUBLISHERQOS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/QosPolicyCountSeq.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/QosPolicyCountSeq.h
new file mode 100644
index 00000000000..5a6224d84a7
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/QosPolicyCountSeq.h
@@ -0,0 +1,44 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_QOSPOLICYCOUNTSEQ_H
+#define DDS4CCM_QOSPOLICYCOUNTSEQ_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::QosPolicyCountSeq DDS_QosPolicyCountSeq;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::QosPolicyCountSeq & ddspolicycount, const ::DDS_QosPolicyCountSeq & policycount)
+{
+ ddspolicycount.length (policycount.length ());
+ for (::DDS_Long i = 0 ; i < policycount.length (); ++i)
+ {
+ ddspolicycount[i].policy_id = policycount[i].policy_id;
+ ddspolicycount[i].count = policycount[i].count;
+ }
+}
+
+inline void
+operator<<= (::DDS_QosPolicyCountSeq & ddspolicycount, const ::DDS::QosPolicyCountSeq & policycount)
+{
+ ddspolicycount.length (policycount.length ());
+ for (::CORBA::ULong i = 0 ; i < policycount.length (); ++i)
+ {
+ ddspolicycount[i].policy_id = static_cast <DDS_QosPolicyId_t> (policycount[i].policy_id);
+ ddspolicycount[i].count = policycount[i].count;
+ }
+}
+
+#endif
+
+#endif /* DDS4CCM_QOSPOLICYCOUNTSEQ_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReaderDataLifecycleQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReaderDataLifecycleQosPolicy.h
new file mode 100644
index 00000000000..8d0ab08b72a
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReaderDataLifecycleQosPolicy.h
@@ -0,0 +1,38 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_READERDATALIFECYCLEQOSPOLICY_H
+#define DDS4CCM_READERDATALIFECYCLEQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::ReaderDataLifecycleQosPolicy DDS_ReaderDataLifecycleQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+
+#include "Duration_t.h"
+
+inline void
+operator<<= (::DDS::ReaderDataLifecycleQosPolicy &ddsqos, const ::DDS_ReaderDataLifecycleQosPolicy & qos)
+{
+ ddsqos.autopurge_nowriter_samples_delay <<= qos.autopurge_nowriter_samples_delay;
+ ddsqos.autopurge_disposed_samples_delay <<= qos.autopurge_disposed_samples_delay;
+}
+
+inline void
+operator<<= (::DDS_ReaderDataLifecycleQosPolicy &ddsqos, const ::DDS::ReaderDataLifecycleQosPolicy & qos)
+{
+ ddsqos.autopurge_nowriter_samples_delay <<= qos.autopurge_nowriter_samples_delay;
+ ddsqos.autopurge_disposed_samples_delay <<= qos.autopurge_disposed_samples_delay;
+}
+
+#endif
+
+#endif /* DDS4CCM_READERDATALIFECYCLEQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliabilityQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliabilityQosPolicy.h
new file mode 100644
index 00000000000..d4253585857
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliabilityQosPolicy.h
@@ -0,0 +1,36 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_RELIABILITYSQOSPOLICY_H
+#define DDS4CCM_RELIABILITYSQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::ReliabilityQosPolicy DDS_ReliabilityQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::ReliabilityQosPolicy &ddsqos, const ::DDS_ReliabilityQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS::ReliabilityQosPolicyKind> (qos.kind);
+ ddsqos.max_blocking_time <<= qos.max_blocking_time;
+}
+
+inline void
+operator<<= (::DDS_ReliabilityQosPolicy &ddsqos, const ::DDS::ReliabilityQosPolicy & qos)
+{
+ ddsqos.kind = static_cast < ::DDS_ReliabilityQosPolicyKind> (qos.kind);
+ ddsqos.max_blocking_time <<= qos.max_blocking_time;
+}
+
+#endif
+
+#endif /* DDS4CCM_RELIABILITYSQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableReaderActivityChangedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableReaderActivityChangedStatus.h
new file mode 100644
index 00000000000..113a27393a7
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableReaderActivityChangedStatus.h
@@ -0,0 +1,42 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_RELIABLEREADERACTIVITYCHANGEDSTATUS_H
+#define DDS4CCM_RELIABLEREADERACTIVITYCHANGEDSTATUS_H
+
+#include "dds4ccm/impl/dds/ndds/InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::ReliableReaderActivityChangedStatus DDS_ReliableReaderActivityChangedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::ReliableReaderActivityChangedStatus &ddsstatus, const ::DDS_ReliableReaderActivityChangedStatus & status)
+{
+ ddsstatus.active_count = status.active_count;
+ ddsstatus.active_count_change = status.active_count_change;
+ ddsstatus.inactive_count = status.inactive_count;
+ ddsstatus.inactive_count_change = status.inactive_count_change;
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+inline void
+operator<<= (::DDS_ReliableReaderActivityChangedStatus &ddsstatus, const ::DDS::ReliableReaderActivityChangedStatus & status)
+{
+ ddsstatus.active_count = status.active_count;
+ ddsstatus.active_count_change = status.active_count_change;
+ ddsstatus.inactive_count = status.inactive_count;
+ ddsstatus.inactive_count_change = status.inactive_count_change;
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+#endif
+
+#endif /* DDS4CCM_RELIABLEREADERACTIVITYCHANGEDSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableWriterCacheChangedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableWriterCacheChangedStatus.h
new file mode 100644
index 00000000000..31e8653b8be
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ReliableWriterCacheChangedStatus.h
@@ -0,0 +1,51 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_RELIABLEWRITERCACHECHANGEDSTATUS_H
+#define DDS4CCM_RELIABLEWRITERCACHECHANGEDSTATUS_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::ReliableWriterCacheChangedStatus DDS_ReliableWriterCacheChangedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::ReliableWriterCacheChangedStatus &ddsstatus, const ::DDS_ReliableWriterCacheChangedStatus & status)
+{
+ ddsstatus.empty_reliable_writer_cache.total_count = status.empty_reliable_writer_cache.total_count;
+ ddsstatus.empty_reliable_writer_cache.total_count_change = status.empty_reliable_writer_cache.total_count_change;
+ ddsstatus.full_reliable_writer_cache.total_count = status.full_reliable_writer_cache.total_count;
+ ddsstatus.full_reliable_writer_cache.total_count_change = status.full_reliable_writer_cache.total_count_change;
+ ddsstatus.low_watermark_reliable_writer_cache.total_count = status.low_watermark_reliable_writer_cache.total_count;
+ ddsstatus.low_watermark_reliable_writer_cache.total_count_change = status.low_watermark_reliable_writer_cache.total_count_change;
+ ddsstatus.high_watermark_reliable_writer_cache.total_count = status.high_watermark_reliable_writer_cache.total_count;
+ ddsstatus.high_watermark_reliable_writer_cache.total_count_change = status.high_watermark_reliable_writer_cache.total_count_change;
+ ddsstatus.unacknowledged_sample_count = status.unacknowledged_sample_count;
+ ddsstatus.unacknowledged_sample_count_peak = status.unacknowledged_sample_count_peak;
+}
+
+inline void
+operator<<= (::DDS_ReliableWriterCacheChangedStatus &ddsstatus, const ::DDS::ReliableWriterCacheChangedStatus & status)
+{
+ ddsstatus.empty_reliable_writer_cache.total_count = status.empty_reliable_writer_cache.total_count;
+ ddsstatus.empty_reliable_writer_cache.total_count_change = status.empty_reliable_writer_cache.total_count_change;
+ ddsstatus.full_reliable_writer_cache.total_count = status.full_reliable_writer_cache.total_count;
+ ddsstatus.full_reliable_writer_cache.total_count_change = status.full_reliable_writer_cache.total_count_change;
+ ddsstatus.low_watermark_reliable_writer_cache.total_count = status.low_watermark_reliable_writer_cache.total_count;
+ ddsstatus.low_watermark_reliable_writer_cache.total_count_change = status.low_watermark_reliable_writer_cache.total_count_change;
+ ddsstatus.high_watermark_reliable_writer_cache.total_count = status.high_watermark_reliable_writer_cache.total_count;
+ ddsstatus.high_watermark_reliable_writer_cache.total_count_change = status.high_watermark_reliable_writer_cache.total_count_change;
+ ddsstatus.unacknowledged_sample_count = status.unacknowledged_sample_count;
+ ddsstatus.unacknowledged_sample_count_peak = status.unacknowledged_sample_count_peak;
+}
+
+#endif
+
+#endif /* DDS4CCM_RELIABLEWRITERCACHECHANGEDSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedDeadlineMissedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedDeadlineMissedStatus.h
new file mode 100644
index 00000000000..9d26f544d4b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedDeadlineMissedStatus.h
@@ -0,0 +1,38 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_REQUESTEDDEADLINEMISSEDSTATUS_H
+#define DDS4CCM_REQUESTEDDEADLINEMISSEDSTATUS_H
+
+#include "InstanceHandle_t.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::RequestedDeadlineMissedStatus DDS_RequestedDeadlineMissedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::RequestedDeadlineMissedStatus &ddsstatus, const ::DDS_RequestedDeadlineMissedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+inline void
+operator<<= (::DDS_RequestedDeadlineMissedStatus &ddsstatus, const ::DDS::RequestedDeadlineMissedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+#endif
+
+#endif /* DDS4CCM_REQUESTEDDEADLINEMISSEDSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedIncompatibleQosStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedIncompatibleQosStatus.h
new file mode 100644
index 00000000000..d36b9d7da1c
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/RequestedIncompatibleQosStatus.h
@@ -0,0 +1,41 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_REQUESTEDINCOMPATIBLEQOSSTATUS_H
+#define DDS4CCM_REQUESTEDINCOMPATIBLEQOSSTATUS_H
+
+#include "QosPolicyCountSeq.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::RequestedIncompatibleQosStatus DDS_RequestedIncompatibleQosStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::RequestedIncompatibleQosStatus &ddsstatus, const ::DDS_RequestedIncompatibleQosStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_policy_id = status.last_policy_id;
+ ddsstatus.policies <<= status.policies;
+}
+
+inline void
+operator<<= (::DDS_RequestedIncompatibleQosStatus &ddsstatus, const ::DDS::RequestedIncompatibleQosStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_policy_id = static_cast <DDS_QosPolicyId_t>(status.last_policy_id);
+ ddsstatus.policies <<= status.policies;
+}
+
+#endif
+
+#endif /* DDS4CCM_REQUESTEDINCOMPATIBLEQOSSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ResourceLimitsQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ResourceLimitsQosPolicy.h
new file mode 100644
index 00000000000..f7d2f2dd1f0
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/ResourceLimitsQosPolicy.h
@@ -0,0 +1,37 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_RESOURCELIMITSQOSPOLICY_H
+#define DDS4CCM_RESOURCELIMITSQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::ResourceLimitsQosPolicy DDS_ResourceLimitsQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::ResourceLimitsQosPolicy &ddsqos, const ::DDS_ResourceLimitsQosPolicy & qos)
+{
+ ddsqos.max_samples = qos.max_samples;
+ ddsqos.max_instances = qos.max_instances;
+ ddsqos.max_samples_per_instance = qos.max_samples_per_instance;
+}
+
+inline void
+operator<<= (::DDS_ResourceLimitsQosPolicy &ddsqos, const ::DDS::ResourceLimitsQosPolicy & qos)
+{
+ ddsqos.max_samples = qos.max_samples;
+ ddsqos.max_instances = qos.max_instances;
+ ddsqos.max_samples_per_instance = qos.max_samples_per_instance;
+}
+
+#endif
+
+#endif /* DDS4CCM_RESOURCELIMITSQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleInfo.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleInfo.h
new file mode 100644
index 00000000000..5b1122e1db8
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleInfo.h
@@ -0,0 +1,71 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef SAMPLE_INFO_H
+#define SAMPLE_INFO_H
+
+#include "dds4ccm/idl/dds_rtf2_dcpsC.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#include "Time_t.h"
+#include "InstanceHandle_t.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::SampleStateKind DDS_SampleStateKind;
+typedef ::DDS::SampleInfo DDS_SampleInfo;
+#endif
+
+inline void
+operator<<= (::CCM_DDS::AccessStatus & access_status, const ::DDS_SampleStateKind & sample_state)
+{
+ if (sample_state == ::DDS::NOT_READ_SAMPLE_STATE)
+ {
+ access_status = ::CCM_DDS::FRESH_INFO;
+ }
+ else if (sample_state == ::DDS::READ_SAMPLE_STATE)
+ {
+ access_status = ::CCM_DDS::ALREADY_SEEN;
+ }
+}
+
+inline void
+operator<<= (::CCM_DDS::ReadInfo& ccm_dds_readinfo, const ::DDS_SampleInfo& sample_info)
+{
+#if (CIAO_DDS4CCM_NDDS==1)
+ ccm_dds_readinfo.source_timestamp <<= sample_info.source_timestamp;
+#else
+ ccm_dds_readinfo.source_timestamp = sample_info.source_timestamp;
+#endif
+ ccm_dds_readinfo.access_status <<= sample_info.sample_state;
+#if (CIAO_DDS4CCM_NDDS==1)
+ ccm_dds_readinfo.instance_handle <<= sample_info.instance_handle;
+#else
+ ccm_dds_readinfo.instance_handle = sample_info.instance_handle;
+#endif
+
+ if (sample_info.instance_state == ::DDS::ALIVE_INSTANCE_STATE &&
+ sample_info.view_state == ::DDS::NEW_VIEW_STATE)
+ {
+ // Instance_status new
+ ccm_dds_readinfo.instance_status = ::CCM_DDS::INSTANCE_CREATED;
+ }
+ else if (sample_info.instance_state == ::DDS::NOT_ALIVE_DISPOSED_INSTANCE_STATE)
+ {
+ // Instance_status deleted
+ ccm_dds_readinfo.instance_status = ::CCM_DDS::INSTANCE_DELETED;
+ }
+ else if ((sample_info.instance_state == ::DDS::ALIVE_INSTANCE_STATE &&
+ sample_info.view_state == ::DDS::NOT_NEW_VIEW_STATE) ||
+ sample_info.instance_state == ::DDS::NOT_ALIVE_NO_WRITERS_INSTANCE_STATE)
+ {
+ // Instance_status updated
+ ccm_dds_readinfo.instance_status = ::CCM_DDS::INSTANCE_UPDATED;
+ }
+}
+
+#endif
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleLostStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleLostStatus.h
new file mode 100644
index 00000000000..6191c745c17
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleLostStatus.h
@@ -0,0 +1,36 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_SAMPLELOSTSTATUS_H
+#define DDS4CCM_SAMPLELOSTSTATUS_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::SampleLostStatus DDS_SampleLostStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::SampleLostStatus &ddsstatus, const ::DDS_SampleLostStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+}
+
+inline void
+operator>>= (const ::DDS_SampleLostStatus &status, ::DDS::SampleLostStatus & ddsstatus)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+}
+#endif
+
+#endif /* DDS4CCM_SAMPLELOSTSTATUS_H */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleRejectedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleRejectedStatus.h
new file mode 100644
index 00000000000..2467b100e13
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SampleRejectedStatus.h
@@ -0,0 +1,41 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_SAMPLEREJECTEDSTATUS_H
+#define DDS4CCM_SAMPLEREJECTEDSTATUS_H
+
+#include "InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::SampleRejectedStatus DDS_SampleRejectedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::SampleRejectedStatus &ddsstatus, const ::DDS_SampleRejectedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_reason = static_cast < ::DDS::SampleRejectedStatusKind> (status.last_reason);
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+inline void
+operator<<= (::DDS_SampleRejectedStatus &ddsstatus, const ::DDS::SampleRejectedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.last_reason = static_cast < ::DDS_SampleRejectedStatusKind> (status.last_reason);
+ ddsstatus.last_instance_handle <<= status.last_instance_handle;
+}
+
+#endif
+
+#endif /* DDS4CCM_SAMPLEREJECTEDSTATUS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/StringSeq.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/StringSeq.h
new file mode 100644
index 00000000000..6fcc769b4f2
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/StringSeq.h
@@ -0,0 +1,45 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ */
+
+#ifndef DDS4CCM_STRINGSEQ_T_H
+#define DDS4CCM_STRINGSEQ_T_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::StringSeq DDS_StringSeq;
+typedef long DDS_Long;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::StringSeq & string_seq, const ::DDS_StringSeq & dds_string_seq)
+{
+ string_seq.length (dds_string_seq.length ());
+ for (::DDS_Long i = 0 ; i < dds_string_seq.length(); ++i)
+ {
+ string_seq[i] = CORBA::string_dup (dds_string_seq[i]);
+ }
+}
+
+inline void
+operator<<= (::DDS_StringSeq & dds_string_seq, const ::DDS::StringSeq & string_seq)
+{
+ const char** parameterlist = new const char*[string_seq.length ()];
+
+ for (CORBA::ULong i = 0; i < string_seq.length (); ++i)
+ {
+ parameterlist[i] = string_seq[i].in ();
+ }
+ dds_string_seq.length (string_seq.length ());
+ dds_string_seq.from_array (parameterlist, string_seq.length ());
+ delete [] parameterlist;
+}
+#endif
+
+#endif /* DDS4CCM_STRINGSEQ_T_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriberQos.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriberQos.h
new file mode 100644
index 00000000000..9741f0b9682
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriberQos.h
@@ -0,0 +1,44 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_SUBSCRIBERQOS_H
+#define DDS4CCM_SUBSCRIBERQOS_H
+
+#include "EntityFactoryQosPolicy.h"
+#include "GroupDataQosPolicy.h"
+#include "PartitionQosPolicy.h"
+#include "PresentationQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::SubscriberQos DDS_SubscriberQos;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::SubscriberQos &ddsqos, const ::DDS_SubscriberQos & qos)
+{
+ ddsqos.presentation <<= qos.presentation;
+ ddsqos.partition <<= qos.partition;
+ ddsqos.group_data <<= qos.group_data;
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+inline void
+operator<<= (::DDS_SubscriberQos &ddsqos, const ::DDS::SubscriberQos & qos)
+{
+ ddsqos.presentation <<= qos.presentation;
+ ddsqos.partition <<= qos.partition;
+ ddsqos.group_data <<= qos.group_data;
+ ddsqos.entity_factory <<= qos.entity_factory;
+}
+
+#endif
+
+#endif /* DDS4CCM_SUBSCRIBERQOS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionBuiltinTopicData.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionBuiltinTopicData.h
new file mode 100644
index 00000000000..06f39b23e4b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionBuiltinTopicData.h
@@ -0,0 +1,80 @@
+/**
+ * @author Marcel Smit <msmit@remedy.nl>
+ *
+ * $Id$
+ *
+ */
+
+#ifndef SUBSCRIPTIONBUILTINTOPICDATA_H_
+#define SUBSCRIPTIONBUILTINTOPICDATA_H_
+
+#include "BuiltinTopicKey_t.h"
+#include "DurabilityQosPolicy.h"
+#include "DeadlineQosPolicy.h"
+#include "LatencyBudgetQosPolicy.h"
+#include "LivelinessQosPolicy.h"
+#include "ReliabilityQosPolicy.h"
+#include "OwnershipQosPolicy.h"
+#include "OwnershipStrengthQosPolicy.h"
+#include "DestinationOrderQosPolicy.h"
+#include "UserDataQosPolicy.h"
+#include "TimeBasedFilterQosPolicy.h"
+#include "PresentationQosPolicy.h"
+#include "PartitionQosPolicy.h"
+#include "TopicDataQosPolicy.h"
+#include "GroupDataQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::SubscriptionBuiltinTopicData &ddstopicdata, const ::DDS_SubscriptionBuiltinTopicData & topicdata)
+{
+ ddstopicdata.key <<= topicdata.key;
+ ddstopicdata.participant_key <<= topicdata.participant_key;
+ ddstopicdata.topic_name = topicdata.topic_name;
+ ddstopicdata.type_name = topicdata.type_name;
+
+ ddstopicdata.durability <<= topicdata.durability;
+ ddstopicdata.deadline <<= topicdata.deadline;
+ ddstopicdata.latency_budget <<= topicdata.latency_budget;
+ ddstopicdata.liveliness <<= topicdata.liveliness;
+ ddstopicdata.reliability <<= topicdata.reliability;
+ ddstopicdata.ownership <<= topicdata.ownership;
+ ddstopicdata.destination_order <<= topicdata.destination_order;
+ ddstopicdata.user_data <<= topicdata.user_data;
+ ddstopicdata.time_based_filter <<= topicdata.time_based_filter;
+
+ ddstopicdata.presentation <<= topicdata.presentation;
+ ddstopicdata.partition <<= topicdata.partition;
+ ddstopicdata.topic_data <<= topicdata.topic_data;
+ ddstopicdata.group_data <<= topicdata.group_data;
+}
+
+inline void
+operator<<= (::DDS_SubscriptionBuiltinTopicData & ddstopicdata, const ::DDS::SubscriptionBuiltinTopicData & topicdata)
+{
+ ddstopicdata.key <<= topicdata.key;
+ ddstopicdata.participant_key <<= topicdata.participant_key;
+ ddstopicdata.topic_name = CORBA::string_dup (topicdata.topic_name);
+ ddstopicdata.type_name = CORBA::string_dup (topicdata.type_name);
+
+ ddstopicdata.durability <<= topicdata.durability;
+ ddstopicdata.deadline <<= topicdata.deadline;
+ ddstopicdata.latency_budget <<= topicdata.latency_budget;
+ ddstopicdata.liveliness <<= topicdata.liveliness;
+ ddstopicdata.reliability <<= topicdata.reliability;
+ ddstopicdata.ownership <<= topicdata.ownership;
+ ddstopicdata.destination_order <<= topicdata.destination_order;
+ ddstopicdata.user_data <<= topicdata.user_data;
+ ddstopicdata.time_based_filter <<= topicdata.time_based_filter;
+
+ ddstopicdata.presentation <<= topicdata.presentation;
+ ddstopicdata.partition <<= topicdata.partition;
+ ddstopicdata.topic_data <<= topicdata.topic_data;
+ ddstopicdata.group_data <<= topicdata.group_data;
+}
+
+#endif
+
+#endif /* SUBSCRIPTIONBUILTINTOPICDATA_H_ */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionMatchedStatus.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionMatchedStatus.h
new file mode 100644
index 00000000000..a8d02d7a24d
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/SubscriptionMatchedStatus.h
@@ -0,0 +1,44 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_SUBSCRIPTIONMATCHEDSTATUS_H
+#define DDS4CCM_SUBSCRIPTIONMATCHEDSTATUS_H
+
+#include "InstanceHandle_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::SubscriptionMatchedStatus DDS_SubscriptionMatchedStatus;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::SubscriptionMatchedStatus &ddsstatus, const ::DDS_SubscriptionMatchedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.current_count = status.current_count;
+ ddsstatus.current_count_change = status.current_count_change;
+ ddsstatus.last_publication_handle <<= status.last_publication_handle;
+}
+
+inline void
+operator<<= (::DDS_SubscriptionMatchedStatus &ddsstatus, const ::DDS::SubscriptionMatchedStatus & status)
+{
+ ddsstatus.total_count = status.total_count;
+ ddsstatus.total_count_change = status.total_count_change;
+ ddsstatus.current_count = status.current_count;
+ ddsstatus.current_count_change = status.current_count_change;
+ ddsstatus.last_publication_handle <<= status.last_publication_handle;
+}
+
+#endif
+
+#endif /* DDS4CCM_SUBSCRIPTIONMATCHEDSTATUS_H */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TimeBasedFilterQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TimeBasedFilterQosPolicy.h
new file mode 100644
index 00000000000..dfb3f711249
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TimeBasedFilterQosPolicy.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_TIMEBASEDFILTERQOSPOLICY_H
+#define DDS4CCM_TIMEBASEDFILTERQOSPOLICY_H
+
+#include "Duration_t.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::TimeBasedFilterQosPolicy DDS_TimeBasedFilterQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::TimeBasedFilterQosPolicy &ddsqos, const ::DDS_TimeBasedFilterQosPolicy & qos)
+{
+ ddsqos.minimum_separation <<= qos.minimum_separation;
+}
+
+inline void
+operator<<= (::DDS_TimeBasedFilterQosPolicy &ddsqos, const ::DDS::TimeBasedFilterQosPolicy & qos)
+{
+ ddsqos.minimum_separation <<= qos.minimum_separation;
+}
+
+#endif
+
+#endif /* DDS4CCM_TIMEBASEDFILTERQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Time_t.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Time_t.h
new file mode 100644
index 00000000000..c9c62c27372
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/Time_t.h
@@ -0,0 +1,37 @@
+/**
+ * @author William R. Otte <wotte@dre.vanderbilt.edu>
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_TIME_T_H
+#define DDS4CCM_TIME_T_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::Time_t DDS_Time_t;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::Time_t &ddstime, const ::DDS_Time_t & time)
+{
+ ddstime.sec = time.sec;
+ ddstime.nanosec = time.nanosec;
+}
+
+inline void
+operator<<= (::DDS_Time_t &ddstime, const ::DDS::Time_t & time)
+{
+ ddstime.sec = time.sec;
+ ddstime.nanosec = time.nanosec;
+}
+
+#endif
+
+#endif /* DDS4CCM_TIME_T_H */
+
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicDataQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicDataQosPolicy.h
new file mode 100644
index 00000000000..394b201ff77
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicDataQosPolicy.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_TOPICDATAQOSPOLICY_H
+#define DDS4CCM_TOPICDATAQOSPOLICY_H
+
+#include "OctetSeq.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::TopicDataQosPolicy DDS_TopicDataQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::TopicDataQosPolicy &ddsqos, const ::DDS_TopicDataQosPolicy & qos)
+{
+ ddsqos.value <<= qos.value;
+}
+
+inline void
+operator<<= (::DDS_TopicDataQosPolicy &ddsqos, const ::DDS::TopicDataQosPolicy & qos)
+{
+ ddsqos.value <<= qos.value;
+}
+
+#endif
+
+#endif /* DDS4CCM_TOPICDATAQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicQos.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicQos.h
new file mode 100644
index 00000000000..1cbc53d2b4b
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TopicQos.h
@@ -0,0 +1,71 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_TOPICQOS_H
+#define DDS4CCM_TOPICQOS_H
+
+#include "TopicDataQosPolicy.h"
+#include "DurabilityQosPolicy.h"
+#include "DurabilityServiceQosPolicy.h"
+#include "DeadlineQosPolicy.h"
+#include "LatencyBudgetQosPolicy.h"
+#include "LivelinessQosPolicy.h"
+#include "ReliabilityQosPolicy.h"
+#include "DestinationOrderQosPolicy.h"
+#include "HistoryQosPolicy.h"
+#include "ResourceLimitsQosPolicy.h"
+#include "TransportPriorityQosPolicy.h"
+#include "LifespanQosPolicy.h"
+#include "OwnershipQosPolicy.h"
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::TopicQos DDS_TopicQos;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::TopicQos &ddsqos, const ::DDS_TopicQos & qos)
+{
+ ddsqos.topic_data <<= qos.topic_data;
+ ddsqos.durability <<= qos.durability;
+ ddsqos.durability_service <<= qos.durability_service;
+ ddsqos.deadline <<= qos.deadline;
+ ddsqos.latency_budget <<= qos.latency_budget;
+ ddsqos.liveliness <<= qos.liveliness;
+ ddsqos.reliability <<= qos.reliability;
+ ddsqos.destination_order <<= qos.destination_order;
+ ddsqos.history <<= qos.history;
+ ddsqos.resource_limits <<= qos.resource_limits;
+ ddsqos.transport_priority <<= qos.transport_priority;
+ ddsqos.lifespan <<= qos.lifespan;
+ ddsqos.ownership <<= qos.ownership;
+}
+
+inline void
+operator<<= (::DDS_TopicQos &ddsqos, const ::DDS::TopicQos & qos)
+{
+ ddsqos.topic_data <<= qos.topic_data;
+ ddsqos.durability <<= qos.durability;
+ ddsqos.durability_service <<= qos.durability_service;
+ ddsqos.deadline <<= qos.deadline;
+ ddsqos.latency_budget <<= qos.latency_budget;
+ ddsqos.liveliness <<= qos.liveliness;
+ ddsqos.reliability <<= qos.reliability;
+ ddsqos.destination_order <<= qos.destination_order;
+ ddsqos.history <<= qos.history;
+ ddsqos.resource_limits <<= qos.resource_limits;
+ ddsqos.transport_priority <<= qos.transport_priority;
+ ddsqos.lifespan <<= qos.lifespan;
+ ddsqos.ownership <<= qos.ownership;
+}
+
+#endif
+
+#endif /* DDS4CCM_TOPICQOS_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TransportPriorityQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TransportPriorityQosPolicy.h
new file mode 100644
index 00000000000..3116b5f5bb5
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/TransportPriorityQosPolicy.h
@@ -0,0 +1,33 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_TRANSPORTPRIOTITYQOSPOLICY_H
+#define DDS4CCM_TRANSPORTPRIOTITYQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::TransportPriorityQosPolicy DDS_TransportPriorityQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::TransportPriorityQosPolicy &ddsqos, const ::DDS_TransportPriorityQosPolicy & qos)
+{
+ ddsqos.value = qos.value;
+}
+
+inline void
+operator<<= (::DDS_TransportPriorityQosPolicy &ddsqos, const ::DDS::TransportPriorityQosPolicy & qos)
+{
+ ddsqos.value = qos.value;
+}
+
+#endif
+
+#endif /* DDS4CCM_TRANSPORTPRIOTITYQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/UserDataQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/UserDataQosPolicy.h
new file mode 100644
index 00000000000..9e4dc792d5d
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/UserDataQosPolicy.h
@@ -0,0 +1,34 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_USERDATAQOSPOLICY_H
+#define DDS4CCM_USERDATAQOSPOLICY_H
+
+#include "OctetSeq.h"
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::UserDataQosPolicy DDS_UserDataQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::UserDataQosPolicy &ddsqos, const ::DDS_UserDataQosPolicy & qos)
+{
+ ddsqos.value <<= qos.value;
+}
+
+inline void
+operator<<= (::DDS_UserDataQosPolicy &ddsqos, const ::DDS::UserDataQosPolicy & qos)
+{
+ ddsqos.value <<= qos.value;
+}
+
+#endif
+
+#endif /* DDS4CCM_USERDATAQOSPOLICY_H */
diff --git a/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/WriterDataLifecycleQosPolicy.h b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/WriterDataLifecycleQosPolicy.h
new file mode 100644
index 00000000000..6cecbb95c45
--- /dev/null
+++ b/modules/CIAO/connectors/dds4ccm/impl/dds/ndds/WriterDataLifecycleQosPolicy.h
@@ -0,0 +1,33 @@
+/**
+ * @author Johnny Willemsen <jwillemsen@remedy.nl>
+ *
+ * $Id$
+ *
+ * Wrapper facade for NDDS.
+ */
+
+#ifndef DDS4CCM_WRITERDATALIFECYCLEQOSPOLICY_H
+#define DDS4CCM_WRITERDATALIFECYCLEQOSPOLICY_H
+
+#include "dds4ccm/impl/dds4ccm_conf.h"
+
+#if (CIAO_DDS4CCM_OPENDDS==1)
+typedef ::DDS::WriterDataLifecycleQosPolicy DDS_WriterDataLifecycleQosPolicy;
+#endif
+
+#if (CIAO_DDS4CCM_NDDS==1)
+inline void
+operator<<= (::DDS::WriterDataLifecycleQosPolicy &ddsqos, const ::DDS_WriterDataLifecycleQosPolicy & qos)
+{
+ ddsqos.autodispose_unregistered_instances = qos.autodispose_unregistered_instances;
+}
+
+inline void
+operator<<= (::DDS_WriterDataLifecycleQosPolicy &ddsqos, const ::DDS::WriterDataLifecycleQosPolicy & qos)
+{
+ ddsqos.autodispose_unregistered_instances = qos.autodispose_unregistered_instances;
+}
+
+#endif
+
+#endif /* DDS4CCM_WRITERDATALIFECYCLEQOSPOLICY_H */