3 //=============================================================================
5 * @file ClientRequestInterceptor_Adapter_Impl.h
7 * This file an adapter class to simplify the support of
10 * @author Nanbor Wang <nanbor@cs.wustl.edu>
11 * @author Ossama Othman <ossama@uci.edu>
12 * @author Kirthika Parameswaran <kirthika@cs.wustl.edu>
13 * @author Johnny Willemsen <jwillemsen@remedy.nl>
15 //=============================================================================
17 #ifndef TAO_CLIENT_REQUEST_INTERCEPTOR_ADAPTER_IMPL_H
18 #define TAO_CLIENT_REQUEST_INTERCEPTOR_ADAPTER_IMPL_H
20 #include /**/ "ace/pre.h"
22 #include "tao/orbconf.h"
24 #if !defined (ACE_LACKS_PRAGMA_ONCE)
26 #endif /* ACE_LACKS_PRAGMA_ONCE */
29 #if TAO_HAS_INTERCEPTORS == 1
31 #include "tao/PI/Interceptor_List_T.h"
32 #include "tao/PI/PI_includeC.h"
33 #include "tao/PI/ClientRequestDetails.h"
34 #include "tao/PI/RequestInterceptor_Adapter_Impl.h"
35 #include "tao/ClientRequestInterceptor_Adapter.h"
37 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
41 typedef Interceptor_List
< ::PortableInterceptor::ClientRequestInterceptor
,
43 ClientRequestInterceptor_List
;
46 class TAO_ClientRequestInfo
;
50 class Invocation_Base
;
53 * @class ClientRequestInterceptor_Adapter
55 * @brief A convenient helper class to invoke registered client request
58 * This class invokes all registered interceptors at interception
59 * point, and enforces flow rules dictated by the Portable Interceptor
60 * specification/chapter.
62 class ClientRequestInterceptor_Adapter_Impl
63 : public ClientRequestInterceptor_Adapter
64 , public TAO_RequestInterceptor_Adapter_Impl
67 ClientRequestInterceptor_Adapter_Impl ();
70 * @name PortableInterceptor Client Side Interception Points
72 * Each of these methods corresponds to a client side interception
73 * point. There are no "intermediate" interception points on the
74 * client side, only "starting" and "ending" interception points.
78 /// This method implements one of the "starting" client side
79 /// interception points.
80 virtual void send_request (Invocation_Base
&invocation
);
82 /// This method implements one of the "ending" client side
83 /// interception point.
84 virtual void receive_reply (Invocation_Base
&invocation
);
86 /// This method implements one of the "ending" client side
87 /// interception point.
88 virtual void receive_exception (Invocation_Base
&invocation
);
90 /// This method implements one of the "ending" client side
91 /// interception point.
92 virtual void receive_other (Invocation_Base
&invocation
);
95 /// Register an interceptor.
96 virtual void add_interceptor (
97 PortableInterceptor::ClientRequestInterceptor_ptr interceptor
);
99 /// Register an interceptor with policies.
100 virtual void add_interceptor (
101 PortableInterceptor::ClientRequestInterceptor_ptr interceptor
,
102 const CORBA::PolicyList
& policies
);
104 virtual void destroy_interceptors ();
106 virtual PortableInterceptor::ReplyStatus
pi_reply_status (
107 TAO::Invocation_Base
const &invocation_base
);
109 void popTSC (TAO_ORB_Core
*orb_core
)
110 {TAO_RequestInterceptor_Adapter_Impl::popTSC (orb_core
);}
111 void pushTSC (TAO_ORB_Core
*orb_core
)
112 {TAO_RequestInterceptor_Adapter_Impl::pushTSC (orb_core
);}
115 /// Process the given PortableInterceptor::ForwardRequest exception,
116 /// i.e. invoke the receive_other() interception point, in addition
117 /// to notifying the Invocation object of the LOCATION_FORWARD.
118 void process_forward_request (Invocation_Base
&invocation
,
119 const PortableInterceptor::ForwardRequest
&exc
);
122 /// List of registered interceptors.
123 ClientRequestInterceptor_List interceptor_list_
;
127 TAO_END_VERSIONED_NAMESPACE_DECL
129 #if defined (__ACE_INLINE__)
130 #include "tao/PI/ClientRequestInterceptor_Adapter_Impl.inl"
131 #endif /* __ACE_INLINE__ */
133 #endif /* TAO_HAS_INTERCEPTORS == 1 */
135 #include /**/ "ace/post.h"
137 #endif /* TAO_CLIENT_REQUEST_INTERCEPTOR_ADAPTER_IMPL_H */