summaryrefslogtreecommitdiff
path: root/TAO/tao/Strategies/UIOP_Transport.h
diff options
context:
space:
mode:
authordoccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-11-09 18:48:44 +0000
committerdoccvs <doccvs@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-11-09 18:48:44 +0000
commit3db71840bc9c446a7709b1a8f620bee6a953e6d3 (patch)
tree7008cc34c876503e0da1d07eeb2891025fbb0d49 /TAO/tao/Strategies/UIOP_Transport.h
parent8fd13ec7f8b0abd317029f9cda78a3f55222891a (diff)
downloadATCD-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.h231
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 */