summaryrefslogtreecommitdiff
path: root/TAO/tao/Strategies/SHMIOP_Transport.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Strategies/SHMIOP_Transport.h')
-rw-r--r--TAO/tao/Strategies/SHMIOP_Transport.h215
1 files changed, 77 insertions, 138 deletions
diff --git a/TAO/tao/Strategies/SHMIOP_Transport.h b/TAO/tao/Strategies/SHMIOP_Transport.h
index 04639559d70..feb2c10245d 100644
--- a/TAO/tao/Strategies/SHMIOP_Transport.h
+++ b/TAO/tao/Strategies/SHMIOP_Transport.h
@@ -1,22 +1,15 @@
// This may look like C, but it's really -*- C++ -*-
// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// TAO
-//
-// = FILENAME
-// SHMIOP_Transport.h
-//
-// = DESCRIPTION
-// IIOP Transport specific processing
-//
-// = AUTHOR
-// Nanbor Wang <nanbor@cs.wustl.edu>
-//
-// ============================================================================
-
+// ===================================================================
+/**
+ * @file SHMIOP_Transport.h
+ *
+ * $Id$
+ *
+ * @author Originally by Nanbor Wang <nanbor@cs.wustl.edu>
+ * @author Modified by Balachandran Natarajan <bala@cs.wustl.edu>
+ */
+// ===================================================================
#ifndef TAO_SHMIOP_TRANSPORT_H
#define TAO_SHMIOP_TRANSPORT_H
#include "ace/pre.h"
@@ -30,96 +23,96 @@
#if defined (TAO_HAS_SHMIOP) && (TAO_HAS_SHMIOP != 0)
#include "strategies_export.h"
-
-#include "tao/Pluggable.h"
-#include "tao/GIOP_Message_State.h"
-#include "ace/MEM_Acceptor.h"
-#include "ace/Synch.h"
#include "ace/Svc_Handler.h"
+#include "ace/MEM_Stream.h"
+#include "tao/Pluggable.h"
-// Forward decls.
-class TAO_SHMIOP_Client_Connection_Handler;
-class TAO_SHMIOP_Server_Connection_Handler;
-class TAO_ORB_Core;
+class TAO_SHMIOP_Connection_Handler;
+class TAO_Pluggable_Messaging;
+class TAO_Target_Specification;
+class Tao_Operation_Details;
typedef ACE_Svc_Handler<ACE_MEM_STREAM, ACE_NULL_SYNCH>
- TAO_SHMIOP_SVC_HANDLER;
+ TAO_SHMIOP_SVC_HANDLER;
+
+/**
+ * @class TAO_SHMIOP_Transport
+ *
+ * @brief Specialization of the base TAO_Transport class to handle the
+ * SHMIOP protocol.
+ *
+ */
class TAO_Strategies_Export TAO_SHMIOP_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 IIOP
- // protocol. This class in turn will be further specialized for
- // the client and server side.
public:
- TAO_SHMIOP_Transport (TAO_ORB_Core *orb_core);
- // Base object's creator method.
- ~TAO_SHMIOP_Transport (void);
- // Default destructor.
+ /// Constructor.
+ TAO_SHMIOP_Transport (TAO_SHMIOP_Connection_Handler *handler,
+ TAO_ORB_Core *orb_core,
+ CORBA::Boolean flag);
- // = The TAO_Transport methods, please check the documentation in
- // "tao/Pluggable.h" for more details.
+ /// Default destructor.
+ ~TAO_SHMIOP_Transport (void);
+ /// Return the connection service handler
+ TAO_SHMIOP_SVC_HANDLER *service_handler (void);
+ /// The TAO_Transport methods, please check the documentation in
+ /// "tao/Pluggable.h" for more details.
virtual ACE_HANDLE handle (void);
+
virtual ACE_Event_Handler *event_handler (void);
+
+ virtual void close_connection (void);
+
+ virtual int idle (void);
+
+ /// Write the complete Message_Block chain to the connection.
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);
+
+
+ /// Write the contents of the buffer of length len to the
+ /// connection.
virtual ssize_t send (const u_char *buf,
size_t len,
const ACE_Time_Value *s = 0);
+
+ /// Read len bytes from into buf.
virtual ssize_t recv (char *buf,
size_t len,
const ACE_Time_Value *s = 0);
+
+ /// Read and process the message from the connection. The processing
+ /// of the message is done by delegating the work to the underlying
+ /// messaging object
+ virtual int read_process_message (ACE_Time_Value *max_time_value = 0,
+ int block =0);
+
+ virtual int register_handler (void);
+
+ /// @@TODO: These methods IMHO should have more meaningful
+ /// names. The names seem to indicate nothing.
virtual int send_request (TAO_Stub *stub,
- TAO_ORB_Core *orb_core ,
+ 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_SHMIOP_SVC_HANDLER *service_handler (void) = 0;
- // Return the underlying the service handler
-};
-class TAO_Strategies_Export TAO_SHMIOP_Client_Transport : public TAO_SHMIOP_Transport
-{
- // = TITLE
- // The Transport class used for Client side communication with a
- // server.
- //
- // = DESCRIPTION
- // Specialization of the TAO_SHMIOP_Transport class for client
- // side. Methods related to sending one and two way requests
- // lives here.
-public:
- TAO_SHMIOP_Client_Transport (TAO_SHMIOP_Client_Connection_Handler *handler,
- TAO_ORB_Core *orb_core);
- // Constructor.
-
- ~TAO_SHMIOP_Client_Transport (void);
- // destructor
-
- // = The TAO_Transport methods, please check the documentation in
- // "tao/Pluggable.h" for more details.
- virtual void close_connection (void);
- virtual int idle (void);
+ virtual int send_message (TAO_OutputCDR &stream,
+ TAO_Stub *stub = 0,
+ int twoway = 1,
+ ACE_Time_Value *max_time_wait = 0);
virtual void start_request (TAO_ORB_Core *orb_core,
- TAO_Target_Specification & /*spec */,
+ TAO_Target_Specification &spec,
TAO_OutputCDR &output,
CORBA::Environment &ACE_TRY_ENV = TAO_default_environment ())
ACE_THROW_SPEC ((CORBA::SystemException));
@@ -130,87 +123,33 @@ public:
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);
virtual CORBA::Boolean
send_request_header (TAO_Operation_Details &opdetails,
TAO_Target_Specification &spec,
TAO_OutputCDR &msg);
- virtual TAO_SHMIOP_SVC_HANDLER *service_handler (void);
-
- int messaging_init (CORBA::Octet major,
- CORBA::Octet minor);
- // Initialising the messaging object
-
- void use_lite (CORBA::Boolean flag);
- // Sets the lite flag
+ /// Initialising the messaging object
+ virtual int messaging_init (CORBA::Octet major,
+ CORBA::Octet minor);
private:
- TAO_SHMIOP_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.
+ /// Process the message that we have read
+ int process_message (void);
- TAO_ORB_Core *orb_core_;
- // Our ORB core
+private:
- CORBA::Boolean lite_flag_;
- // Are we using lite?
+ /// The connection service handler used for accessing lower layer
+ /// communication protocols.
+ TAO_SHMIOP_Connection_Handler *connection_handler_;
- TAO_Pluggable_Reply_Params params_;
- // The reply data that is sent back by the server
+ /// Our messaging object.
+ TAO_Pluggable_Messaging *messaging_object_;
};
-// ****************************************************************
-
-class TAO_Strategies_Export TAO_SHMIOP_Server_Transport : public TAO_SHMIOP_Transport
-{
- // = TITLE
- // The Transport class used for server communication with a
- // connected client.
- //
- // = DESCRIPTION
- // Specialization of the TAO_SHMIOP_Transport class for the server side.
- // methods for reading messages (requests) and sending replies live
- // here.
-public:
-
- TAO_SHMIOP_Server_Transport (TAO_SHMIOP_Server_Connection_Handler *handler,
- TAO_ORB_Core *orb_core);
- // Default creator method.
-
- ~TAO_SHMIOP_Server_Transport (void);
- // Default destructor
-
- TAO_GIOP_Message_State message_state_;
- // This keep the state of the current message, to enable
- // non-blocking reads, fragment reassembly, etc.
- // Please see Pluggable.h for documentation
- virtual void close_connection (void);
- virtual int idle (void);
-
- virtual TAO_SHMIOP_SVC_HANDLER *service_handler (void);
-
-private:
-
- TAO_SHMIOP_Server_Connection_Handler *handler_;
- // the connection service handler used for accessing lower layer
- // communication protocols.
-};
#if defined (__ACE_INLINE__)
#include "SHMIOP_Transport.i"