00001 // -*- C++ -*- 00002 00003 // =================================================================== 00004 /** 00005 * @file DIOP_Connection_Handler.h 00006 * 00007 * DIOP_Connection_Handler.h,v 1.21 2006/04/19 11:38:50 jwillemsen Exp 00008 * 00009 * @author Michael Kircher 00010 */ 00011 // =================================================================== 00012 00013 #ifndef TAO_DIOP_CONNECTION_HANDLER_H 00014 #define TAO_DIOP_CONNECTION_HANDLER_H 00015 00016 #include /**/ "ace/pre.h" 00017 00018 #include "tao/orbconf.h" 00019 00020 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00021 #pragma once 00022 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00023 00024 #if defined (TAO_HAS_DIOP) && (TAO_HAS_DIOP != 0) 00025 00026 #include "tao/Strategies/strategies_export.h" 00027 #include "tao/Wait_Strategy.h" 00028 #include "tao/Connection_Handler.h" 00029 #include "tao/Strategies/DIOP_Transport.h" 00030 #include "ace/SOCK_Dgram.h" 00031 #include "ace/Reactor.h" 00032 #include "ace/Acceptor.h" 00033 00034 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00035 00036 // Forward Decls 00037 class TAO_Pluggable_Messaging; 00038 00039 // **************************************************************** 00040 00041 /** 00042 * @class TAO_DIOP_Connection_Handler 00043 * 00044 * @brief Handles requests on a single connection. 00045 * 00046 * The Connection handler which is common for the Acceptor and 00047 * the Connector 00048 */ 00049 class TAO_Strategies_Export TAO_DIOP_Connection_Handler 00050 : public TAO_DIOP_SVC_HANDLER 00051 , public TAO_Connection_Handler 00052 { 00053 00054 public: 00055 00056 TAO_DIOP_Connection_Handler (ACE_Thread_Manager* t = 0); 00057 00058 /// Constructor. 00059 TAO_DIOP_Connection_Handler (TAO_ORB_Core *orb_core, 00060 CORBA::Boolean flag); 00061 00062 /// Destructor. 00063 ~TAO_DIOP_Connection_Handler (void); 00064 00065 /// Called by the <Strategy_Acceptor> when the handler is completely 00066 /// connected. Argument is unused. 00067 virtual int open (void *); 00068 00069 // @@ Frank: Similar to open, but called on server 00070 virtual int open_server (void); 00071 00072 //@{ 00073 /** 00074 * Connection_Handler overloads 00075 */ 00076 virtual int open_handler (void *); 00077 //@} 00078 00079 /// Close called by the Acceptor or Connector when connection 00080 /// establishment fails. 00081 int close (u_long = 0); 00082 00083 //@{ 00084 /** @name Event Handler overloads 00085 */ 00086 virtual int resume_handler (void); 00087 virtual int close_connection (void); 00088 virtual int handle_input (ACE_HANDLE); 00089 virtual int handle_output (ACE_HANDLE); 00090 virtual int handle_close (ACE_HANDLE, ACE_Reactor_Mask); 00091 virtual int handle_timeout (const ACE_Time_Value ¤t_time, 00092 const void *act = 0); 00093 //@} 00094 00095 /// Add ourselves to Cache. 00096 int add_transport_to_cache (void); 00097 00098 // @@ Frank: Not needed 00099 /* 00100 /// Process the <listen_list> 00101 int process_listen_point_list (DIOP::ListenPointList &listen_list); 00102 */ 00103 00104 // DIOP Additions - Begin 00105 /** 00106 * @name The DIOP Additions 00107 * 00108 */ 00109 //@{ 00110 ACE_HANDLE get_handle (void) const; 00111 00112 const ACE_INET_Addr &addr (void); 00113 00114 void addr (const ACE_INET_Addr &addr); 00115 00116 const ACE_INET_Addr &local_addr (void); 00117 00118 void local_addr (const ACE_INET_Addr &addr); 00119 00120 const ACE_INET_Addr &server_addr (void); 00121 00122 void server_addr (const ACE_INET_Addr &addr); 00123 00124 const ACE_SOCK_Dgram &dgram (void); 00125 //@} 00126 // DIOP Additions - End 00127 00128 /// Set Diff-Serv codepoint on outgoing packets. 00129 int set_dscp_codepoint (CORBA::Boolean set_network_priority); 00130 00131 protected: 00132 00133 //@{ 00134 /** 00135 * @name TAO_Connection Handler overloads 00136 */ 00137 virtual int release_os_resources (void); 00138 //@} 00139 00140 // DIOP Additions - Begin 00141 /** 00142 * @name The DIOP Additions 00143 * 00144 */ 00145 //@{ 00146 ACE_SOCK_Dgram udp_socket_; 00147 00148 /// This is always the remote address 00149 ACE_INET_Addr addr_; 00150 00151 /// This is always the local address for the connector 00152 ACE_INET_Addr local_addr_; 00153 //@} 00154 // DIOP Additions - End 00155 00156 private: 00157 /// Stores the type of service value. 00158 int dscp_codepoint_; 00159 }; 00160 00161 TAO_END_VERSIONED_NAMESPACE_DECL 00162 00163 #endif /* TAO_HAS_DIOP && TAO_HAS_DIOP != 0 */ 00164 00165 #include /**/ "ace/post.h" 00166 00167 #endif /* TAO_DIOP_CONNECTION_HANDLER_H */