Go to the documentation of this file.00001 #include "tao/PI/ClientRequestDetails.h"
00002 #include "tao/SystemException.h"
00003
00004 #if TAO_HAS_INTERCEPTORS == 1
00005
00006 #if !defined (__ACE_INLINE__)
00007 #include "tao/PI/ClientRequestDetails.inl"
00008 #endif
00009
00010 ACE_RCSID (PI,
00011 ClientRequestDetails,
00012 "$Id: ClientRequestDetails.cpp 76995 2007-02-11 12:51:42Z johnnyw $")
00013
00014 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00015
00016 namespace TAO
00017 {
00018 void
00019 ClientRequestDetails::apply_policies (const CORBA::PolicyList &policies)
00020 {
00021
00022 bool processing_mode_applied = false;
00023
00024 const CORBA::ULong plen = policies.length ();
00025
00026 for (CORBA::ULong i = 0; i < plen; ++i)
00027 {
00028 CORBA::Policy_var policy = CORBA::Policy::_duplicate (policies[i]);
00029
00030 if (CORBA::is_nil (policy.in ()))
00031 {
00032
00033 continue;
00034 }
00035
00036
00037 const CORBA::PolicyType policy_type =
00038 policy->policy_type ();
00039
00040 if (policy_type == PortableInterceptor::PROCESSING_MODE_POLICY_TYPE)
00041 {
00042 if (processing_mode_applied)
00043 {
00044
00045
00046 throw ::CORBA::INV_POLICY ();
00047 }
00048
00049
00050 processing_mode_applied = true;
00051
00052
00053 PortableInterceptor::ProcessingModePolicy_var pm_policy =
00054 PortableInterceptor::ProcessingModePolicy::_narrow (
00055 policy.in ());
00056
00057
00058 this->processing_mode_ = pm_policy->processing_mode ();
00059 }
00060 else
00061 {
00062
00063 throw ::CORBA::INV_POLICY ();
00064 }
00065 }
00066 }
00067 }
00068
00069 TAO_END_VERSIONED_NAMESPACE_DECL
00070
00071 #endif