diff options
Diffstat (limited to 'tests/Bug_3926_Regression/Client_Request_Interceptor.cpp')
-rw-r--r-- | tests/Bug_3926_Regression/Client_Request_Interceptor.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/Bug_3926_Regression/Client_Request_Interceptor.cpp b/tests/Bug_3926_Regression/Client_Request_Interceptor.cpp new file mode 100644 index 00000000000..86e2837dc17 --- /dev/null +++ b/tests/Bug_3926_Regression/Client_Request_Interceptor.cpp @@ -0,0 +1,130 @@ +// -*- C++ -*- +// $Id$ + +#include "Client_Request_Interceptor.h" +#include "testC.h" + +#include "ace/Log_Msg.h" + +Client_Request_Interceptor::Client_Request_Interceptor ( + const char *orb_id, + const char *forward_str) + : orb_id_ (CORBA::string_dup (orb_id)), + orb_ (), + request_count_ (0), + forward_str_ (CORBA::string_dup (forward_str)) +{ +} + +char * +Client_Request_Interceptor::name () +{ + return CORBA::string_dup ("Client_Request_Interceptor"); +} + +void +Client_Request_Interceptor::destroy (void) +{ +} + +void +Client_Request_Interceptor::send_request ( + PortableInterceptor::ClientRequestInfo_ptr ri) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: in send_request\n"))); + + ++this->request_count_; + + CORBA::Boolean response_expected = + ri->response_expected (); + + if (!response_expected) // A one-way request. + return; + + // Request 1 -- non-forwarded + // Request 2 -- forwarded by this interception point. + // Request 3 -- non-forwarded + + if (this->request_count_ == 2) + { + if (CORBA::is_nil (this->orb_.in ())) + { + int argc = 0; + char **const argv= 0; + this->orb_ = CORBA::ORB_init (argc, + argv, + this->orb_id_.in ()); + } + + CORBA::Object_var forward = + this->orb_->string_to_object (this->forward_str_.in ()); + + CORBA::String_var forward_str = + this->orb_->object_to_string (forward.in ()); + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: request %d will be forwarded via send_request()\n"), + this->request_count_)); + + // Notice that this is not a permanent forward. + throw PortableInterceptor::ForwardRequest (forward.in ()); + } +} + +void +Client_Request_Interceptor::send_poll ( + PortableInterceptor::ClientRequestInfo_ptr) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: in send_poll\n"))); +} + +void +Client_Request_Interceptor::receive_reply ( + PortableInterceptor::ClientRequestInfo_ptr) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: in receive_reply\n"))); +} + +void +Client_Request_Interceptor::receive_exception ( + PortableInterceptor::ClientRequestInfo_ptr) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: in receive_exception\n"))); +} + +void +Client_Request_Interceptor::receive_other ( + PortableInterceptor::ClientRequestInfo_ptr ri) +{ + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: in receive_other\n"))); + + CORBA::Boolean response_expected = + ri->response_expected (); + + // Oneway + if (!response_expected) + return; + + PortableInterceptor::ReplyStatus reply_status; + + try + { + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: in receive_other, before reply_status\n"))); + + reply_status = ri->reply_status (); + ACE_UNUSED_ARG (reply_status); + } + catch(CORBA::BAD_INV_ORDER const &e) + { + e._tao_print_exception ("CRI: exception"); + } + + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("CRI: in receive_other, after reply_status\n"))); +} |