summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Notify_QoSAdmin_i.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Notify/Notify_QoSAdmin_i.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Notify/Notify_QoSAdmin_i.cpp151
1 files changed, 135 insertions, 16 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Notify/Notify_QoSAdmin_i.cpp b/TAO/orbsvcs/orbsvcs/Notify/Notify_QoSAdmin_i.cpp
index 555f4bee2e7..40580ea329b 100644
--- a/TAO/orbsvcs/orbsvcs/Notify/Notify_QoSAdmin_i.cpp
+++ b/TAO/orbsvcs/orbsvcs/Notify/Notify_QoSAdmin_i.cpp
@@ -1,22 +1,40 @@
/* -*- C++ -*- $Id$ */
#include "Notify_QoSAdmin_i.h"
+#include "Notify_Extensions.h"
+
+#if !defined (__ACE_INLINE__)
+#include "Notify_QoSAdmin_i.inl"
+#endif /* __ACE_INLINE__ */
ACE_RCSID(Notify, Notify_QoSAdmin_i, "$Id$")
// Implementation skeleton constructor
TAO_Notify_QoSAdmin_i::TAO_Notify_QoSAdmin_i (void)
:event_reliability_ (CosNotification::BestEffort),
+ event_reliability_set_ (0),
connection_reliability_ (CosNotification::BestEffort),
+ connection_reliability_set_ (0),
priority_ (CosNotification::DefaultPriority),
+ priority_set_ (0),
timeout_ (0),
+ timeout_set_ (0),
start_time_supported_ (0),
+ start_time_supported_set_ (0),
stop_time_supported_ (0),
+ stop_time_supported_set_ (0),
max_events_per_consumer_ (0),
+ max_events_per_consumer_set_ (0),
order_policy_ (CosNotification::AnyOrder),
+ order_policy_set_ (0),
discard_policy_ (CosNotification::AnyOrder),
+ discard_policy_set_ (0),
maximum_batch_size_ (1),
- pacing_interval_ (0)
+ maximum_batch_size_set_ (0),
+ pacing_interval_ (0),
+ pacing_interval_set_ (0),
+ blocking_timeout_ (0),
+ blocking_timeout_set_ (0)
{
}
@@ -26,14 +44,100 @@ TAO_Notify_QoSAdmin_i::~TAO_Notify_QoSAdmin_i (void)
}
CosNotification::QoSProperties * TAO_Notify_QoSAdmin_i::get_qos (
- TAO_ENV_SINGLE_ARG_DECL_NOT_USED
+ TAO_ENV_SINGLE_ARG_DECL
)
ACE_THROW_SPEC ((
CORBA::SystemException
))
{
- //Add your implementation here
- return 0;
+ static const unsigned int property_count = 12;
+ CosNotification::QoSProperties_var properties;
+ ACE_NEW_THROW_EX (properties,
+ CosNotification::AdminProperties (property_count),
+ CORBA::NO_MEMORY ());
+
+ properties->length (property_count);
+ unsigned int index = 0;
+
+ if (this->event_reliability_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::EventReliability);
+ (*properties)[index++].value <<= this->event_reliability_;
+ }
+ if (this->connection_reliability_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::ConnectionReliability);
+ (*properties)[index++].value <<= this->connection_reliability_;
+ }
+ if (this->priority_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::Priority);
+ (*properties)[index++].value <<= this->priority_;
+ }
+ if (this->timeout_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::Timeout);
+ (*properties)[index++].value <<= this->timeout_;
+ }
+ if (this->blocking_timeout_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (TAO_Notify_Extensions::BlockingPolicy);
+ (*properties)[index++].value <<= this->blocking_timeout_;
+ }
+ if (this->start_time_supported_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::StartTimeSupported);
+ (*properties)[index++].value <<= CORBA::Any::from_boolean (
+ this->start_time_supported_);
+ }
+ if (this->stop_time_supported_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::StopTimeSupported);
+ (*properties)[index++].value <<= CORBA::Any::from_boolean (
+ this->stop_time_supported_);
+ }
+ if (this->max_events_per_consumer_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::MaxEventsPerConsumer);
+ (*properties)[index++].value <<= this->max_events_per_consumer_;
+ }
+ if (this->order_policy_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::OrderPolicy);
+ (*properties)[index++].value <<= this->order_policy_;
+ }
+ if (this->discard_policy_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::DiscardPolicy);
+ (*properties)[index++].value <<= this->discard_policy_;
+ }
+ if (this->maximum_batch_size_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::MaximumBatchSize);
+ (*properties)[index++].value <<= this->maximum_batch_size_;
+ }
+ if (this->pacing_interval_set_)
+ {
+ (*properties)[index].name =
+ CORBA::string_dup (CosNotification::PacingInterval);
+ (*properties)[index++].value <<= this->pacing_interval_;
+ }
+
+ // Set the length
+ properties->length (index);
+
+ return properties._retn ();
}
void
@@ -47,66 +151,81 @@ TAO_Notify_QoSAdmin_i::set_qos (const CosNotification::QoSProperties & qos
{
for (CORBA::ULong index = 0; index < qos.length (); ++index)
{
- ACE_CString property_name(qos[index].name);
+ ACE_CString property_name (qos[index].name);
if (property_name.compare (CosNotification::EventReliability) == 0)
{
- CosNotification::PropertyErrorSeq err_seq(1);
+ CosNotification::PropertyErrorSeq err_seq (1);
err_seq.length (1);
err_seq[0].code = CosNotification::UNSUPPORTED_PROPERTY;
err_seq[0].name = CORBA::string_dup (CosNotification::EventReliability);
+ this->event_reliability_set_ = 1;
ACE_THROW (CosNotification::UnsupportedQoS (err_seq));
}
else if (property_name.compare (CosNotification::ConnectionReliability) == 0)
{
- CosNotification::PropertyErrorSeq err_seq(1);
+ CosNotification::PropertyErrorSeq err_seq (1);
err_seq.length (1);
err_seq[0].code = CosNotification::UNSUPPORTED_PROPERTY;
err_seq[0].name = CORBA::string_dup (CosNotification::ConnectionReliability);
+ this->connection_reliability_set_ = 1;
ACE_THROW (CosNotification::UnsupportedQoS (err_seq));
}
else if (property_name.compare (CosNotification::Priority) == 0)
{
qos[index].value >>= this->priority_;
+ this->priority_set_ = 1;
}
- else if (property_name.compare (CosNotification::Timeout))
+ else if (property_name.compare (CosNotification::Timeout) == 0)
{
qos[index].value >>= this->timeout_;
+ this->timeout_set_ = 1;
+ }
+ else if (property_name.compare (TAO_Notify_Extensions::BlockingPolicy) == 0)
+ {
+ qos[index].value >>= this->blocking_timeout_;
+ this->blocking_timeout_set_ = 1;
}
- else if (property_name.compare (CosNotification::StartTimeSupported))
+ else if (property_name.compare (CosNotification::StartTimeSupported) == 0)
{
qos[index].value >>= CORBA::Any::to_boolean (this->start_time_supported_);
+ this->start_time_supported_set_ = 1;
}
- else if (property_name.compare (CosNotification::StopTimeSupported))
+ else if (property_name.compare (CosNotification::StopTimeSupported) == 0)
{
qos[index].value >>= CORBA::Any::to_boolean (this->stop_time_supported_);
+ this->stop_time_supported_set_ = 1;
}
- else if (property_name.compare (CosNotification::MaxEventsPerConsumer))
+ else if (property_name.compare (CosNotification::MaxEventsPerConsumer) == 0)
{
qos[index].value >>= this->max_events_per_consumer_;
+ this->max_events_per_consumer_set_ = 1;
}
- else if (property_name.compare (CosNotification::OrderPolicy))
+ else if (property_name.compare (CosNotification::OrderPolicy) == 0)
{
qos[index].value >>= this->order_policy_;
+ this->order_policy_set_ = 1;
}
- else if (property_name.compare (CosNotification::DiscardPolicy))
+ else if (property_name.compare (CosNotification::DiscardPolicy) == 0)
{
qos[index].value >>= this->discard_policy_;
+ this->discard_policy_set_ = 1;
}
- else if (property_name.compare (CosNotification::MaximumBatchSize))
+ else if (property_name.compare (CosNotification::MaximumBatchSize) == 0)
{
qos[index].value >>= this->maximum_batch_size_;
+ this->maximum_batch_size_set_ = 1;
}
- else if (property_name.compare (CosNotification::DiscardPolicy))
+ else if (property_name.compare (CosNotification::PacingInterval) == 0)
{
qos[index].value >>= this->pacing_interval_;
+ this->pacing_interval_set_ = 1;
}
}
- return;
}
void