00001 #include "tao/PI_Server/ServerRequestDetails.h"
00002
00003 #if TAO_HAS_INTERCEPTORS == 1
00004
00005 #if !defined (__ACE_INLINE__)
00006 #include "tao/PI_Server/ServerRequestDetails.inl"
00007 #endif
00008
00009 ACE_RCSID (PI_Server,
00010 ServerRequestDetails,
00011 "ServerRequestDetails.cpp,v 1.3 2006/04/19 09:25:28 jwillemsen Exp")
00012
00013 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00014
00015 namespace TAO
00016 {
00017 void
00018 ServerRequestDetails::apply_policies (
00019 const CORBA::PolicyList &policies
00020 ACE_ENV_ARG_DECL)
00021 {
00022
00023 bool processing_mode_applied = false;
00024
00025 const CORBA::ULong plen = policies.length ();
00026
00027 for (CORBA::ULong i = 0; i < plen; ++i)
00028 {
00029 CORBA::Policy_var policy = CORBA::Policy::_duplicate (policies[i]);
00030
00031 if (CORBA::is_nil (policy.in ()))
00032 {
00033
00034 continue;
00035 }
00036
00037
00038 const CORBA::PolicyType policy_type =
00039 policy->policy_type (ACE_ENV_SINGLE_ARG_PARAMETER);
00040 ACE_CHECK;
00041
00042 if (policy_type == PortableInterceptor::PROCESSING_MODE_POLICY_TYPE)
00043 {
00044 if (processing_mode_applied)
00045 {
00046
00047
00048 ACE_THROW (CORBA::INV_POLICY ());
00049 }
00050
00051
00052 processing_mode_applied = true;
00053
00054
00055 PortableInterceptor::ProcessingModePolicy_var pm_policy =
00056 PortableInterceptor::ProcessingModePolicy::_narrow (
00057 policy.in ()
00058 ACE_ENV_ARG_PARAMETER);
00059 ACE_CHECK;
00060
00061
00062 this->processing_mode_ =
00063 pm_policy->processing_mode (ACE_ENV_SINGLE_ARG_PARAMETER);
00064 ACE_CHECK;
00065 }
00066 else
00067 {
00068
00069 ACE_THROW (CORBA::INV_POLICY ());
00070 }
00071 }
00072 }
00073 }
00074
00075 TAO_END_VERSIONED_NAMESPACE_DECL
00076
00077 #endif