diff options
Diffstat (limited to 'TAO/tao/IIOP_Transport.cpp')
-rw-r--r-- | TAO/tao/IIOP_Transport.cpp | 606 |
1 files changed, 6 insertions, 600 deletions
diff --git a/TAO/tao/IIOP_Transport.cpp b/TAO/tao/IIOP_Transport.cpp index 6f9810d5efe..a015dd462da 100644 --- a/TAO/tao/IIOP_Transport.cpp +++ b/TAO/tao/IIOP_Transport.cpp @@ -13,8 +13,8 @@ #include "tao/ORB_Core.h" #include "tao/debug.h" #include "tao/GIOP_Message_Base.h" +#include "tao/GIOP_Message_Lite.h" -//#include "tao/GIOP_Message_Lite.h" #if !defined (__ACE_INLINE__) # include "tao/IIOP_Transport.i" @@ -31,14 +31,13 @@ TAO_IIOP_Transport::TAO_IIOP_Transport (TAO_IIOP_Connection_Handler *handler, connection_handler_ (handler), messaging_object_ (0) { - /*if (flag) + if (flag) { // Use the lite version of the protocol ACE_NEW (this->messaging_object_, - GIOP_Message_Lite (orb_core)); + TAO_GIOP_Message_Lite (orb_core)); } - else*/ - ACE_UNUSED_ARG (flag); + else { // Use the normal GIOP object ACE_NEW (this->messaging_object_, @@ -146,8 +145,6 @@ int TAO_IIOP_Transport::read_process_message (ACE_Time_Value *max_wait_time, int block) { - cout << "In IIOP_TRansport " <<endl; - // Read the message of the socket int result = this->messaging_object_->read_message (this, block, @@ -173,110 +170,6 @@ TAO_IIOP_Transport::read_process_message (ACE_Time_Value *max_wait_time, } -// Return 0, when the reply is not read fully, 1 if it is read fully. -// @@ This code should go in the TAO_Transport class is repeated for -// each transport!! -// @@ Carlos says: no, the code should be factored out in GIOP helper -// classes, but not in Transport. Transport must deal with -// non-GIOP protocols, that may have completely different behavior. -// -int -TAO_IIOP_Transport::handle_client_input (int /* block */, - ACE_Time_Value * /*max_wait_time*/) -{ - - // Notice that the message_state is only modified in one thread at a - // time because the reactor does not call handle_input() for the - // same Event_Handler in two threads at the same time. - - // Get the message state from the Transport Mux Strategy. - /* TAO_GIOP_Message_State* message_state = - this->tms_->get_message_state (); - - if (message_state == 0) - { - if (TAO_debug_level > 0) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO (%P|%t) IIOP_Transport::handle_client_input -") - ACE_TEXT (" nil message state\n"))); - this->tms_->connection_closed (); - return -1; - } - - - int result = this->client_mesg_factory_->handle_input (this, - this->orb_core_, - *message_state, - max_wait_time); - if (result == -1) - { - if (TAO_debug_level > 0) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO (%P|%t) - %p\n"), - ACE_TEXT ("IIOP_Transport::handle_client_input, handle_input"))); - - this->tms_->connection_closed (); - return -1; - } - if (result == 0) - return result; - - // OK, the complete message is here... - - result = this->client_mesg_factory_->parse_reply (*message_state, - this->params_); - if (result == -1) - { - if (TAO_debug_level > 0) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO (%P|%t) - %p\n"), - ACE_TEXT ("IIOP_Transport::handle_client_input, parse reply"))); - message_state->reset (); - this->tms_->connection_closed (); - return -1; - } - - result = - this->tms_->dispatch_reply (this->params_.request_id_, - this->params_.reply_status_, - message_state->giop_version, - this->params_.svc_ctx_, - message_state); - - // @@ Somehow it seems dangerous to reset the state *after* - // dispatching the request, what if another threads receives - // another reply in the same connection? - // My guess is that it works as follows: - // - For the exclusive case there can be no such thread. - // - The the muxed case each thread has its own message_state. - // I'm pretty sure this comment is right. Could somebody else - // please look at it and confirm my guess? - if (result == -1) - { - if (TAO_debug_level > 0) - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("TAO (%P|%t) : IIOP_Client_Transport::") - ACE_TEXT ("handle_client_input - ") - ACE_TEXT ("dispatch reply failed\n"))); - message_state->reset (); - this->tms_->connection_closed (); - return -1; - } - - if (result == 0) - { - message_state->reset (); - return 0; - } - - // This is a NOOP for the Exclusive request case, but it actually - // destroys the stream in the muxed case. - this->tms_->destroy_message_state (message_state); - */ - return 1; -} - - int TAO_IIOP_Transport::register_handler (void) { @@ -301,8 +194,6 @@ TAO_IIOP_Transport::register_handler (void) } - - int TAO_IIOP_Transport::send_request (TAO_Stub *stub, TAO_ORB_Core *orb_core, @@ -379,6 +270,8 @@ TAO_IIOP_Transport::start_request (TAO_ORB_Core * /*orb_core*/, { // TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_CLIENT_TRANSPORT_START_REQUEST_START); + // @@ This method should NO longer be required.. + /* if (this->client_mesg_factory_->write_protocol_header (TAO_PLUGGABLE_MESSAGE_REQUEST, output) == 0) @@ -394,13 +287,6 @@ TAO_IIOP_Transport::start_locate (TAO_ORB_Core * /*orb_core*/, CORBA::Environment &ACE_TRY_ENV) ACE_THROW_SPEC ((CORBA::SystemException)) { - // See this is GIOP way of doing this..But anyway IIOP will be tied - // up with GIOP. - /* if (this->client_mesg_factory_->write_protocol_header - (TAO_PLUGGABLE_MESSAGE_LOCATEREQUEST, - output) == 0) - ACE_THROW (CORBA::MARSHAL ());*/ - if (this->messaging_object_->generate_locate_request_header (opdetails, spec, output) == -1) @@ -536,483 +422,3 @@ TAO_IIOP_Transport::process_message (void) this->messaging_object_->reset (); return 1; } - - -//// **************************************************************** -// -///*TAO_IIOP_Server_Transport:: -// TAO_IIOP_Server_Transport (TAO_IIOP_Server_Connection_Handler *handler, -// TAO_ORB_Core* orb_core) -// : TAO_IIOP_Transport (orb_core), -// message_state_ (orb_core), -// handler_ (handler) -//{ -//} -// -//TAO_IIOP_Server_Transport::~TAO_IIOP_Server_Transport (void) -//{ -//} -// -//int -//TAO_IIOP_Server_Transport::idle (void) -//{ -// return this->handler_->make_idle (); -//} -// -//TAO_IIOP_SVC_HANDLER * -//TAO_IIOP_Server_Transport::service_handler (void) -//{ -// return this->handler_; -//} -// -//void -//TAO_IIOP_Server_Transport::close_connection (void) -//{ -// // Purge the entry from the Cache map first and then close the -// // handler -// this->handler_->purge_entry (); -// -// // Now close the handler -// this->handler_->handle_close (); -//} -// -// -//TAO_IIOP_Client_Transport:: -// TAO_IIOP_Client_Transport (TAO_IIOP_Client_Connection_Handler *handler, -// TAO_ORB_Core *orb_core) -// : TAO_IIOP_Transport (orb_core), -// handler_ (handler), -// client_mesg_factory_ (0), -// orb_core_ (orb_core), -// lite_flag_ (0), -// params_ () -//{ -//} -// -//TAO_IIOP_Client_Transport::~TAO_IIOP_Client_Transport (void) -//{ -// delete this->client_mesg_factory_; -//} -// -//int -//TAO_IIOP_Client_Transport::idle (void) -//{ -// return this->handler_->make_idle (); -//} -// -// -//void -//TAO_IIOP_Client_Transport::start_request (TAO_ORB_Core * /*orb_core*/, -// TAO_Target_Specification & /*spec */, -// TAO_OutputCDR &output, -// CORBA::Environment &ACE_TRY_ENV) -// ACE_THROW_SPEC ((CORBA::SystemException)) -//{ -// TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_CLIENT_TRANSPORT_START_REQUEST_START); -// -// if (this->client_mesg_factory_->write_protocol_header -// (TAO_PLUGGABLE_MESSAGE_REQUEST, -// output) == 0) -// ACE_THROW (CORBA::MARSHAL ()); -//} -// -//void -//TAO_IIOP_Client_Transport::start_locate (TAO_ORB_Core * /*orb_core*/, -// TAO_Target_Specification &spec, -// TAO_Operation_Details &opdetails, -// TAO_OutputCDR &output, -// CORBA::Environment &ACE_TRY_ENV) -// ACE_THROW_SPEC ((CORBA::SystemException)) -//{ -// // See this is GIOP way of doing this..But anyway IIOP will be tied -// // up with GIOP. -// if (this->client_mesg_factory_->write_protocol_header -// (TAO_PLUGGABLE_MESSAGE_LOCATEREQUEST, -// output) == 0) -// ACE_THROW (CORBA::MARSHAL ()); -// -// if (this->client_mesg_factory_->write_message_header (opdetails, -// TAO_PLUGGABLE_MESSAGE_LOCATE_REQUEST_HEADER, -// spec, -// output) == 0) -// ACE_THROW (CORBA::MARSHAL ()); -//} -// -//int -//TAO_IIOP_Client_Transport::send_request (TAO_Stub *stub, -// TAO_ORB_Core *orb_core, -// TAO_OutputCDR &stream, -// int two_way, -// ACE_Time_Value *max_wait_time) -//{ -// if (this->ws_->sending_request (orb_core, -// two_way) == -1) -// return -1; -// -// if (this->client_mesg_factory_->send_message (this, -// stream, -// max_wait_time, -// stub, -// two_way) == -1) -// return -1; -// -// return this->idle_after_send (); -//} -// -//// Return 0, when the reply is not read fully, 1 if it is read fully. -//// @@ This code should go in the TAO_Transport class is repeated for -//// each transport!! -//// @@ Carlos says: no, the code should be factored out in GIOP helper -//// classes, but not in Transport. Transport must deal with -//// non-GIOP protocols, that may have completely different behavior. -//// -//int -//TAO_IIOP_Client_Transport::handle_client_input (int /* block */, -// ACE_Time_Value *max_wait_time) -//{ -// -// // Notice that the message_state is only modified in one thread at a -// // time because the reactor does not call handle_input() for the -// // same Event_Handler in two threads at the same time. -// -// // Get the message state from the Transport Mux Strategy. -// TAO_GIOP_Message_State* message_state = -// this->tms_->get_message_state (); -// -// if (message_state == 0) -// { -// if (TAO_debug_level > 0) -// ACE_DEBUG ((LM_DEBUG, -// ACE_TEXT ("TAO (%P|%t) IIOP_Transport::handle_client_input -") -// ACE_TEXT (" nil message state\n"))); -// this->tms_->connection_closed (); -// return -1; -// } -// -// -// int result = this->client_mesg_factory_->handle_input (this, -// this->orb_core_, -// *message_state, -// max_wait_time); -// if (result == -1) -// { -// if (TAO_debug_level > 0) -// ACE_DEBUG ((LM_DEBUG, -// ACE_TEXT ("TAO (%P|%t) - %p\n"), -// ACE_TEXT ("IIOP_Transport::handle_client_input, handle_input"))); -// -// this->tms_->connection_closed (); -// return -1; -// } -// if (result == 0) -// return result; -// -// // OK, the complete message is here... -// -// result = this->client_mesg_factory_->parse_reply (*message_state, -// this->params_); -// if (result == -1) -// { -// if (TAO_debug_level > 0) -// ACE_DEBUG ((LM_DEBUG, -// ACE_TEXT ("TAO (%P|%t) - %p\n"), -// ACE_TEXT ("IIOP_Transport::handle_client_input, parse reply"))); -// message_state->reset (); -// this->tms_->connection_closed (); -// return -1; -// } -// -// result = -// this->tms_->dispatch_reply (this->params_.request_id_, -// this->params_.reply_status_, -// message_state->giop_version, -// this->params_.svc_ctx_, -// message_state); -// -// // @@ Somehow it seems dangerous to reset the state *after* -// // dispatching the request, what if another threads receives -// // another reply in the same connection? -// // My guess is that it works as follows: -// // - For the exclusive case there can be no such thread. -// // - The the muxed case each thread has its own message_state. -// // I'm pretty sure this comment is right. Could somebody else -// // please look at it and confirm my guess? -// if (result == -1) -// { -// if (TAO_debug_level > 0) -// ACE_ERROR ((LM_ERROR, -// ACE_TEXT ("TAO (%P|%t) : IIOP_Client_Transport::") -// ACE_TEXT ("handle_client_input - ") -// ACE_TEXT ("dispatch reply failed\n"))); -// message_state->reset (); -// this->tms_->connection_closed (); -// return -1; -// } -// -// if (result == 0) -// { -// message_state->reset (); -// return 0; -// } -// -// // This is a NOOP for the Exclusive request case, but it actually -// // destroys the stream in the muxed case. -// this->tms_->destroy_message_state (message_state); -// -// return result; -//} -// -//int -//TAO_IIOP_Client_Transport::register_handler (void) -//{ -// // @@ It seems like this method should go away, the right reactor is -// // picked at object creation time. -// ACE_Reactor *r = this->orb_core ()->reactor (); -// if (r == this->service_handler ()->reactor ()) -// return 0; -// -// // About to be registered with the reactor, so bump the ref -// // count -// this->handler_->incr_ref_count (); -// -// // Set the flag in the Connection Handler -// this->handler_->is_registered (1); -// -// // Register the handler with the reactor -// return r->register_handler (this->handler_, -// ACE_Event_Handler::READ_MASK); -//} -// -// -//TAO_IIOP_SVC_HANDLER * -//TAO_IIOP_Client_Transport::service_handler (void) -//{ -// return this->handler_; -//} -// -//int -//TAO_IIOP_Client_Transport::messaging_init (CORBA::Octet major, -// CORBA::Octet minor) -//{ -// if (this->client_mesg_factory_ == 0) -// { -// if (this->lite_flag_) -// { -// ACE_NEW_RETURN (this->client_mesg_factory_, -// TAO_GIOP_Message_Lite (this->orb_core_), -// -1); -// } -// else if (major == TAO_DEF_GIOP_MAJOR) -// { -// if (minor > TAO_DEF_GIOP_MINOR) -// minor = TAO_DEF_GIOP_MINOR; -// switch (minor) -// { -// case 0: -// ACE_NEW_RETURN (this->client_mesg_factory_, -// TAO_GIOP_Message_Connector_10, -// 0); -// break; -// case 1: -// ACE_NEW_RETURN (this->client_mesg_factory_, -// TAO_GIOP_Message_Connector_11, -// 0); -// break; -// case 2: -// ACE_NEW_RETURN (this->client_mesg_factory_, -// TAO_GIOP_Message_Connector_12, -// 0); -// break; -// default: -// if (TAO_debug_level > 0) -// { -// ACE_ERROR_RETURN ((LM_ERROR, -// ACE_TEXT ("(%N|%l|%p|%t) No matching minor version number \n")), -// 0); -// } -// } -// } -// else -// { -// if (TAO_debug_level > 0) -// { -// ACE_ERROR_RETURN ((LM_ERROR, -// ACE_TEXT ("(%N|%l|%p|%t) No matching major version number \n")), -// 0); -// } -// } -// } -// -// return 1; -//} -// -//CORBA::Boolean -//TAO_IIOP_Client_Transport::send_request_header (TAO_Operation_Details &opdetails, -// TAO_Target_Specification &spec, -// TAO_OutputCDR & msg) -//{ -// // We are going to pass on this request to the underlying messaging -// // layer. It should take care of this request -// CORBA::Boolean retval = -// this->client_mesg_factory_->write_message_header (opdetails, -// TAO_PLUGGABLE_MESSAGE_REQUEST_HEADER, -// spec, -// msg); -// -// return retval; -//} -// -// -//void -//TAO_IIOP_Client_Transport::close_connection (void) -//{ -// // Purge the entry from the Cache map first and then close the -// // handler -// this->handler_->purge_entry (); -// -// // Now close the handler -// this->handler_->handle_close (); -//} -// -//// ********************************************************************* -// -//ssize_t -//TAO_IIOP_Transport::send (TAO_Stub *stub, -// int two_way, -// const ACE_Message_Block *message_block, -// const ACE_Time_Value *max_wait_time) -//{ -// if (stub == 0 || two_way) -// { -// return this->send (message_block, -// max_wait_time); -// } -// else -// { -// TAO_Sync_Strategy &sync_strategy = stub->sync_strategy (); -// -// return sync_strategy.send (*this, -// *stub, -// message_block, -// max_wait_time); -// } -//} -// -//ssize_t -//TAO_IIOP_Transport::send (const ACE_Message_Block *message_block, -// const ACE_Time_Value *max_wait_time, -// size_t *bytes_transferred) -//{ -// TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_TRANSPORT_SEND_START); -// -// return ACE::send_n (this->handle (), -// message_block, -// max_wait_time, -// bytes_transferred); -//} -// -//ssize_t -//TAO_IIOP_Transport::send (const u_char *buf, -// size_t len, -// const ACE_Time_Value *max_wait_time) -//{ -// TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_TRANSPORT_SEND_START); -// -// return this->service_handler ()->peer ().send_n (buf, -// len, -// max_wait_time); -//} -// -//ssize_t -//TAO_IIOP_Transport::recv (char *buf, -// size_t len, -// const ACE_Time_Value *max_wait_time) -//{ -// TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_TRANSPORT_RECEIVE_START); -// -// return this->service_handler ()->peer ().recv_n (buf, -// len, -// max_wait_time); -//} -// -//// Default action to be taken for send request. -//int -//TAO_IIOP_Transport::send_request (TAO_Stub *, -// TAO_ORB_Core * /* orb_core */, -// TAO_OutputCDR & /* stream */, -// int /* twoway */, -// ACE_Time_Value * /* max_wait_time */) -//{ -// return -1; -//} -// -// -// -//CORBA::Boolean -//TAO_IIOP_Transport::send_request_header (TAO_Operation_Details & /**/, -// TAO_Target_Specification & /*spec */ , -// TAO_OutputCDR & /*msg*/) -//{ -// // We should never be here. So return an error. -// return 0; -//} -//*/ - -//ssize_t -//TAO_IIOP_Transport::send (TAO_Stub *stub, -// int two_way, -// const ACE_Message_Block *message_block, -// const ACE_Time_Value *max_wait_time) -//{ -// if (stub == 0 || two_way) -// { -// return this->send (message_block, -// max_wait_time); -// } -// else -// { -// TAO_Sync_Strategy &sync_strategy = stub->sync_strategy (); -// -// return sync_strategy.send (*this, -// *stub, -// message_block, -// max_wait_time); -// } -//} -// -//ssize_t -//TAO_IIOP_Transport::send (const ACE_Message_Block *message_block, -// const ACE_Time_Value *max_wait_time, -// size_t *bytes_transferred) -//{ -// TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_TRANSPORT_SEND_START); -// -// return ACE::send_n (this->handle (), -// message_block, -// max_wait_time, -// bytes_transferred); -//} -// -//ssize_t -//TAO_IIOP_Transport::send (const u_char *buf, -// size_t len, -// const ACE_Time_Value *max_wait_time) -//{ -// TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_TRANSPORT_SEND_START); -// -// return this->service_handler ()->peer ().send_n (buf, -// len, -// max_wait_time); -//} -// -//ssize_t -//TAO_IIOP_Transport::recv (char *buf, -// size_t len, -// const ACE_Time_Value *max_wait_time) -//{ -// TAO_FUNCTION_PP_TIMEPROBE (TAO_IIOP_TRANSPORT_RECEIVE_START); -// -// return this->service_handler ()->peer ().recv_n (buf, -// len, -// max_wait_time); -//} |