ClientRequestDetails.cpp

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 /* defined INLINE */
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     // Flag to check for duplicate ProcessingModePolicy objects in the list.
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             // Just ignore nil policies...
00033             continue;
00034           }
00035 
00036         // Obtain the PolicyType from the current Policy object.
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                 // This is the second time we have run into this policy type,
00045                 // and that is not allowed.
00046                 throw ::CORBA::INV_POLICY ();
00047               }
00048 
00049             // Flip the flag to true in order to trap any dupes.
00050             processing_mode_applied = true;
00051 
00052             // Narrow the Policy to the ProcessingModePolicy interface.
00053             PortableInterceptor::ProcessingModePolicy_var pm_policy =
00054                     PortableInterceptor::ProcessingModePolicy::_narrow (
00055                                                  policy.in ());
00056 
00057             // Save the value of the ProcessingModePolicy in our data member.
00058             this->processing_mode_ = pm_policy->processing_mode ();
00059           }
00060         else
00061           {
00062             // We don't support the current policy type.
00063             throw ::CORBA::INV_POLICY ();
00064           }
00065       }
00066   }
00067 }
00068 
00069 TAO_END_VERSIONED_NAMESPACE_DECL
00070 
00071 #endif  /* TAO_HAS_INTERCEPTORS == 1 */

Generated on Tue Feb 2 17:42:01 2010 for TAO_PI by  doxygen 1.4.7