diff options
author | mayur <mayur@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-12-26 11:27:41 +0000 |
---|---|---|
committer | mayur <mayur@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-12-26 11:27:41 +0000 |
commit | 9d55f9f9b1e3cecba3290aa85db3a915edcef0cc (patch) | |
tree | 38795d616e5cc216c4e9a0465d275681681effb4 /TAO/tao/TAO_Server_Request.cpp | |
parent | 7dca9bf20f45935d0711a4a5d129c7bcad7fe19d (diff) | |
download | ATCD-9d55f9f9b1e3cecba3290aa85db3a915edcef0cc.tar.gz |
Wed Dec 26 02:57:48 2001 Mayur Deshpande <mayur@ics.uci.edu
Diffstat (limited to 'TAO/tao/TAO_Server_Request.cpp')
-rw-r--r-- | TAO/tao/TAO_Server_Request.cpp | 494 |
1 files changed, 247 insertions, 247 deletions
diff --git a/TAO/tao/TAO_Server_Request.cpp b/TAO/tao/TAO_Server_Request.cpp index 41c8251156b..b9fdc079dca 100644 --- a/TAO/tao/TAO_Server_Request.cpp +++ b/TAO/tao/TAO_Server_Request.cpp @@ -24,317 +24,317 @@ #endif /* ! __ACE_INLINE__ */ ACE_RCSID (tao, - TAO_Server_Request, - "$Id$") +TAO_Server_Request, +"$Id$") #if defined (ACE_ENABLE_TIMEPROBES) static const char *TAO_Server_Request_Timeprobe_Description[] = - { - "TAO_ServerRequest::TAO_ServerRequest - start", - "TAO_ServerRequest::TAO_ServerRequest - end", - }; +{ +"TAO_ServerRequest::TAO_ServerRequest - start", +"TAO_ServerRequest::TAO_ServerRequest - end", +}; enum - { - // Timeprobe description table start key. - TAO_SERVER_REQUEST_START = 400, - TAO_SERVER_REQUEST_END - }; +{ +// Timeprobe description table start key. +TAO_SERVER_REQUEST_START = 400, +TAO_SERVER_REQUEST_END +}; // Setup Timeprobes ACE_TIMEPROBE_EVENT_DESCRIPTIONS (TAO_Server_Request_Timeprobe_Description, - TAO_SERVER_REQUEST_START); +TAO_SERVER_REQUEST_START); #endif /* ACE_ENABLE_TIMEPROBES */ TAO_ServerRequest::TAO_ServerRequest (TAO_Pluggable_Messaging *mesg_base, - TAO_InputCDR &input, - TAO_OutputCDR &output, - TAO_Transport *transport, - TAO_ORB_Core *orb_core) - : mesg_base_ (mesg_base), - operation_ (), - incoming_ (&input), - outgoing_ (&output), - transport_(TAO_Transport::_duplicate (transport)), - response_expected_ (0), - deferred_reply_ (0), - sync_with_server_ (0), - // @@ We shouldn't be using GIOP specific types here. Need to be revisited. - exception_type_ (TAO_GIOP_NO_EXCEPTION), - orb_core_ (orb_core), - request_id_ (0), - profile_ (orb_core), - requesting_principal_ (0), - is_dsi_ (0), - dsi_nvlist_align_ (0), - argument_flag_ (1) +TAO_InputCDR &input, +TAO_OutputCDR &output, +TAO_Transport *transport, +TAO_ORB_Core *orb_core) +: mesg_base_ (mesg_base), +operation_ (), +incoming_ (&input), +outgoing_ (&output), +transport_(TAO_Transport::_duplicate (transport)), +response_expected_ (0), +deferred_reply_ (0), +sync_with_server_ (0), +// @@ We shouldn't be using GIOP specific types here. Need to be revisited. +exception_type_ (TAO_GIOP_NO_EXCEPTION), +orb_core_ (orb_core), +request_id_ (0), +profile_ (orb_core), +requesting_principal_ (0), +is_dsi_ (0), +dsi_nvlist_align_ (0), +argument_flag_ (1) #if TAO_HAS_INTERCEPTORS == 1 - , interceptor_count_ (0) - , rs_pi_current_ () +, interceptor_count_ (0) +, rs_pi_current_ () #endif /* TAO_HAS_INTERCEPTORS == 1 */ { - ACE_FUNCTION_TIMEPROBE (TAO_SERVER_REQUEST_START); - // No-op. +ACE_FUNCTION_TIMEPROBE (TAO_SERVER_REQUEST_START); +// No-op. } // This constructor is used, by the locate request code. TAO_ServerRequest::TAO_ServerRequest (TAO_Pluggable_Messaging *mesg_base, - CORBA::ULong request_id, - CORBA::Boolean response_expected, - CORBA::Boolean deferred_reply, - TAO_ObjectKey &object_key, - const char *operation, - TAO_OutputCDR &output, - TAO_Transport *transport, - TAO_ORB_Core *orb_core, - int &parse_error) - : mesg_base_ (mesg_base), - operation_ (operation), - incoming_ (0), - outgoing_ (&output), - transport_ (TAO_Transport::_duplicate (transport)), - response_expected_ (response_expected), - deferred_reply_ (deferred_reply), - sync_with_server_ (0), - exception_type_ (TAO_GIOP_NO_EXCEPTION), - orb_core_ (orb_core), - request_id_ (request_id), - profile_ (orb_core), - requesting_principal_ (0), - is_dsi_ (0), - dsi_nvlist_align_ (0), - argument_flag_ (1) +CORBA::ULong request_id, +CORBA::Boolean response_expected, +CORBA::Boolean deferred_reply, +TAO_ObjectKey &object_key, +const char *operation, +TAO_OutputCDR &output, +TAO_Transport *transport, +TAO_ORB_Core *orb_core, +int &parse_error) +: mesg_base_ (mesg_base), +operation_ (operation), +incoming_ (0), +outgoing_ (&output), +transport_ (TAO_Transport::_duplicate (transport)), +response_expected_ (response_expected), +deferred_reply_ (deferred_reply), +sync_with_server_ (0), +exception_type_ (TAO_GIOP_NO_EXCEPTION), +orb_core_ (orb_core), +request_id_ (request_id), +profile_ (orb_core), +requesting_principal_ (0), +is_dsi_ (0), +dsi_nvlist_align_ (0), +argument_flag_ (1) #if TAO_HAS_INTERCEPTORS == 1 - , interceptor_count_ (0) - , rs_pi_current_ () +, interceptor_count_ (0) +, rs_pi_current_ () #endif /* TAO_HAS_INTERCEPTORS == 1 */ { - profile_.object_key (object_key); - parse_error = 0; +profile_.object_key (object_key); +parse_error = 0; } TAO_ServerRequest::~TAO_ServerRequest (void) { - TAO_Transport::release (this->transport_); +TAO_Transport::release (this->transport_); } -void -TAO_ServerRequest::instantiate_AMH_Handler (TAO_AMH_Response_Handler* response_handler) +void +TAO_ServerRequest::instantiate_AMH_Handler (TAO_AMH_Response_Handler* response_handler) { - response_handler->mesg_base (mesg_base_); - response_handler->request_id (request_id ()); - response_handler->response_expected (response_expected_); - response_handler->transport (TAO_Transport::_duplicate (transport())); - //response_handler->reply_service_info (reply_service_info ()); +response_handler->mesg_base (mesg_base_); +response_handler->request_id (request_id ()); +response_handler->response_expected (response_expected_); +response_handler->transport (TAO_Transport::_duplicate (transport())); +//response_handler->reply_service_info (reply_service_info ()); } CORBA::ORB_ptr TAO_ServerRequest::orb (void) { - return this->orb_core_->orb (); +return this->orb_core_->orb (); } void TAO_ServerRequest::init_reply (void) { - // Construct our reply generator. - TAO_Pluggable_Reply_Params_Base reply_params; - - // We put all the info that we have in to this <reply_params> and - // call the <write_reply_header> in the - // pluggable_messaging_interface. One point to be noted however is - // that, it was the pluggable_messaging classes who created us and - // delegated us to do work on its behalf. But we would be calling - // back. As we dont have a LOCK or any such things we can call - // pluggable_messaging guys again. We would be on the same thread of - // invocation. So *theoratically* there should not be a problem. - reply_params.request_id_ = this->request_id_; - reply_params.is_dsi_ = this->is_dsi_; - reply_params.dsi_nvlist_align_ = this->dsi_nvlist_align_; - - // Send back the reply service context. - reply_params.service_context_notowned (&this->reply_service_info ()); - - // Are we going to marshall any data with the reply? - reply_params.argument_flag_ = this->argument_flag_; - - // Forward exception only. - if (!CORBA::is_nil (this->forward_location_.in ())) - { - reply_params.reply_status_ = TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD; - } - // Any exception at all. - else if (this->exception_type_ == TAO_GIOP_NO_EXCEPTION) - { - reply_params.reply_status_ = TAO_PLUGGABLE_MESSAGE_NO_EXCEPTION; - } - else - { - reply_params.reply_status_ = this->exception_type_; - } - - // Construct a REPLY header. - this->mesg_base_->generate_reply_header (*this->outgoing_, - reply_params); - - // Finish the GIOP Reply header, then marshal the exception. - if (reply_params.reply_status_ == TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD) - { - // Marshal the forward location pointer. - CORBA::Object_ptr object_ptr = this->forward_location_.in (); - - if ((*this->outgoing_ << object_ptr) == 0) - { - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO_GIOP_ServerRequest::marshal - ") - ACE_TEXT ("encoding forwarded objref failed\n"))); - } - } +// Construct our reply generator. +TAO_Pluggable_Reply_Params_Base reply_params; + +// We put all the info that we have in to this <reply_params> and +// call the <write_reply_header> in the +// pluggable_messaging_interface. One point to be noted however is +// that, it was the pluggable_messaging classes who created us and +// delegated us to do work on its behalf. But we would be calling +// back. As we dont have a LOCK or any such things we can call +// pluggable_messaging guys again. We would be on the same thread of +// invocation. So *theoratically* there should not be a problem. +reply_params.request_id_ = this->request_id_; +reply_params.is_dsi_ = this->is_dsi_; +reply_params.dsi_nvlist_align_ = this->dsi_nvlist_align_; + +// Send back the reply service context. +reply_params.service_context_notowned (&this->reply_service_info ()); + +// Are we going to marshall any data with the reply? +reply_params.argument_flag_ = this->argument_flag_; + +// Forward exception only. +if (!CORBA::is_nil (this->forward_location_.in ())) +{ +reply_params.reply_status_ = TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD; +} +// Any exception at all. +else if (this->exception_type_ == TAO_GIOP_NO_EXCEPTION) +{ +reply_params.reply_status_ = TAO_PLUGGABLE_MESSAGE_NO_EXCEPTION; +} +else +{ +reply_params.reply_status_ = this->exception_type_; +} + +// Construct a REPLY header. +this->mesg_base_->generate_reply_header (*this->outgoing_, +reply_params); + +// Finish the GIOP Reply header, then marshal the exception. +if (reply_params.reply_status_ == TAO_PLUGGABLE_MESSAGE_LOCATION_FORWARD) +{ +// Marshal the forward location pointer. +CORBA::Object_ptr object_ptr = this->forward_location_.in (); + +if ((*this->outgoing_ << object_ptr) == 0) +{ +ACE_DEBUG ((LM_DEBUG, +ACE_TEXT ("TAO_GIOP_ServerRequest::marshal - ") +ACE_TEXT ("encoding forwarded objref failed\n"))); +} +} } void TAO_ServerRequest::send_no_exception_reply (void) { - // Construct our reply generator. - TAO_Pluggable_Reply_Params_Base reply_params; - reply_params.request_id_ = this->request_id_; - reply_params.is_dsi_ = this->is_dsi_; - reply_params.dsi_nvlist_align_ = this->dsi_nvlist_align_; - - // Change this to pass back the same thing we received, as well as - // leave a comment why this is important! - reply_params.svc_ctx_.length (0); - - // Send back the reply service context. - reply_params.service_context_notowned (&this->reply_service_info ()); - - reply_params.reply_status_ = TAO_GIOP_NO_EXCEPTION; - - // No data anyway. - reply_params.argument_flag_ = 0; - - // Construct a REPLY header. - this->mesg_base_->generate_reply_header (*this->outgoing_, - reply_params); - - // Send the message. - int result = this->transport_->send_message (*this->outgoing_); - - if (result == -1) - { - if (TAO_debug_level > 0) - { - // No exception but some kind of error, yet a response - // is required. - ACE_ERROR (( - LM_ERROR, - ACE_TEXT ("TAO: (%P|%t) %p: cannot send NO_EXCEPTION reply\n"), - ACE_TEXT ("TAO_GIOP_ServerRequest::send_no_exception_reply") - )); - } - } +// Construct our reply generator. +TAO_Pluggable_Reply_Params_Base reply_params; +reply_params.request_id_ = this->request_id_; +reply_params.is_dsi_ = this->is_dsi_; +reply_params.dsi_nvlist_align_ = this->dsi_nvlist_align_; + +// Change this to pass back the same thing we received, as well as +// leave a comment why this is important! +reply_params.svc_ctx_.length (0); + +// Send back the reply service context. +reply_params.service_context_notowned (&this->reply_service_info ()); + +reply_params.reply_status_ = TAO_GIOP_NO_EXCEPTION; + +// No data anyway. +reply_params.argument_flag_ = 0; + +// Construct a REPLY header. +this->mesg_base_->generate_reply_header (*this->outgoing_, +reply_params); + +// Send the message. +int result = this->transport_->send_message (*this->outgoing_); + +if (result == -1) +{ +if (TAO_debug_level > 0) +{ +// No exception but some kind of error, yet a response +// is required. +ACE_ERROR (( +LM_ERROR, +ACE_TEXT ("TAO: (%P|%t) %p: cannot send NO_EXCEPTION reply\n"), +ACE_TEXT ("TAO_GIOP_ServerRequest::send_no_exception_reply") +)); +} +} } void TAO_ServerRequest::tao_send_reply (void) { - int result = this->transport_->send_message (*this->outgoing_); - if (result == -1) - { - if (TAO_debug_level > 0) - { - // No exception but some kind of error, yet a response - // is required. - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("TAO: (%P|%t) %p: cannot send reply\n"), - ACE_TEXT ("TAO_ServerRequest::tao_send_reply"))); - - } - } +int result = this->transport_->send_message (*this->outgoing_); +if (result == -1) +{ +if (TAO_debug_level > 0) +{ +// No exception but some kind of error, yet a response +// is required. +ACE_ERROR ((LM_ERROR, +ACE_TEXT ("TAO: (%P|%t) %p: cannot send reply\n"), +ACE_TEXT ("TAO_ServerRequest::tao_send_reply"))); + +} +} } void TAO_ServerRequest::tao_send_reply_exception (CORBA::Exception &ex) { - // int result = 0; - if (this->response_expected_) - { - // A copy of the reply parameters - TAO_Pluggable_Reply_Params_Base reply_params; +// int result = 0; +if (this->response_expected_) +{ +// A copy of the reply parameters +TAO_Pluggable_Reply_Params_Base reply_params; - reply_params.request_id_ = this->request_id_; - reply_params.svc_ctx_.length (0); +reply_params.request_id_ = this->request_id_; +reply_params.svc_ctx_.length (0); - // Send back the reply service context. - reply_params.service_context_notowned (&this->reply_service_info ()); +// Send back the reply service context. +reply_params.service_context_notowned (&this->reply_service_info ()); - // We are going to send some data - reply_params.argument_flag_ = 1; +// We are going to send some data +reply_params.argument_flag_ = 1; - // Make a default reply status - reply_params.reply_status_ = TAO_GIOP_USER_EXCEPTION; +// Make a default reply status +reply_params.reply_status_ = TAO_GIOP_USER_EXCEPTION; - // Check whether we are able to downcast the exception - if (CORBA::SystemException::_downcast (&ex) != 0) - { - reply_params.reply_status_ = TAO_GIOP_SYSTEM_EXCEPTION; - } +// Check whether we are able to downcast the exception +if (CORBA::SystemException::_downcast (&ex) != 0) +{ +reply_params.reply_status_ = TAO_GIOP_SYSTEM_EXCEPTION; +} - // Create a new output CDR stream +// Create a new output CDR stream #if defined(ACE_HAS_PURIFY) - // Only inititialize the buffer if we're compiling with Purify. - // Otherwise, there is no real need to do so, especially since - // we can avoid the initialization overhead at run-time if we - // are not compiling with Purify support. - char repbuf[ACE_CDR::DEFAULT_BUFSIZE] = { 0 }; +// Only inititialize the buffer if we're compiling with Purify. +// Otherwise, there is no real need to do so, especially since +// we can avoid the initialization overhead at run-time if we +// are not compiling with Purify support. +char repbuf[ACE_CDR::DEFAULT_BUFSIZE] = { 0 }; #else - char repbuf[ACE_CDR::DEFAULT_BUFSIZE]; +char repbuf[ACE_CDR::DEFAULT_BUFSIZE]; #endif /* ACE_HAS_PURIFY */ - TAO_OutputCDR output (repbuf, - sizeof repbuf, - TAO_ENCAP_BYTE_ORDER, - this->orb_core_->output_cdr_buffer_allocator (), - this->orb_core_->output_cdr_dblock_allocator (), - this->orb_core_->output_cdr_msgblock_allocator (), - this->orb_core_->orb_params ()->cdr_memcpy_tradeoff (), - TAO_DEF_GIOP_MAJOR, - TAO_DEF_GIOP_MINOR, - this->orb_core_->to_iso8859 (), - this->orb_core_->to_unicode ()); - - // Make the reply message - if (this->mesg_base_->generate_exception_reply (output, - reply_params, - ex) == -1) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("TAO: (%P|%t|%N|%l): ") - ACE_TEXT ("could not make exception reply\n"))); - - } - - // Send the message - if (this->transport_->send_message (output) == -1) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("TAO: (%P|%t|%N|%l): ") - ACE_TEXT ("could not send exception reply\n"))); - } - } - else if (TAO_debug_level > 0) - { - // It is unfotunate that an exception (probably a system - // exception) was thrown by the upcall code (even by the - // user) when the client was not expecting a response. - // However, in this case, we cannot close the connection - // down, since it really isn't the client's fault. - - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) exception thrown ") - ACE_TEXT ("but client is not waiting a response\n"))); - } +TAO_OutputCDR output (repbuf, +sizeof repbuf, +TAO_ENCAP_BYTE_ORDER, +this->orb_core_->output_cdr_buffer_allocator (), +this->orb_core_->output_cdr_dblock_allocator (), +this->orb_core_->output_cdr_msgblock_allocator (), +this->orb_core_->orb_params ()->cdr_memcpy_tradeoff (), +TAO_DEF_GIOP_MAJOR, +TAO_DEF_GIOP_MINOR, +this->orb_core_->to_iso8859 (), +this->orb_core_->to_unicode ()); + +// Make the reply message +if (this->mesg_base_->generate_exception_reply (output, +reply_params, +ex) == -1) +{ +ACE_ERROR ((LM_ERROR, +ACE_TEXT ("TAO: (%P|%t|%N|%l): ") +ACE_TEXT ("could not make exception reply\n"))); + +} + +// Send the message +if (this->transport_->send_message (output) == -1) +{ +ACE_ERROR ((LM_ERROR, +ACE_TEXT ("TAO: (%P|%t|%N|%l): ") +ACE_TEXT ("could not send exception reply\n"))); +} +} +else if (TAO_debug_level > 0) +{ +// It is unfotunate that an exception (probably a system +// exception) was thrown by the upcall code (even by the +// user) when the client was not expecting a response. +// However, in this case, we cannot close the connection +// down, since it really isn't the client's fault. + +ACE_ERROR ((LM_ERROR, +ACE_TEXT ("(%P|%t) exception thrown ") +ACE_TEXT ("but client is not waiting a response\n"))); +} } |