#include <ServerRequestDetails.h>
Public Member Functions | |
ServerRequestDetails (void) | |
void | apply_policies (const CORBA::PolicyList &policies) |
bool | should_be_processed (bool is_remote_request) const |
Private Attributes | |
PortableInterceptor::ProcessingMode | processing_mode_ |
Each time a server request interceptor is registered with an ORB, a ServerRequestDetails object will be created and associated with the registered server request interceptor. If the interceptor is registered with policies, the policies will be used to adjust the values in the ServerRequestDetails appropriately.
Definition at line 51 of file ServerRequestDetails.h.
ACE_INLINE TAO::ServerRequestDetails::ServerRequestDetails | ( | void | ) |
Definition at line 10 of file ServerRequestDetails.inl.
00011 : processing_mode_(PortableInterceptor::LOCAL_AND_REMOTE) 00012 { 00013 }
void TAO::ServerRequestDetails::apply_policies | ( | const CORBA::PolicyList & | policies | ) |
Definition at line 20 of file ServerRequestDetails.cpp.
References CORBA::Policy::_duplicate(), CORBA::is_nil(), and processing_mode_.
00021 { 00022 // Flag to check for duplicate ProcessingModePolicy objects in the list. 00023 bool processing_mode_applied = false; 00024 00025 CORBA::ULong const 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 // Just ignore nil policies... 00034 continue; 00035 } 00036 00037 // Obtain the PolicyType from the current Policy object. 00038 CORBA::PolicyType const policy_type = 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 }
ACE_INLINE bool TAO::ServerRequestDetails::should_be_processed | ( | bool | is_remote_request | ) | const |
Returns true if the ProcessingMode setting permits the "firing" of the associated server request interceptor based upon the remote vs. collocated nature of the current servant request that is being dispatched.
Definition at line 17 of file ServerRequestDetails.inl.
00018 { 00019 return ((this->processing_mode_ == PortableInterceptor::LOCAL_AND_REMOTE) || 00020 ((this->processing_mode_ == PortableInterceptor::REMOTE_ONLY) && 00021 (is_remote_request)) || 00022 ((this->processing_mode_ == PortableInterceptor::LOCAL_ONLY) && 00023 (!is_remote_request))); 00024 }
PortableInterceptor::ProcessingMode TAO::ServerRequestDetails::processing_mode_ [private] |
The ProcessingMode setting that can be adjusted via the PortableInterceptor::ProcessingModePolicy.
Definition at line 68 of file ServerRequestDetails.h.
Referenced by apply_policies().