diff options
author | doccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-11-09 18:48:44 +0000 |
---|---|---|
committer | doccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2000-11-09 18:48:44 +0000 |
commit | 3db71840bc9c446a7709b1a8f620bee6a953e6d3 (patch) | |
tree | 7008cc34c876503e0da1d07eeb2891025fbb0d49 /TAO/tao/Strategies/UIOP_Transport.h | |
parent | 8fd13ec7f8b0abd317029f9cda78a3f55222891a (diff) | |
download | ATCD-3db71840bc9c446a7709b1a8f620bee6a953e6d3.tar.gz |
ChangeLogTag: Thu Nov 9 10:38:19 2000 Priyanka Gontla <pgontla@ece.uci.edu>
Diffstat (limited to 'TAO/tao/Strategies/UIOP_Transport.h')
-rw-r--r-- | TAO/tao/Strategies/UIOP_Transport.h | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/TAO/tao/Strategies/UIOP_Transport.h b/TAO/tao/Strategies/UIOP_Transport.h new file mode 100644 index 00000000000..215be5993e9 --- /dev/null +++ b/TAO/tao/Strategies/UIOP_Transport.h @@ -0,0 +1,231 @@ +// This may look like C, but it's really -*- C++ -*- +// $Id$ + + +// ============================================================================ +// +// = LIBRARY +// TAO +// +// = FILENAME +// UIOP_Transport.h +// +// = DESCRIPTION +// UIOP Transport specific processing +// +// = AUTHOR +// Fred Kuhns <fredk@cs.wustl.edu> +// Ossama Othman <othman@cs.wustl.edu> +// +// ============================================================================ + +#ifndef TAO_UIOP_TRANSPORT_H +#define TAO_UIOP_TRANSPORT_H +#include "ace/pre.h" + +#include "tao/Pluggable.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +#include "strategies_export.h" + +# if TAO_HAS_UIOP == 1 +#include "ace/LSOCK_Acceptor.h" +#include "tao/GIOP_Message_State.h" +#include "ace/Synch.h" +#include "ace/Svc_Handler.h" + +// Forward decls. + +class TAO_UIOP_Client_Connection_Handler; +class TAO_UIOP_Server_Connection_Handler; +class TAO_ORB_Core; + +typedef ACE_Svc_Handler<ACE_LSOCK_STREAM, ACE_NULL_SYNCH> + TAO_UIOP_SVC_HANDLER; + +class TAO_Strategies_Export TAO_UIOP_Transport : public TAO_Transport +{ + // = TITLE + // This class acts as a bridge class to the transport specific + // connection handler (handler_). + // + // = DESCRIPTION + // Specialization of the base TAO_Transport class to handle the UIOP + // protocol. This class in turn will be further specialized for + // the client and server side. +public: + TAO_UIOP_Transport (TAO_ORB_Core *orb_core); + // Base object's creator method. + + ~TAO_UIOP_Transport (void); + // Default destructor. + + // = The TAO_Transport methods, please check the documentation in + // "tao/Pluggable.h" for more details. + virtual void close_connection (void); + + virtual ACE_HANDLE handle (void); + virtual ACE_Event_Handler *event_handler (void); + virtual ssize_t send (TAO_Stub *stub, + int two_way, + const ACE_Message_Block *mblk, + const ACE_Time_Value *s = 0); + virtual ssize_t send (const ACE_Message_Block *mblk, + const ACE_Time_Value *s = 0, + size_t *bytes_transferred = 0); + virtual ssize_t send (const u_char *buf, + size_t len, + const ACE_Time_Value *s = 0); + virtual ssize_t recv (char *buf, + size_t len, + const ACE_Time_Value *s = 0); + virtual int send_request (TAO_Stub *stub, + TAO_ORB_Core *orb_core , + TAO_OutputCDR &stream, + int twoway, + ACE_Time_Value *max_wait_time); + + + virtual CORBA::Boolean + send_request_header (TAO_Operation_Details &opdetails, + TAO_Target_Specification &spec, + TAO_OutputCDR &msg); + + virtual TAO_UIOP_SVC_HANDLER *service_handler (void) = 0; + // Acces the underlying connection handler + +}; + +class TAO_Strategies_Export TAO_UIOP_Client_Transport : public TAO_UIOP_Transport +{ + // = TITLE + // The Transport class used for Client side communication with a + // server. + // + // = DESCRIPTION + // Specialization of the TAO_UIOP_Transport class for client + // side. Methods related to sending one and two way requests + // lives here. +public: + TAO_UIOP_Client_Transport (TAO_UIOP_Client_Connection_Handler *handler, + TAO_ORB_Core *orb_core); + // Constructor. Note, TAO_UIOP_Handler_Base is the base class for + // both TAO_UIOP_Client_Connection_Handler and + // TAO_UIOP_Server_Connection_Handler. + + ~TAO_UIOP_Client_Transport (void); + // destructor + + // = The TAO_Transport methods, please check the documentation in + // "tao/Pluggable.h" for more details. + virtual int idle (void); + + virtual void start_request (TAO_ORB_Core *orb_core, + TAO_Target_Specification &spec, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual void start_locate (TAO_ORB_Core *orb_core, + TAO_Target_Specification &spec, + TAO_Operation_Details &opdetails, + TAO_OutputCDR &output, + CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ()) + ACE_THROW_SPEC ((CORBA::SystemException)); + + virtual int send_request (TAO_Stub *stub, + TAO_ORB_Core *orb_core, + TAO_OutputCDR &stream, + int twoway, + ACE_Time_Value *max_wait_time); + virtual int handle_client_input (int block = 0, + ACE_Time_Value *max_time_value = 0); + virtual int register_handler (void); + // Register the handler with the reactor. This will be called by the + // Wait Strategy if Reactor is used for that strategy. + + TAO_UIOP_SVC_HANDLER *service_handler (void); + // Access the underlying connection handler + + virtual CORBA::Boolean + send_request_header (TAO_Operation_Details &opdetail, + TAO_Target_Specification &spec, + TAO_OutputCDR &msg); + + int messaging_init (CORBA::Octet major, + CORBA::Octet minor); + // Initialising the messaging object + + void use_lite (CORBA::Boolean flag); + // Set the lite flag + +private: + + TAO_UIOP_Client_Connection_Handler *handler_; + // The connection service handler used for accessing lower layer + // communication protocols. + + TAO_Pluggable_Messaging *client_mesg_factory_; + // The message_factor instance specific for this particular + // transport protocol. + + TAO_ORB_Core *orb_core_; + // Our orb Core + + CORBA::Boolean lite_flag_; + // We using GIOP lite? + + TAO_Pluggable_Reply_Params params_; + // The reply data that is sent back by the server +}; + +// **************************************************************** + +class TAO_Strategies_Export TAO_UIOP_Server_Transport : public TAO_UIOP_Transport +{ + // = TITLE + // The Transport class used for server communication with a + // connected client. + // + // = DESCRIPTION + // Specialization of the TAO_UIOP_Transport class for the server side. + // methods for reading messages (requests) and sending replies live + // here. +public: + + TAO_UIOP_Server_Transport (TAO_UIOP_Server_Connection_Handler *handler, + TAO_ORB_Core* orb_core); + // Default creator method. + + ~TAO_UIOP_Server_Transport (void); + // Default destructor + + // See Pluggable.h for documentation + virtual int idle (void); + + TAO_UIOP_SVC_HANDLER *service_handler (void); + // Access the underlying connection handler + + TAO_GIOP_Message_State message_state_; + // This keep the state of the current message, to enable + // non-blocking reads, fragment reassembly, etc. + +private: + + TAO_UIOP_Server_Connection_Handler *handler_; + // the connection service handler used for accessing lower layer + // communication protocols. + +}; + +#if defined (__ACE_INLINE__) +#include "UIOP_Transport.i" +#endif /* __ACE_INLINE__ */ + +# endif /* TAO_HAS_UIOP == 1 */ + +#include "ace/post.h" +#endif /* TAO_UIOP_TRANSPORT_H */ |