summaryrefslogtreecommitdiff
path: root/TAO/tao/Invocation_Base.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Invocation_Base.cpp')
-rw-r--r--TAO/tao/Invocation_Base.cpp215
1 files changed, 119 insertions, 96 deletions
diff --git a/TAO/tao/Invocation_Base.cpp b/TAO/tao/Invocation_Base.cpp
index c3dc8aed96f..ac94484a0ca 100644
--- a/TAO/tao/Invocation_Base.cpp
+++ b/TAO/tao/Invocation_Base.cpp
@@ -5,14 +5,16 @@
#include "TypeCode.h"
#include "DynamicC.h"
#include "SystemException.h"
+#include "PortableInterceptor.h" /* Must always be visible. */
+
+#include "ace/Dynamic_Service.h"
#if TAO_HAS_INTERCEPTORS == 1
# include "PortableInterceptorC.h"
# include "RequestInfo_Util.h"
+# include "ClientRequestInterceptor_Adapter_Factory.h"
#endif /* TAO_HAS_INTERCEPTORS == 1*/
-#include "PortableInterceptor.h" /* Must always be visible. */
-
#if !defined (__ACE_INLINE__)
# include "Invocation_Base.inl"
#endif /* __ACE_INLINE__ */
@@ -38,15 +40,16 @@ namespace TAO
, orb_core_ (stub->orb_core ())
, stub_ (stub)
#if TAO_HAS_INTERCEPTORS == 1
- , adapter_ (orb_core_->client_request_interceptors (),
- this)
+ , adapter_ (orb_core_->clientrequestinterceptor_adapter ())
, req_info_ (this)
+ , stack_size_ (0)
#endif /*TAO_HAS_INTERCEPTORS == 1*/
{
}
Invocation_Base::~Invocation_Base (void)
{
+ adapter_ = 0;
}
void
@@ -140,37 +143,41 @@ namespace TAO
Invocation_Base::send_request_interception (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- ACE_TRY
- {
- this->adapter_.send_request (&this->req_info_
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- (void) this->handle_any_exception (&ACE_ANY_EXCEPTION
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // This is a begin interception point
- ACE_RE_THROW;
- }
-# if defined (ACE_HAS_EXCEPTIONS) \
- && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
- ACE_CATCHALL
+ if (adapter_ != 0)
{
- (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- // This is a begin interception point
- ACE_RE_THROW;
+ ACE_TRY
+ {
+ this->adapter_->send_request (*this,
+ &this->req_info_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ (void) this->handle_any_exception (&ACE_ANY_EXCEPTION
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // This is a begin interception point
+ ACE_RE_THROW;
+ }
+ # if defined (ACE_HAS_EXCEPTIONS) \
+ && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ // This is a begin interception point
+ ACE_RE_THROW;
+ }
+ # endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
+ ACE_ENDTRY;
+ ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
+
+ if (this->forwarded_to_.in ())
+ return TAO_INVOKE_RESTART;
}
-# endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
- ACE_ENDTRY;
- ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
-
- if (this->forwarded_to_.in ())
- return TAO_INVOKE_RESTART;
// What are the other cases??
return TAO_INVOKE_SUCCESS;
@@ -180,40 +187,44 @@ namespace TAO
Invocation_Base::receive_reply_interception (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- ACE_TRY
- {
- this->adapter_.receive_reply (&this->req_info_
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
+ if (adapter_ != 0)
{
- (void) this->handle_any_exception (&ACE_ANY_EXCEPTION
+ ACE_TRY
+ {
+ this->adapter_->receive_reply (*this,
+ &this->req_info_
ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_RE_THROW;
- }
-# if defined (ACE_HAS_EXCEPTIONS) \
- && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
- ACE_CATCHALL
- {
- (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_RE_THROW;
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ (void) this->handle_any_exception (&ACE_ANY_EXCEPTION
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_RE_THROW;
+ }
+ # if defined (ACE_HAS_EXCEPTIONS) \
+ && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_RE_THROW;
+ }
+ # endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
+ ACE_ENDTRY;
+ ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
+
+ const PortableInterceptor::ReplyStatus status =
+ this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
+
+ if (status == PortableInterceptor::LOCATION_FORWARD ||
+ status == PortableInterceptor::TRANSPORT_RETRY)
+ return TAO_INVOKE_RESTART;
}
-# endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
- ACE_ENDTRY;
- ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
-
- const PortableInterceptor::ReplyStatus status =
- this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
-
- if (status == PortableInterceptor::LOCATION_FORWARD ||
- status == PortableInterceptor::TRANSPORT_RETRY)
- return TAO_INVOKE_RESTART;
return TAO_INVOKE_SUCCESS;
}
@@ -223,35 +234,39 @@ namespace TAO
Invocation_Base::receive_other_interception (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- ACE_TRY
+ if (adapter_ != 0)
{
- this->adapter_.receive_other (&this->req_info_
- ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
- }
- ACE_CATCHANY
- {
- (void) this->handle_any_exception (&ACE_ANY_EXCEPTION
+ ACE_TRY
+ {
+ this->adapter_->receive_other (*this,
+ &this->req_info_
ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_RE_THROW;
+ ACE_TRY_CHECK;
+ }
+ ACE_CATCHANY
+ {
+ (void) this->handle_any_exception (&ACE_ANY_EXCEPTION
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_RE_THROW;
+ }
+ # if defined (ACE_HAS_EXCEPTIONS) \
+ && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
+ ACE_CATCHALL
+ {
+ (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ ACE_RE_THROW;
+ }
+ # endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
+ ACE_ENDTRY;
+ ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
+
+ if (this->forwarded_to_.in ())
+ return TAO_INVOKE_RESTART;
}
-# if defined (ACE_HAS_EXCEPTIONS) \
- && defined (ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS)
- ACE_CATCHALL
- {
- (void) this->handle_all_exception (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_TRY_CHECK;
-
- ACE_RE_THROW;
- }
-# endif /* ACE_HAS_EXCEPTIONS && ACE_HAS_BROKEN_UNEXPECTED_EXCEPTIONS */
- ACE_ENDTRY;
- ACE_CHECK_RETURN (TAO_INVOKE_FAILURE);
-
- if (this->forwarded_to_.in ())
- return TAO_INVOKE_RESTART;
return TAO_INVOKE_SUCCESS;
}
@@ -262,9 +277,13 @@ namespace TAO
{
this->req_info_.exception (ex);
- this->adapter_.receive_exception (&this->req_info_
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN);
+ if (adapter_ != 0)
+ {
+ this->adapter_->receive_exception (*this,
+ &this->req_info_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN);
+ }
const PortableInterceptor::ReplyStatus status =
this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -280,9 +299,13 @@ namespace TAO
this->req_info_.exception (&ex);
- this->adapter_.receive_exception (&this->req_info_
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN);
+ if (adapter_ != 0)
+ {
+ this->adapter_->receive_exception (*this,
+ &this->req_info_
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (PortableInterceptor::UNKNOWN);
+ }
const PortableInterceptor::ReplyStatus status =
this->req_info_.reply_status (ACE_ENV_SINGLE_ARG_PARAMETER);