SSLIOP_Transport.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 //=============================================================================
00004 /**
00005  *  @file   SSLIOP_Transport.h
00006  *
00007  *  $Id: SSLIOP_Transport.h 79151 2007-08-01 09:04:36Z johnnyw $
00008  *
00009  *  SSLIOP Transport specific processing.
00010  *
00011  *  @author Carlos O'Ryan <coryan@ece.uci.edu>
00012  *  @author Ossama Othman <ossama@dre.vanderbilt.edu>
00013  */
00014 //=============================================================================
00015 
00016 
00017 #ifndef TAO_SSLIOP_TRANSPORT_H
00018 #define TAO_SSLIOP_TRANSPORT_H
00019 
00020 #include /**/ "ace/pre.h"
00021 
00022 #include "orbsvcs/SSLIOP/SSLIOP_Export.h"
00023 
00024 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00025 # pragma once
00026 #endif /* ACE_LACKS_PRAGMA_ONCE */
00027 
00028 #include "tao/Transport.h"
00029 #include "tao/operation_details.h"
00030 #include "tao/GIOP_Message_Version.h"
00031 #include "tao/Pluggable_Messaging_Utils.h"
00032 #include "tao/IIOPC.h"
00033 
00034 #include "ace/SSL/SSL_SOCK_Stream.h"
00035 
00036 #include "ace/Svc_Handler.h"
00037 
00038 
00039 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00040 
00041 // Forward decls.
00042 class TAO_ORB_Core;
00043 class TAO_Pluggable_Messaging;
00044 class TAO_Acceptor;
00045 
00046 namespace TAO
00047 {
00048   namespace SSLIOP
00049   {
00050     typedef ACE_Svc_Handler<ACE_SSL_SOCK_STREAM, ACE_NULL_SYNCH> SVC_HANDLER;
00051 
00052     class Handler_Base;
00053     class Connection_Handler;
00054 
00055     /**
00056      * @class Transport
00057      *
00058      * @brief SSLIOP-specific transport implementation.
00059      *
00060      * SSLIOP-specific transport implementation.
00061      */
00062     class TAO_SSLIOP_Export Transport : public TAO_Transport
00063     {
00064     public:
00065 
00066       /// Constructor.
00067       Transport (Connection_Handler *handler,
00068                  TAO_ORB_Core *orb_core);
00069 
00070       /// Default destructor.
00071       ~Transport (void);
00072 
00073       /// Overload of the handle_input () in the TAO_Transport
00074       /// class. This is required to set up the state guard. The
00075       /// thread-per-connection and wait on RW strategies call this
00076       /// handle_input ().
00077       virtual int handle_input (TAO_Resume_Handle &rh,
00078                                 ACE_Time_Value *max_wait_time = 0);
00079 
00080     protected:
00081       /** @name Overridden Template Methods
00082        *
00083        * These are implementations of template methods declared by
00084        * TAO_Transport.
00085        */
00086       //@{
00087       virtual ACE_Event_Handler * event_handler_i (void);
00088       virtual TAO_Connection_Handler *connection_handler_i (void);
00089 
00090       virtual TAO_Pluggable_Messaging *messaging_object (void);
00091 
00092       /// Write the complete Message_Block chain to the connection.
00093       virtual ssize_t send (iovec *iov, int iovcnt,
00094                             size_t &bytes_transferred,
00095                             const ACE_Time_Value *timeout = 0);
00096 
00097       /// Read len bytes from into buf.
00098       virtual ssize_t recv (char *buf,
00099                             size_t len,
00100                             const ACE_Time_Value *s = 0);
00101 
00102     public:
00103       /// @todo These methods IMHO should have more meaningful
00104       ///       names. The names seem to indicate nothing.
00105       virtual int send_request (TAO_Stub *stub,
00106                                 TAO_ORB_Core *orb_core,
00107                                 TAO_OutputCDR &stream,
00108                                 int message_semantics,
00109                                 ACE_Time_Value *max_wait_time);
00110 
00111       virtual int send_message (TAO_OutputCDR &stream,
00112                                 TAO_Stub *stub = 0,
00113                                 int message_semantics =
00114                                   TAO_Transport::TAO_TWOWAY_REQUEST,
00115                                 ACE_Time_Value *max_time_wait = 0);
00116 
00117       virtual int generate_request_header (TAO_Operation_Details &opdetails,
00118                                            TAO_Target_Specification &spec,
00119                                            TAO_OutputCDR &msg);
00120 
00121       /// Initialising the messaging object
00122       virtual int messaging_init (CORBA::Octet major,
00123                                   CORBA::Octet minor);
00124 
00125       /// Open teh service context list and process it.
00126       virtual int tear_listen_point_list (TAO_InputCDR &cdr);
00127       //@}
00128 
00129     private:
00130 
00131       /// Set the Bidirectional context info in the service context
00132       /// list.
00133       void set_bidir_context_info (TAO_Operation_Details &opdetails);
00134 
00135       /// Add the listen points in @a acceptor to the @a
00136       /// listen_point_list if this connection is in the same
00137       /// interface as that of the endpoints in the @a acceptor.
00138       int get_listen_point (IIOP::ListenPointList &listen_point_list,
00139                             TAO_Acceptor *acceptor);
00140 
00141     private:
00142 
00143       /// The connection service handler used for accessing lower layer
00144       /// communication protocols.
00145       Connection_Handler *connection_handler_;
00146 
00147       /// Our messaging object.
00148       TAO_Pluggable_Messaging *messaging_object_;
00149     };
00150 
00151   }  // End SSLIOP namespace.
00152 }  // End TAO namespace.
00153 
00154 TAO_END_VERSIONED_NAMESPACE_DECL
00155 
00156 #include /**/ "ace/post.h"
00157 #endif  /* TAO_SSLIOP_TRANSPORT_H */

Generated on Sun Jan 27 16:12:24 2008 for TAO_SSLIOP by doxygen 1.3.6