SCIOP_Transport.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 // $Id: SCIOP_Transport.h 78931 2007-07-18 09:59:36Z johnnyw $
00004 // ===================================================================
00005 /**
00006  *  @file   SCIOP_Transport.h
00007  *
00008  *  @author  Jason Cohen, Lockheed Martin ATL  <jcohen@atl.lmco.com>
00009  *  @author  Keith O'Hara, Lockheed Martin ATL
00010  */
00011 // ===================================================================
00012 
00013 #ifndef TAO_SCIOP_TRANSPORT_H
00014 #define TAO_SCIOP_TRANSPORT_H
00015 #include /**/ "ace/pre.h"
00016 
00017 #include "tao/orbconf.h"
00018 
00019 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00020 # pragma once
00021 #endif /* ACE_LACKS_PRAGMA_ONCE */
00022 
00023 #if TAO_HAS_SCIOP == 1
00024 
00025 #include "tao/Strategies/strategies_export.h"
00026 #include "tao/Transport.h"
00027 #include "tao/IIOPC.h"
00028 #include "ace/SOCK_SEQPACK_Association.h"
00029 
00030 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00031 
00032 // Forward decls.
00033 class TAO_SCIOP_Connection_Handler;
00034 class TAO_ORB_Core;
00035 class TAO_Operation_Details;
00036 class TAO_Pluggable_Messaging;
00037 class TAO_Acceptor;
00038 
00039 /**
00040  * @class TAO_SCIOP_Transport
00041  *
00042  * @brief Specialization of the base TAO_Transport class to handle the
00043  *  SCIOP protocol.
00044  *
00045  * Specialization of the base TAO_Transport class to handle the SCIOP
00046  * protocol.
00047  */
00048 class TAO_Strategies_Export TAO_SCIOP_Transport : public TAO_Transport
00049 {
00050 public:
00051 
00052   /// Constructor.
00053   TAO_SCIOP_Transport (TAO_SCIOP_Connection_Handler *handler,
00054                        TAO_ORB_Core *orb_core);
00055 
00056 protected:
00057 
00058   /// Destructor
00059   /**
00060    * Protected destructor to enforce proper memory management through
00061    * the reference counting mechanism.
00062    */
00063   virtual ~TAO_SCIOP_Transport (void);
00064 
00065   /** @name Overridden Template Methods
00066    *
00067    * Please check the documentation in "tao/Transport.h" for more
00068    * details.
00069    */
00070   //@{
00071 
00072   virtual ACE_Event_Handler * event_handler_i (void);
00073 
00074   /// Access the underlying messaging object
00075   virtual TAO_Pluggable_Messaging *messaging_object (void);
00076 
00077   virtual ssize_t send (iovec *iov, int iovcnt,
00078                         size_t &bytes_transferred,
00079                         const ACE_Time_Value *timeout = 0);
00080 
00081   virtual ssize_t recv (char *buf,
00082                         size_t len,
00083                         const ACE_Time_Value *s = 0);
00084 
00085   virtual int send_message_shared (TAO_Stub *stub,
00086                                    int message_semantics,
00087                                    const ACE_Message_Block *message_block,
00088                                    ACE_Time_Value *max_wait_time);
00089 
00090 
00091 public:
00092   /// @todo These methods IMHO should have more meaningful
00093   /// names. The names seem to indicate nothing.
00094   virtual int send_request (TAO_Stub *stub,
00095                             TAO_ORB_Core *orb_core,
00096                             TAO_OutputCDR &association,
00097                             int message_semantics,
00098                             ACE_Time_Value *max_wait_time);
00099 
00100   virtual int send_message (TAO_OutputCDR &association,
00101                             TAO_Stub *stub = 0,
00102                             int message_semantics = TAO_Transport::TAO_TWOWAY_REQUEST,
00103                             ACE_Time_Value *max_time_wait = 0);
00104 
00105   /*virtual int send_reply (TAO_OutputCDR &stream,
00106                           TAO_Adapter *poa = 0);*/
00107 
00108   virtual int generate_request_header (TAO_Operation_Details &opdetails,
00109                                        TAO_Target_Specification &spec,
00110                                        TAO_OutputCDR &msg);
00111 
00112   virtual int messaging_init (CORBA::Octet major,
00113                               CORBA::Octet minor);
00114 
00115   virtual int tear_listen_point_list (TAO_InputCDR &cdr);
00116 
00117   virtual TAO_Connection_Handler * connection_handler_i (void);
00118 
00119   //@}
00120 
00121 private:
00122 
00123   /// Set the Bidirectional context info in the service context list
00124   void set_bidir_context_info (TAO_Operation_Details &opdetails);
00125 
00126   /// Add the listen points in <acceptor> to the <listen_point_list>
00127   /// if this connection is in the same interface as that of the
00128   /// endpoints in the <acceptor>
00129   int get_listen_point (IIOP::ListenPointList &listen_point_list,
00130                         TAO_Acceptor *acceptor);
00131 private:
00132 
00133   /// The connection service handler used for accessing lower layer
00134   /// communication protocols.
00135   TAO_SCIOP_Connection_Handler *connection_handler_;
00136 
00137   /// Our messaging object.
00138   TAO_Pluggable_Messaging *messaging_object_;
00139 };
00140 
00141 TAO_END_VERSIONED_NAMESPACE_DECL
00142 
00143 #endif /* TAO_HAS_SCIOP == 1 */
00144 
00145 #include /**/ "ace/post.h"
00146 
00147 #endif  /* TAO_SCIOP_TRANSPORT_H */

Generated on Sun Jan 27 15:59:49 2008 for TAO_Strategies by doxygen 1.3.6