diff options
-rw-r--r-- | TAO/tao/Connection_Handler.h | 5 | ||||
-rw-r--r-- | TAO/tao/Connection_Handler.inl | 9 | ||||
-rw-r--r-- | TAO/tao/Default_Protocols_Hooks.cpp | 27 | ||||
-rw-r--r-- | TAO/tao/Default_Protocols_Hooks.h | 17 | ||||
-rw-r--r-- | TAO/tao/IIOP_Connection_Handler.cpp | 90 | ||||
-rw-r--r-- | TAO/tao/IIOP_Connection_Handler.h | 21 | ||||
-rw-r--r-- | TAO/tao/IIOP_Transport.cpp | 218 | ||||
-rw-r--r-- | TAO/tao/IIOP_Transport.h | 9 |
8 files changed, 318 insertions, 78 deletions
diff --git a/TAO/tao/Connection_Handler.h b/TAO/tao/Connection_Handler.h index 8a928181f42..9cd265157fe 100644 --- a/TAO/tao/Connection_Handler.h +++ b/TAO/tao/Connection_Handler.h @@ -1,3 +1,4 @@ + // -*- C++ -*- //============================================================================= @@ -74,6 +75,10 @@ public: /// reference to this object can call the event handler methods. virtual int handle_input (ACE_HANDLE fd) = 0; + void update_protocol_properties (int send_buffer_size, + int recv_buffer_size, + int no_delay, + int enable_network_priority); protected: /// Return our TAO_ORB_Core pointer diff --git a/TAO/tao/Connection_Handler.inl b/TAO/tao/Connection_Handler.inl index 0b8117b0b9c..8a6590ec1d4 100644 --- a/TAO/tao/Connection_Handler.inl +++ b/TAO/tao/Connection_Handler.inl @@ -48,3 +48,12 @@ TAO_Connection_Handler::pending_upcalls (void) const { return this->pending_upcalls_; } + +ACE_INLINE void +TAO_Connection_Handler::update_protocol_properties (int /*send_buffer_size*/, + int /*recv_buffer_size*/, + int /*no_delay*/, + int /*enable_network_priority*/) +{ +} + diff --git a/TAO/tao/Default_Protocols_Hooks.cpp b/TAO/tao/Default_Protocols_Hooks.cpp index 0ef3d79a2e6..d38c2f5ba8e 100644 --- a/TAO/tao/Default_Protocols_Hooks.cpp +++ b/TAO/tao/Default_Protocols_Hooks.cpp @@ -1,8 +1,10 @@ + // $Id$ #include "Default_Protocols_Hooks.h" #include "PolicyC.h" #include "ace/Dynamic_Service.h" +#include "tao/Connection_Handler.h" #if !defined (__ACE_INLINE__) # include "Default_Protocols_Hooks.i" @@ -12,6 +14,7 @@ ACE_RCSID (tao, Default_Protocols_Hooks, "$Id$") + /// destructor TAO_Default_Protocols_Hooks::~TAO_Default_Protocols_Hooks (void) { @@ -27,6 +30,7 @@ int TAO_Default_Protocols_Hooks::call_client_protocols_hook (int &, int &, int &, + int &, const char *) { return 0; @@ -36,6 +40,7 @@ int TAO_Default_Protocols_Hooks::call_server_protocols_hook (int &, int &, int &, + int &, const char *) { return 0; @@ -122,6 +127,28 @@ TAO_Default_Protocols_Hooks::rt_service_context (TAO_Stub *, { } +int +TAO_Default_Protocols_Hooks::update_client_protocol_properties (TAO_Stub *, + TAO_Connection_Handler *, + const char *) +{ + return 0; +} + +int +TAO_Default_Protocols_Hooks::update_server_protocol_properties (CORBA::Policy *policy, + TAO_Connection_Handler *, + const char *) +{ + return 0; +} + +CORBA::Long +TAO_Default_Protocols_Hooks::get_dscp_codepoint (void) +{ + return 0; +} + // **************************************************************** diff --git a/TAO/tao/Default_Protocols_Hooks.h b/TAO/tao/Default_Protocols_Hooks.h index a215671c425..5e82fee6d79 100644 --- a/TAO/tao/Default_Protocols_Hooks.h +++ b/TAO/tao/Default_Protocols_Hooks.h @@ -1,3 +1,4 @@ + // -*- C++ -*- // =================================================================== @@ -12,16 +13,20 @@ #ifndef TAO_DEFAULT_PROTOCOLS_HOOKS_H #define TAO_DEFAULT_PROTOCOLS_HOOKS_H + #include "ace/pre.h" #include "Protocols_Hooks.h" + #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "ace/Service_Config.h" +class TAO_POA; + class TAO_Export TAO_Default_Protocols_Hooks : public TAO_Protocols_Hooks { public: @@ -35,13 +40,25 @@ public: virtual int call_client_protocols_hook (int &send_buffer_size, int &recv_buffer_size, int &no_delay, + int &enable_network_priority, const char *protocol_type); virtual int call_server_protocols_hook (int &send_buffer_size, int &recv_buffer_size, int &no_delay, + int &enable_network_priority, const char *protocol_type); + virtual int update_client_protocol_properties (TAO_Stub *stub, + TAO_Connection_Handler *connection_handler, + const char *protocol_type); + + virtual int update_server_protocol_properties (CORBA::Policy *policy, + TAO_Connection_Handler *connection_handler, + const char *protocol_type); + + virtual CORBA::Long get_dscp_codepoint (void); + virtual void rt_service_context (TAO_Stub *stub, TAO_Service_Context &service_context, CORBA::Boolean restart diff --git a/TAO/tao/IIOP_Connection_Handler.cpp b/TAO/tao/IIOP_Connection_Handler.cpp index 20a3626ba6c..d7929a03c3c 100644 --- a/TAO/tao/IIOP_Connection_Handler.cpp +++ b/TAO/tao/IIOP_Connection_Handler.cpp @@ -1,5 +1,7 @@ + // $Id$ + #include "tao/IIOP_Connection_Handler.h" #include "tao/Timeprobe.h" #include "tao/debug.h" @@ -13,6 +15,9 @@ #include "tao/Thread_Lane_Resources.h" #include "tao/Base_Transport_Property.h" #include "tao/Resume_Handle.h" +#include "tao/Protocols_Hooks.h" + + #if !defined (__ACE_INLINE__) # include "tao/IIOP_Connection_Handler.i" @@ -25,8 +30,7 @@ ACE_RCSID (tao, TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler (ACE_Thread_Manager *t) : TAO_IIOP_SVC_HANDLER (t, 0 , 0), - TAO_Connection_Handler (0), - tcp_properties_ (0) + TAO_Connection_Handler (0) { // This constructor should *never* get called, it is just here to // make the compiler happy: the default implementation of the @@ -42,8 +46,8 @@ TAO_IIOP_Connection_Handler::TAO_IIOP_Connection_Handler (TAO_ORB_Core *orb_core void *arg) : TAO_IIOP_SVC_HANDLER (orb_core->thr_mgr (), 0, 0), TAO_Connection_Handler (orb_core), - tcp_properties_ (ACE_static_cast - (TAO_IIOP_Properties *, arg)) + tcp_properties_ (*(ACE_static_cast + (TAO_IIOP_Properties *, arg))) { TAO_IIOP_Transport* specific_transport = 0; ACE_NEW(specific_transport, @@ -63,15 +67,15 @@ int TAO_IIOP_Connection_Handler::open (void*) { if (this->set_socket_option (this->peer (), - this->tcp_properties_->send_buffer_size, - this->tcp_properties_->recv_buffer_size) == -1) + this->tcp_properties_.send_buffer_size, + this->tcp_properties_.recv_buffer_size) == -1) return -1; #if !defined (ACE_LACKS_TCP_NODELAY) if (this->peer ().set_option (ACE_IPPROTO_TCP, TCP_NODELAY, - (void *) &tcp_properties_->no_delay, + (void *) &tcp_properties_.no_delay, sizeof (int)) == -1) return -1; #endif /* ! ACE_LACKS_TCP_NODELAY */ @@ -427,6 +431,78 @@ TAO_IIOP_Connection_Handler::handle_input (ACE_HANDLE h) return retval; } +void +TAO_IIOP_Connection_Handler::update_protocol_properties (int send_buffer_size, + int recv_buffer_size, + int no_delay, + int enable_network_priority) +{ + if (TAO_debug_level) + ACE_DEBUG ((LM_DEBUG, + "TAO_IIOP_Connection_Handler::update_protocol_properties \n enable_network_priority = %d\n", + enable_network_priority)); + + if (this->tcp_properties_.send_buffer_size != send_buffer_size) + this->tcp_properties_.send_buffer_size = send_buffer_size; + + if (this->tcp_properties_.recv_buffer_size != recv_buffer_size) + this->tcp_properties_.recv_buffer_size = recv_buffer_size; + + if (this->tcp_properties_.no_delay != no_delay) + this->tcp_properties_.no_delay = no_delay; + + if (this->tcp_properties_.enable_network_priority != enable_network_priority) + this->tcp_properties_.enable_network_priority = enable_network_priority; + +} + +int +TAO_IIOP_Connection_Handler::enable_network_priority (void) +{ + return this->tcp_properties_.enable_network_priority; +} + +int +TAO_IIOP_Connection_Handler::set_dscp_codepoint (void) +{ + int tos; + if (this->enable_network_priority ()) + { + TAO_Protocols_Hooks *tph = this->orb_core ()->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + if (tph != 0) + { + CORBA::Long codepoint = + tph->get_dscp_codepoint (); + + + tos = (int)(codepoint ) << 2; + } + } + else + { + tos = IPDSFIELD_DSCP_DEFAULT << 2; + } + + if (tos != this->dscp_codepoint_) + { + int ret = this->peer ().set_option(IPPROTO_IP, IP_TOS, (int *)&tos , (int)sizeof(tos)); + + if (ret < 0) + ACE_DEBUG ((LM_DEBUG, + "Failed to set Diffserv codepoint - try running as superuser\n")); + + if(TAO_debug_level) + { + ACE_DEBUG((LM_DEBUG, "(%N,%l) set tos: ret: %d %x\n", ret, tos)); + } + this->dscp_codepoint_ = tos; + } + + return 0; +} + diff --git a/TAO/tao/IIOP_Connection_Handler.h b/TAO/tao/IIOP_Connection_Handler.h index fbf5d02d2bf..998543e8dd3 100644 --- a/TAO/tao/IIOP_Connection_Handler.h +++ b/TAO/tao/IIOP_Connection_Handler.h @@ -42,6 +42,8 @@ class TAO_Pluggable_Messaging; * */ +#define IPDSFIELD_DSCP_DEFAULT 0x00 + class TAO_Export TAO_IIOP_Properties { @@ -49,6 +51,7 @@ public: int send_buffer_size; int recv_buffer_size; int no_delay; + int enable_network_priority; }; @@ -122,6 +125,21 @@ public: /// Process the <listen_list> int process_listen_point_list (IIOP::ListenPointList &listen_list); + ///Check if network priority needs to be enabled + int enable_network_priority (void); + + ///Set the Diff-Serv codepoint if the Policy dicates the setting of Network Priority + int set_dscp_codepoint (void); + + int set_dscp_codepoint (int tos); + + ///Update the tcp properties of the hanlder to the most recent + ///properties set after the last invocation + virtual void update_protocol_properties (int send_buffer_size, + int recv_buffer_size, + int no_delay, + int enable_network_priority); + protected: /// = Event Handler overloads @@ -139,7 +157,8 @@ protected: private: /// TCP configuration for this connection. - TAO_IIOP_Properties *tcp_properties_; + TAO_IIOP_Properties tcp_properties_; + int dscp_codepoint_; }; diff --git a/TAO/tao/IIOP_Transport.cpp b/TAO/tao/IIOP_Transport.cpp index 1e6aa25e237..d8d5dcd48c5 100644 --- a/TAO/tao/IIOP_Transport.cpp +++ b/TAO/tao/IIOP_Transport.cpp @@ -1,3 +1,4 @@ + // This may look like C, but it's really -*- C++ -*- // $Id$ @@ -18,19 +19,21 @@ #include "tao/debug.h" #include "tao/GIOP_Message_Base.h" #include "tao/GIOP_Message_Lite.h" +#include "tao/Protocols_Hooks.h" +#include "tao/Adapter.h" #if !defined (__ACE_INLINE__) # include "tao/IIOP_Transport.i" #endif /* ! __ACE_INLINE__ */ -ACE_RCSID (tao, IIOP_Transport, "$Id$") +ACE_RCSID (tao, IIOP_Transport, "$Id$") TAO_IIOP_Transport::TAO_IIOP_Transport (TAO_IIOP_Connection_Handler *handler, - TAO_ORB_Core *orb_core, - CORBA::Boolean flag) + TAO_ORB_Core *orb_core, + CORBA::Boolean flag) : TAO_Transport (TAO_TAG_IIOP_PROFILE, - orb_core) + orb_core) , connection_handler_ (handler) , messaging_object_ (0) { @@ -38,17 +41,18 @@ TAO_IIOP_Transport::TAO_IIOP_Transport (TAO_IIOP_Connection_Handler *handler, { // Use the lite version of the protocol ACE_NEW (this->messaging_object_, - TAO_GIOP_Message_Lite (orb_core)); + TAO_GIOP_Message_Lite (orb_core)); } else { // Use the normal GIOP object ACE_NEW (this->messaging_object_, - TAO_GIOP_Message_Base (orb_core)); + TAO_GIOP_Message_Base (orb_core)); } } TAO_IIOP_Transport::~TAO_IIOP_Transport (void) + { delete this->messaging_object_; } @@ -73,11 +77,11 @@ TAO_IIOP_Transport::messaging_object (void) ssize_t TAO_IIOP_Transport::send_i (iovec *iov, int iovcnt, - size_t &bytes_transferred, - const ACE_Time_Value *max_wait_time) + size_t &bytes_transferred, + const ACE_Time_Value *max_wait_time) { ssize_t retval = this->connection_handler_->peer ().sendv (iov, iovcnt, - max_wait_time); + max_wait_time); if (retval > 0) bytes_transferred = retval; @@ -86,12 +90,12 @@ TAO_IIOP_Transport::send_i (iovec *iov, int iovcnt, ssize_t TAO_IIOP_Transport::recv_i (char *buf, - size_t len, - const ACE_Time_Value *max_wait_time) + size_t len, + const ACE_Time_Value *max_wait_time) { ssize_t n = this->connection_handler_->peer ().recv (buf, - len, - max_wait_time); + len, + max_wait_time); // Do not print the error message if it is a timeout, which could // occur in thread-per-connection. @@ -100,16 +104,16 @@ TAO_IIOP_Transport::recv_i (char *buf, errno != ETIME) { ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO (%P|%t) - %p \n"), - ACE_TEXT ("TAO - read message failure ") - ACE_TEXT ("recv_i () \n"))); + ACE_TEXT ("TAO (%P|%t) - %p \n"), + ACE_TEXT ("TAO - read message failure ") + ACE_TEXT ("recv_i () \n"))); } // Error handling if (n == -1) { if (errno == EWOULDBLOCK) - return 0; + return 0; return -1; @@ -133,8 +137,8 @@ TAO_IIOP_Transport::register_handler_i (void) if (TAO_debug_level > 4) { ACE_DEBUG ((LM_DEBUG, - "TAO (%P|%t) - IIOP_Transport::register_handler %d\n", - this->id ())); + "TAO (%P|%t) - IIOP_Transport::register_handler %d\n", + this->id ())); } ACE_Reactor *r = this->orb_core_->reactor (); @@ -149,7 +153,7 @@ TAO_IIOP_Transport::register_handler_i (void) // Register the handler with the reactor return r->register_handler (this->connection_handler_, - ACE_Event_Handler::READ_MASK); + ACE_Event_Handler::READ_MASK); } @@ -160,17 +164,43 @@ TAO_IIOP_Transport::send_request (TAO_Stub *stub, int message_semantics, ACE_Time_Value *max_wait_time) { + TAO_Protocols_Hooks *tph = this->orb_core_->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + if (tph != 0) + { + /* + int send_buffer_size; + int recv_buffer_size; + int no_delay; + int enable_network_priority; + */ + + + const char protocol [] = "iiop"; + const char *protocol_type = protocol; + + int result = + tph->update_client_protocol_properties (stub, + this->connection_handler_, + protocol_type); + + if (result == -1) + return -1; + + } + if (this->ws_->sending_request (orb_core, message_semantics) == -1) + return -1; if (this->send_message (stream, stub, message_semantics, max_wait_time) == -1) - return -1; - + return this->idle_after_send (); } @@ -180,6 +210,15 @@ TAO_IIOP_Transport::send_message (TAO_OutputCDR &stream, int message_semantics, ACE_Time_Value *max_wait_time) { + + if (TAO_debug_level) + ACE_DEBUG ((LM_DEBUG, + "TAO_IIOP_Transport::send_message\n enable_network_priority = %d\n", + this->connection_handler_->enable_network_priority ())); + + this->connection_handler_->set_dscp_codepoint (); + + // Format the message in the stream first if (this->messaging_object_->format_message (stream) != 0) return -1; @@ -193,10 +232,10 @@ TAO_IIOP_Transport::send_message (TAO_OutputCDR &stream, if (n == -1) { if (TAO_debug_level) - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT ("TAO: (%P|%t|%N|%l) closing transport %d after fault %p\n"), - this->id (), - ACE_TEXT ("send_message ()\n"))); + ACE_DEBUG ((LM_DEBUG, + ACE_TEXT ("TAO: (%P|%t|%N|%l) closing transport %d after fault %p\n"), + this->id (), + ACE_TEXT ("send_message ()\n"))); return -1; } @@ -204,10 +243,54 @@ TAO_IIOP_Transport::send_message (TAO_OutputCDR &stream, return 1; } +/* +int +TAO_IIOP_Transport::send_reply (TAO_OutputCDR &stream, + TAO_Adapter *poa) +{ + + TAO_Protocols_Hooks *tph = this->orb_core_->get_protocols_hooks (ACE_ENV_SINGLE_ARG_PARAMETER); + ACE_CHECK_RETURN (-1); + + + if (tph != 0) + { + int send_buffer_size; + int recv_buffer_size; + int no_delay; + int enable_network_priority; + + const char protocol [] = "iiop"; + const char *protocol_type = protocol; + + int result = + tph->get_effective_server_protocol_properties (poa, + send_buffer_size, + recv_buffer_size, + no_delay, + enable_network_priority, + protocol_type); + if (result != 0) + ACE_ERROR_RETURN ((LM_ERROR, + "Error in getting the effective protocol properties\n"), + -1); + + this->connection_handler_->update_protocol_properties (send_buffer_size, + recv_buffer_size, + no_delay, + enable_network_priority); + } + + int result = this->send_message (stream); + return result; +} + + */ + int TAO_IIOP_Transport::generate_request_header (TAO_Operation_Details &opdetails, - TAO_Target_Specification &spec, - TAO_OutputCDR &msg) + TAO_Target_Specification &spec, + TAO_OutputCDR &msg) { // Check whether we have a Bi Dir IIOP policy set, whether the // messaging objects are ready to handle bidirectional connections @@ -221,25 +304,24 @@ TAO_IIOP_Transport::generate_request_header (TAO_Operation_Details &opdetails, // Set the flag to 0 (i.e., originating side) this->bidirectional_flag (0); - - // Modify the request id if we have BiDirectional client/server - // setup. - // @@ Is this needed at all? - opdetails.modify_request_id (this->bidirectional_flag ()); } + // Modify the request id if we have BiDirectional client/server + // setup + opdetails.modify_request_id (this->bidirectional_flag ()); + return TAO_Transport::generate_request_header (opdetails, - spec, - msg); + spec, + msg); } int TAO_IIOP_Transport::messaging_init (CORBA::Octet major, - CORBA::Octet minor) + CORBA::Octet minor) { this->messaging_object_->init (major, - minor); + minor); return 1; } @@ -280,12 +362,12 @@ TAO_IIOP_Transport::set_bidir_context_info (TAO_Operation_Details &opdetails) { // Check whether it is a IIOP acceptor if ((*acceptor)->tag () == TAO_TAG_IIOP_PROFILE) - { - // @@ Why isn't the return value checked! - // -Ossama - this->get_listen_point (listen_point_list, - *acceptor); - } + { + // @@ Why isn't the return value checked! + // -Ossama + this->get_listen_point (listen_point_list, + *acceptor); + } } // We have the ListenPointList at this point. Create a output CDR @@ -299,7 +381,7 @@ TAO_IIOP_Transport::set_bidir_context_info (TAO_Operation_Details &opdetails) // Add this info in to the svc_list opdetails.request_service_context ().set_context (IOP::BI_DIR_IIOP, - cdr); + cdr); return; } @@ -311,7 +393,7 @@ TAO_IIOP_Transport::get_listen_point ( { TAO_IIOP_Acceptor *iiop_acceptor = ACE_dynamic_cast (TAO_IIOP_Acceptor *, - acceptor ); + acceptor ); // Get the array of endpoints serviced by TAO_IIOP_Acceptor const ACE_INET_Addr *endpoint_addr = @@ -328,10 +410,10 @@ TAO_IIOP_Transport::get_listen_point ( == -1) { ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) Could not resolve local ") - ACE_TEXT ("host address in ") - ACE_TEXT ("get_listen_point()\n")), - -1); + ACE_TEXT ("(%P|%t) Could not resolve local ") + ACE_TEXT ("host address in ") + ACE_TEXT ("get_listen_point()\n")), + -1); } // Note: Looks like there is no point in sending the list of @@ -341,13 +423,13 @@ TAO_IIOP_Transport::get_listen_point ( // Get the hostname for the local address if (iiop_acceptor->hostname (this->orb_core_, - local_addr, - local_interface.out ()) == -1) + local_addr, + local_interface.out ()) == -1) { ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) Could not resolve local host") - ACE_TEXT (" name \n")), - -1); + ACE_TEXT ("(%P|%t) Could not resolve local host") + ACE_TEXT (" name \n")), + -1); } for (size_t index = 0; @@ -355,20 +437,20 @@ TAO_IIOP_Transport::get_listen_point ( index++) { if (local_addr.get_ip_address() - == endpoint_addr[index].get_ip_address()) - { - // Get the count of the number of elements - CORBA::ULong len = listen_point_list.length (); - - // Increase the length by 1 - listen_point_list.length (len + 1); - - // We have the connection and the acceptor endpoint on the - // same interface - IIOP::ListenPoint &point = listen_point_list[len]; - point.host = CORBA::string_dup (local_interface.in ()); - point.port = endpoint_addr[index].get_port_number (); - } + == endpoint_addr[index].get_ip_address()) + { + // Get the count of the number of elements + CORBA::ULong len = listen_point_list.length (); + + // Increase the length by 1 + listen_point_list.length (len + 1); + + // We have the connection and the acceptor endpoint on the + // same interface + IIOP::ListenPoint &point = listen_point_list[len]; + point.host = CORBA::string_dup (local_interface.in ()); + point.port = endpoint_addr[index].get_port_number (); + } } return 1; diff --git a/TAO/tao/IIOP_Transport.h b/TAO/tao/IIOP_Transport.h index 75b591f72c4..854bc66f68a 100644 --- a/TAO/tao/IIOP_Transport.h +++ b/TAO/tao/IIOP_Transport.h @@ -1,3 +1,4 @@ + // This may look like C, but it's really -*- C++ -*- // -*- C++ -*- // =================================================================== @@ -27,13 +28,13 @@ #include "ace/Svc_Handler.h" #include "tao/IIOPC.h" - // Forward decls. class TAO_IIOP_Connection_Handler; class TAO_ORB_Core; class TAO_Operation_Details; class TAO_Pluggable_Messaging; class TAO_Acceptor; +class TAO_Adapter; // Service Handler for this transport typedef ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH> @@ -74,7 +75,6 @@ protected: //@{ virtual ACE_Event_Handler * event_handler_i (void); - virtual TAO_Connection_Handler * connection_handler_i (void); virtual ACE_Event_Handler * invalidate_event_handler_i (void); /// Access the underlying messaging object @@ -105,6 +105,9 @@ public: int message_semantics = TAO_Transport::TAO_TWOWAY_REQUEST, ACE_Time_Value *max_time_wait = 0); + /*virtual int send_reply (TAO_OutputCDR &stream, + TAO_Adapter *poa = 0);*/ + virtual int generate_request_header (TAO_Operation_Details &opdetails, TAO_Target_Specification &spec, TAO_OutputCDR &msg); @@ -114,6 +117,8 @@ public: virtual int tear_listen_point_list (TAO_InputCDR &cdr); + virtual TAO_Connection_Handler * connection_handler_i (void); + //@} private: |