TCP.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 
00003 //=============================================================================
00004 /**
00005  *  @file   TCP.h
00006  *
00007  *  $Id: TCP.h 71526 2006-03-14 06:14:35Z jtc $
00008  *
00009  *  @author Nagarajan Surendran <naga@cs.wustl.edu>
00010  */
00011 //=============================================================================
00012 
00013 
00014 #ifndef TAO_AV_TCP_H
00015 #define TAO_AV_TCP_H
00016 #include /**/ "ace/pre.h"
00017 
00018 #include "orbsvcs/AV/Protocol_Factory.h"
00019 #include "orbsvcs/AV/FlowSpec_Entry.h"
00020 
00021 #include "ace/Service_Config.h"
00022 #include "ace/Svc_Handler.h"
00023 
00024 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00025 
00026 /**
00027  * @class TAO_AV_TCP_Factory
00028  * @brief
00029  */
00030 class TAO_AV_Export TAO_AV_TCP_Factory : public TAO_AV_Transport_Factory
00031 {
00032 public:
00033   /// Initialization hook.
00034   TAO_AV_TCP_Factory (void);
00035   virtual ~TAO_AV_TCP_Factory (void);
00036   virtual int init (int argc, char *argv[]);
00037   virtual int match_protocol (const char *protocol_string);
00038   virtual TAO_AV_Acceptor *make_acceptor (void);
00039   virtual TAO_AV_Connector *make_connector (void);
00040 };
00041 
00042 class TAO_AV_TCP_Flow_Handler;
00043 
00044 /**
00045  * @class TAO_AV_TCP_Transport
00046  * @brief A transport abstraction for socket streams.
00047  *        Uses the ACE_SOCK_Stream to send the data.
00048  */
00049 class TAO_AV_TCP_Transport
00050   : public TAO_AV_Transport
00051 {
00052 
00053 public:
00054   TAO_AV_TCP_Transport (void);
00055 
00056   TAO_AV_TCP_Transport (TAO_AV_TCP_Flow_Handler *handler);
00057 
00058   virtual ~TAO_AV_TCP_Transport (void);
00059 
00060   virtual int open (ACE_Addr *address);
00061 
00062   virtual int close (void);
00063 
00064   virtual int mtu (void);
00065 
00066   virtual ACE_Addr *get_peer_addr (void);
00067 
00068   /// Write the complete Message_Block chain to the connection.
00069   virtual ssize_t send (const ACE_Message_Block *mblk,
00070                         ACE_Time_Value *s = 0);
00071 
00072   /// Write the contents of the buffer of length len to the connection.
00073   virtual ssize_t send (const char *buf,
00074                         size_t len,
00075                         ACE_Time_Value *s = 0);
00076 
00077   /// Write the contents of iovcnt iovec's to the connection.
00078   virtual ssize_t send (const iovec *iov,
00079                         int iovcnt,
00080                         ACE_Time_Value *s = 0);
00081 
00082   /// Read len bytes from into buf.
00083   virtual ssize_t recv (char *buf,
00084                         size_t len,
00085                         ACE_Time_Value *s = 0);
00086 
00087   /// Read len bytes from into buf using flags.
00088   virtual ssize_t recv (char *buf,
00089                         size_t len,
00090                         int flags,
00091                         ACE_Time_Value *s = 0);
00092 
00093   ///  Read received data into the iovec buffers.
00094   virtual ssize_t recv (iovec *iov,
00095                         int iovcnt,
00096                         ACE_Time_Value *s = 0);
00097 protected:
00098   TAO_AV_TCP_Flow_Handler *handler_;
00099 };
00100 
00101 /**
00102  * @class TAO_AV_TCP_Flow_Handler
00103  * @brief
00104  */
00105 class TAO_AV_TCP_Flow_Handler
00106   :public virtual TAO_AV_Flow_Handler,
00107    public virtual ACE_Svc_Handler <ACE_SOCK_STREAM, ACE_NULL_SYNCH>
00108 {
00109 public:
00110   TAO_AV_TCP_Flow_Handler (TAO_AV_Callback *callback = 0);
00111   virtual ~TAO_AV_TCP_Flow_Handler (void);
00112   virtual TAO_AV_Transport *transport (void);
00113   virtual int open (void * = 0);
00114   virtual int handle_input (ACE_HANDLE fd);
00115   virtual int handle_timeout (const ACE_Time_Value &tv, const void *arg = 0);
00116   virtual ACE_Event_Handler* event_handler (void){ return this; }
00117 protected:
00118   TAO_AV_Core *av_core_;
00119 };
00120 
00121 class TAO_AV_TCP_Acceptor;
00122 
00123 /**
00124  * @class TAO_AV_TCP_Base_Acceptor
00125  * @brief
00126  */
00127 class TAO_AV_TCP_Base_Acceptor : public ACE_Acceptor <TAO_AV_TCP_Flow_Handler,ACE_SOCK_ACCEPTOR>
00128 {
00129 public:
00130   virtual int acceptor_open (TAO_AV_TCP_Acceptor *acceptor,
00131                     ACE_Reactor *reactor,
00132                     const ACE_INET_Addr &local_addr,
00133                     TAO_FlowSpec_Entry *entry);
00134   virtual int make_svc_handler (TAO_AV_TCP_Flow_Handler *& handler);
00135 protected:
00136   TAO_AV_TCP_Acceptor *acceptor_;
00137   ACE_Reactor *reactor_;
00138   TAO_FlowSpec_Entry *entry_;
00139 };
00140 
00141 /**
00142  * @class TAO_AV_TCP_Acceptor
00143  * @brief
00144  */
00145 class TAO_AV_TCP_Acceptor : public TAO_AV_Acceptor
00146 {
00147 public:
00148   TAO_AV_TCP_Acceptor (void);
00149   virtual ~TAO_AV_TCP_Acceptor (void);
00150 
00151   virtual int open (TAO_Base_StreamEndPoint *endpoint,
00152                     TAO_AV_Core *av_core,
00153                     TAO_FlowSpec_Entry *entry,
00154                     TAO_AV_Flow_Protocol_Factory *factory,
00155                     TAO_AV_Core::Flow_Component flow_component =
00156                         TAO_AV_Core::TAO_AV_DATA);
00157 
00158   virtual int open_default (TAO_Base_StreamEndPoint *endpoint,
00159                             TAO_AV_Core *av_core,
00160                             TAO_FlowSpec_Entry *entry,
00161                             TAO_AV_Flow_Protocol_Factory *factory,
00162                             TAO_AV_Core::Flow_Component flow_component =
00163                                 TAO_AV_Core::TAO_AV_DATA);
00164 
00165   virtual int close (void);
00166   virtual int make_svc_handler (TAO_AV_TCP_Flow_Handler *&handler);
00167 protected:
00168   TAO_AV_TCP_Base_Acceptor acceptor_;
00169   TAO_FlowSpec_Entry *entry_;
00170   TAO_Base_StreamEndPoint *endpoint_;
00171   TAO_AV_Flow_Protocol_Factory *flow_protocol_factory_;
00172 };
00173 
00174 class TAO_AV_TCP_Connector;
00175 
00176 /**
00177  * @class TAO_AV_Base_Connector
00178  * @brief
00179  */
00180 class TAO_AV_TCP_Base_Connector : public ACE_Connector <TAO_AV_TCP_Flow_Handler,ACE_SOCK_CONNECTOR>
00181 {
00182 public:
00183   // To avoid warnings of open and connect hiding the base class functions these have to renamed.
00184   int connector_open (TAO_AV_TCP_Connector *connector,
00185                       ACE_Reactor *reactor);
00186   int connector_connect (TAO_AV_TCP_Flow_Handler *&handler,
00187                          const ACE_INET_Addr &remote_addr);
00188   virtual int make_svc_handler (TAO_AV_TCP_Flow_Handler *& handler);
00189 protected:
00190   TAO_AV_TCP_Connector *connector_;
00191   ACE_Reactor *reactor_;
00192 };
00193 
00194 /**
00195  * @class TAO_AV_TCP_Connector
00196  * @brief
00197  */
00198 class TAO_AV_TCP_Connector : public TAO_AV_Connector
00199 {
00200 public:
00201   TAO_AV_TCP_Connector (void);
00202   virtual ~TAO_AV_TCP_Connector (void);
00203 
00204   virtual int open (TAO_Base_StreamEndPoint *endpoint,
00205                     TAO_AV_Core *av_core,
00206                     TAO_AV_Flow_Protocol_Factory *factory);
00207 
00208   virtual int connect (TAO_FlowSpec_Entry *entry,
00209                        TAO_AV_Transport *&transport,
00210                        TAO_AV_Core::Flow_Component flow_comp =
00211                            TAO_AV_Core::TAO_AV_DATA);
00212   virtual int close (void);
00213   virtual int make_svc_handler (TAO_AV_TCP_Flow_Handler *&handler);
00214 protected:
00215   TAO_AV_Core *av_core_;
00216   TAO_AV_TCP_Base_Connector connector_;
00217   TAO_Base_StreamEndPoint *endpoint_;
00218   TAO_FlowSpec_Entry *entry_;
00219   TAO_AV_Flow_Protocol_Factory *flow_protocol_factory_;
00220 };
00221 
00222 /**
00223  * @class TAO_AV_TCP_Object
00224  * @brief TAO_AV_Protocol_Object for Transmission Control Protocol (TCP)
00225  */
00226 class TAO_AV_Export TAO_AV_TCP_Object : public TAO_AV_Protocol_Object
00227 {
00228 public:
00229   TAO_AV_TCP_Object (TAO_AV_Callback *callback,
00230                      TAO_AV_Transport *transport = 0);
00231 
00232   /// Dtor
00233   virtual ~TAO_AV_TCP_Object (void);
00234 
00235   virtual int handle_input (void);
00236 
00237   /// send a data frame.
00238   virtual int send_frame (ACE_Message_Block *frame,
00239                           TAO_AV_frame_info *frame_info = 0);
00240 
00241   virtual int send_frame (const iovec *iov,
00242                           int iovcnt,
00243                           TAO_AV_frame_info *frame_info = 0);
00244 
00245   virtual int send_frame (const char*buf,
00246                           size_t len);
00247 
00248   /// end the stream.
00249   virtual int destroy (void);
00250 
00251 public:
00252   /// Pre-allocated memory to receive the data...
00253   ACE_Message_Block frame_;
00254 };
00255 
00256 /**
00257  * @class TAO_AV_TCP_Flow_Factory
00258  * @brief
00259  */
00260 class TAO_AV_TCP_Flow_Factory : public TAO_AV_Flow_Protocol_Factory
00261 {
00262 public:
00263   /// Initialization hook.
00264   TAO_AV_TCP_Flow_Factory (void);
00265   virtual ~TAO_AV_TCP_Flow_Factory (void);
00266   virtual int init (int argc, char *argv[]);
00267   virtual int match_protocol (const char *flow_string);
00268   TAO_AV_Protocol_Object* make_protocol_object (TAO_FlowSpec_Entry *entry,
00269                                                 TAO_Base_StreamEndPoint *endpoint,
00270                                                 TAO_AV_Flow_Handler *handler,
00271                                                 TAO_AV_Transport *transport);
00272 };
00273 
00274 TAO_END_VERSIONED_NAMESPACE_DECL
00275 
00276 ACE_STATIC_SVC_DECLARE (TAO_AV_TCP_Flow_Factory)
00277 ACE_FACTORY_DECLARE (TAO_AV, TAO_AV_TCP_Flow_Factory)
00278 
00279 ACE_STATIC_SVC_DECLARE (TAO_AV_TCP_Factory)
00280 ACE_FACTORY_DECLARE (TAO_AV, TAO_AV_TCP_Factory)
00281 
00282 #include /**/ "ace/post.h"
00283 #endif /* TAO_AV_TCP_H */

Generated on Tue Feb 2 17:47:49 2010 for TAO_AV by  doxygen 1.4.7