diff options
Diffstat (limited to 'TAO/tao/Policy_Manager.cpp')
-rw-r--r-- | TAO/tao/Policy_Manager.cpp | 519 |
1 files changed, 0 insertions, 519 deletions
diff --git a/TAO/tao/Policy_Manager.cpp b/TAO/tao/Policy_Manager.cpp deleted file mode 100644 index 67ed5640909..00000000000 --- a/TAO/tao/Policy_Manager.cpp +++ /dev/null @@ -1,519 +0,0 @@ -// $Id$ - -#include "tao/Policy_Manager.h" - -#if defined (TAO_HAS_CORBA_MESSAGING) - -#include "tao/Environment.h" -#include "tao/ORB_Core.h" - -#include "tao/Buffering_Constraint_Policy.h" -#include "tao/Messaging_Policy_i.h" -#include "tao/Client_Priority_Policy.h" - -#if !defined (__ACE_INLINE__) -# include "tao/Policy_Manager.i" -#endif /* ! __ACE_INLINE__ */ - -ACE_RCSID(tao, Policy_Manager, "$Id$") - -TAO_Policy_Manager_Impl::~TAO_Policy_Manager_Impl (void) -{ - ACE_DECLARE_NEW_CORBA_ENV; - ACE_TRY - { - this->cleanup_i (ACE_TRY_ENV); - ACE_TRY_CHECK; - } - ACE_CATCHANY - { - // Ignore exceptions... - } - ACE_ENDTRY; -} - -void -TAO_Policy_Manager_Impl::copy_from (TAO_Policy_Manager_Impl *source, - CORBA::Environment &ACE_TRY_ENV) -{ - if (source == 0) - return; - - this->cleanup_i (ACE_TRY_ENV); - ACE_CHECK; - - if (source->relative_roundtrip_timeout_ != 0) - { - this->relative_roundtrip_timeout_ = - source->relative_roundtrip_timeout_->clone (); - - this->count_++; - } - - if (source->client_priority_ != 0) - { - this->client_priority_ = - source->client_priority_->clone (); - - this->count_++; - } - - if (source->sync_scope_ != 0) - { - this->sync_scope_ = - source->sync_scope_->clone (); - - this->count_++; - } - - if (source->buffering_constraint_ != 0) - { - this->buffering_constraint_ = - source->buffering_constraint_->clone (); - - this->count_++; - } - - for (CORBA::ULong i = 0; - i < source->other_policies_.length (); - ++i) - { - CORBA::Policy_ptr policy = source->other_policies_[i]; - if (CORBA::is_nil (policy)) - continue; - - CORBA::Policy_var copy = policy->copy (ACE_TRY_ENV); - ACE_CHECK; - - CORBA::ULong length = this->other_policies_.length (); - this->other_policies_.length (length + 1); - this->other_policies_[length] = copy._retn (); - this->count_++; - } -} - -void -TAO_Policy_Manager_Impl::cleanup_i (CORBA::Environment &ACE_TRY_ENV) -{ - for (CORBA::ULong i = 0; - i < this->other_policies_.length (); - ++i) - { - this->other_policies_[i]->destroy (ACE_TRY_ENV); - ACE_CHECK; - this->other_policies_[i] = CORBA::Policy::_nil (); - } - this->other_policies_.length (0); - - delete this->relative_roundtrip_timeout_; - this->relative_roundtrip_timeout_ = 0; - - delete this->client_priority_; - this->client_priority_ = 0; - - delete this->sync_scope_; - this->sync_scope_ = 0; - - delete this->buffering_constraint_; - this->buffering_constraint_ = 0; - - this->count_ = 0; -} - - // @@ !!! Add comments regarding Policy lifetimes, etc. -void -TAO_Policy_Manager_Impl::set_policy_overrides ( - const CORBA::PolicyList &policies, - CORBA::SetOverrideType set_add, - CORBA::Environment &ACE_TRY_ENV) -{ - // @@ The spec does not say what to do on this case. - if (set_add != CORBA::SET_OVERRIDE - && set_add != CORBA::ADD_OVERRIDE) - ACE_THROW (CORBA::BAD_PARAM ()); - - if (set_add == CORBA::SET_OVERRIDE) - { - this->cleanup_i (ACE_TRY_ENV); - ACE_CHECK; - } - - for (CORBA::ULong i = 0; i < policies.length (); ++i) - { - CORBA::Policy_ptr policy = policies[i]; - if (CORBA::is_nil (policy)) - continue; - - CORBA::ULong slot = policy->policy_type (ACE_TRY_ENV); - ACE_CHECK; - - switch (slot) - { - case TAO_MESSAGING_RELATIVE_RT_TIMEOUT_POLICY_TYPE: - { - TAO_ServantBase *servant = policy->_servant (); - if (servant == 0) - ACE_THROW (CORBA::INTERNAL ()); - - POA_Messaging::RelativeRoundtripTimeoutPolicy *tmp = - ACE_static_cast(POA_Messaging::RelativeRoundtripTimeoutPolicy*, - servant->_downcast ("IDL:Messaging/RelativeRoundtripTimeoutPolicy:1.0")); - if (tmp == 0) - ACE_THROW (CORBA::INTERNAL ()); - - TAO_RelativeRoundtripTimeoutPolicy_i *policy = - ACE_dynamic_cast (TAO_RelativeRoundtripTimeoutPolicy_i *, tmp); - - if (policy == 0) - ACE_THROW (CORBA::INTERNAL ()); - - delete this->relative_roundtrip_timeout_; - this->relative_roundtrip_timeout_ = policy->clone (); - - this->count_++; - } - break; - - case TAO_CLIENT_PRIORITY_POLICY_TYPE: - { - TAO_ServantBase *servant = policy->_servant (); - if (servant == 0) - ACE_THROW (CORBA::INTERNAL ()); - - POA_TAO::ClientPriorityPolicy *tmp = - ACE_static_cast(POA_TAO::ClientPriorityPolicy*, - servant->_downcast ("IDL:TAO/ClientPriorityPolicy:1.0")); - if (tmp == 0) - ACE_THROW (CORBA::INTERNAL ()); - - TAO_Client_Priority_Policy *policy = - ACE_dynamic_cast (TAO_Client_Priority_Policy *, tmp); - - if (policy == 0) - ACE_THROW (CORBA::INTERNAL ()); - - delete this->client_priority_; - this->client_priority_ = policy->clone (); - - this->count_++; - } - break; - - case TAO_MESSAGING_SYNC_SCOPE_POLICY_TYPE: - { - TAO_ServantBase *servant = policy->_servant (); - if (servant == 0) - ACE_THROW (CORBA::INTERNAL ()); - - POA_Messaging::SyncScopePolicy *tmp = - ACE_static_cast(POA_Messaging::SyncScopePolicy*, - servant->_downcast ("IDL:Messaging/SyncScopePolicy:1.0")); - if (tmp == 0) - ACE_THROW (CORBA::INTERNAL ()); - - TAO_Sync_Scope_Policy *policy = - ACE_dynamic_cast (TAO_Sync_Scope_Policy *, tmp); - - if (policy == 0) - ACE_THROW (CORBA::INTERNAL ()); - - delete this->sync_scope_; - this->sync_scope_ = policy->clone (); - - this->count_++; - } - break; - - case TAO_BUFFERING_CONSTRAINT_POLICY_TYPE: - { - TAO_ServantBase *servant = policy->_servant (); - if (servant == 0) - ACE_THROW (CORBA::INTERNAL ()); - - POA_TAO::BufferingConstraintPolicy *tmp = - ACE_static_cast(POA_TAO::BufferingConstraintPolicy*, - servant->_downcast ("IDL:TAO/BufferingConstraintPolicy:1.0")); - if (tmp == 0) - ACE_THROW (CORBA::INTERNAL ()); - - TAO_Buffering_Constraint_Policy *policy = - ACE_dynamic_cast (TAO_Buffering_Constraint_Policy *, tmp); - - if (policy == 0) - ACE_THROW (CORBA::INTERNAL ()); - - delete this->buffering_constraint_; - this->buffering_constraint_ = policy->clone (); - - this->count_++; - } - break; - - case TAO_MESSAGING_REBIND_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_PRIORITY_POLICY_TYPE: - case TAO_MESSAGING_REPLY_PRIORITY_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_START_TIME_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_END_TIME_POLICY_TYPE: - case TAO_MESSAGING_REPLY_START_TIME_POLICY_TYPE: - case TAO_MESSAGING_REPLY_END_TIME_POLICY_TYPE: - case TAO_MESSAGING_RELATIVE_REQ_TIMEOUT_POLICY_TYPE: - case TAO_MESSAGING_ROUTING_POLICY_TYPE: - case TAO_MESSAGING_MAX_HOPS_POLICY_TYPE: - case TAO_MESSAGING_QUEUE_ORDER_POLICY_TYPE: - default: - { - CORBA::Policy_var copy = policy->copy (ACE_TRY_ENV); - ACE_CHECK; - - CORBA::ULong j = 0; - CORBA::ULong length = this->other_policies_.length (); - while (j != length) - { - CORBA::ULong current = - this->other_policies_[j]->policy_type (ACE_TRY_ENV); - ACE_CHECK; - - if (current == slot) - { - this->other_policies_[j]->destroy (ACE_TRY_ENV); - ACE_CHECK; - this->other_policies_[j] = copy._retn (); - break; - } - ++j; - } - if (j == length) - { - this->other_policies_.length (length + 1); - this->other_policies_[j] = copy._retn (); - } - this->count_++; - } - break; - } - } -} - -CORBA::PolicyList * -TAO_Policy_Manager_Impl::get_policy_overrides ( - const CORBA::PolicyTypeSeq &types, - CORBA::Environment &ACE_TRY_ENV) -{ - CORBA::ULong types_length = types.length (); - - CORBA::ULong slots = types_length; - if (slots == 0) - slots = this->count_; - - CORBA::PolicyList_var policy_list = - new CORBA::PolicyList (slots); - policy_list->length (slots); - - CORBA::ULong n = 0; - if (types_length == 0) - { - if (this->relative_roundtrip_timeout_ != 0) - { - policy_list[n++] = - relative_roundtrip_timeout_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - - if (this->client_priority_ != 0) - { - policy_list[n++] = - client_priority_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - - if (this->sync_scope_ != 0) - { - policy_list[n++] = - sync_scope_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - - if (this->buffering_constraint_ != 0) - { - policy_list[n++] = - buffering_constraint_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - - CORBA::ULong length = this->other_policies_.length (); - for (CORBA::ULong i = 0; i != length; ++i) - { - if (CORBA::is_nil (this->other_policies_[i].in ())) - continue; - policy_list[n++] = - CORBA::Policy::_duplicate (this->other_policies_[i].in ()); - } - } - else - { - for (CORBA::ULong j = 0; j < types.length (); ++j) - { - CORBA::ULong slot = types[j]; - - switch (slot) - { - case TAO_MESSAGING_RELATIVE_RT_TIMEOUT_POLICY_TYPE: - if (this->relative_roundtrip_timeout_ != 0) - { - policy_list[n++] = - relative_roundtrip_timeout_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - break; - - case TAO_CLIENT_PRIORITY_POLICY_TYPE: - if (this->client_priority_ != 0) - { - policy_list[n++] = - client_priority_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - break; - - case TAO_MESSAGING_SYNC_SCOPE_POLICY_TYPE: - if (this->sync_scope_ != 0) - { - policy_list[n++] = - sync_scope_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - break; - - case TAO_BUFFERING_CONSTRAINT_POLICY_TYPE: - if (this->buffering_constraint_ != 0) - { - policy_list[n++] = - buffering_constraint_->_this (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - } - break; - - case TAO_MESSAGING_REBIND_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_PRIORITY_POLICY_TYPE: - case TAO_MESSAGING_REPLY_PRIORITY_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_START_TIME_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_END_TIME_POLICY_TYPE: - case TAO_MESSAGING_REPLY_START_TIME_POLICY_TYPE: - case TAO_MESSAGING_REPLY_END_TIME_POLICY_TYPE: - case TAO_MESSAGING_RELATIVE_REQ_TIMEOUT_POLICY_TYPE: - case TAO_MESSAGING_ROUTING_POLICY_TYPE: - case TAO_MESSAGING_MAX_HOPS_POLICY_TYPE: - case TAO_MESSAGING_QUEUE_ORDER_POLICY_TYPE: - default: - { - CORBA::ULong length = this->other_policies_.length (); - for (CORBA::ULong i = 0; - i != length; - ++i) - { - CORBA::ULong current = - this->other_policies_[i]->policy_type (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - - if (current != slot) - continue; - - policy_list[n++] = - CORBA::Policy::_duplicate (this->other_policies_[i].in ()); - break; - } - } - } - } - } - - policy_list->length (n); - return policy_list._retn (); -} - -CORBA::Policy_ptr -TAO_Policy_Manager_Impl::get_policy (CORBA::PolicyType type, - CORBA::Environment &ACE_TRY_ENV) -{ - switch (type) - { - case TAO_MESSAGING_RELATIVE_RT_TIMEOUT_POLICY_TYPE: - if (this->relative_roundtrip_timeout_ != 0) - { - return this->relative_roundtrip_timeout_->_this (ACE_TRY_ENV); - } - return CORBA::Policy::_nil (); - - case TAO_CLIENT_PRIORITY_POLICY_TYPE: - if (this->client_priority_ != 0) - { - return this->client_priority_->_this (ACE_TRY_ENV); - } - return CORBA::Policy::_nil (); - - case TAO_MESSAGING_SYNC_SCOPE_POLICY_TYPE: - if (this->sync_scope_ != 0) - { - return this->sync_scope_->_this (ACE_TRY_ENV); - } - return CORBA::Policy::_nil (); - - case TAO_BUFFERING_CONSTRAINT_POLICY_TYPE: - if (this->buffering_constraint_ != 0) - { - return this->buffering_constraint_->_this (ACE_TRY_ENV); - } - return CORBA::Policy::_nil (); - - case TAO_MESSAGING_REBIND_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_PRIORITY_POLICY_TYPE: - case TAO_MESSAGING_REPLY_PRIORITY_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_START_TIME_POLICY_TYPE: - case TAO_MESSAGING_REQUEST_END_TIME_POLICY_TYPE: - case TAO_MESSAGING_REPLY_START_TIME_POLICY_TYPE: - case TAO_MESSAGING_REPLY_END_TIME_POLICY_TYPE: - case TAO_MESSAGING_RELATIVE_REQ_TIMEOUT_POLICY_TYPE: - case TAO_MESSAGING_ROUTING_POLICY_TYPE: - case TAO_MESSAGING_MAX_HOPS_POLICY_TYPE: - case TAO_MESSAGING_QUEUE_ORDER_POLICY_TYPE: - default: - { - CORBA::ULong length = this->other_policies_.length (); - for (CORBA::ULong i = 0; - i != length; - ++i) - { - CORBA::ULong current = - this->other_policies_[i]->policy_type (ACE_TRY_ENV); - ACE_CHECK_RETURN (0); - - if (current != type) - continue; - - return CORBA::Policy::_duplicate (this->other_policies_[i].in ()); - } - } - } - return CORBA::Policy::_nil (); -} - -// **************************************************************** - -TAO_Policy_Current_Impl & -TAO_Policy_Current::implementation (TAO_Policy_Current_Impl ¤t) -{ - TAO_TSS_Resources *tss = - TAO_TSS_RESOURCES::instance (); - - TAO_Policy_Current_Impl *old = tss->policy_current_; - tss->policy_current_ = ¤t; - return *old; -} - -TAO_Policy_Current_Impl & -TAO_Policy_Current::implementation (void) const -{ - return *TAO_TSS_RESOURCES::instance ()->policy_current_; -} - -#endif /* TAO_HAS_CORBA_MESSAGING */ |