00001
00002
00003
00004
00005
00006
00007
00008
00009
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
00028
00029
00030 class TAO_AV_Export TAO_AV_TCP_Factory : public TAO_AV_Transport_Factory
00031 {
00032 public:
00033
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
00046
00047
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
00069 virtual ssize_t send (const ACE_Message_Block *mblk,
00070 ACE_Time_Value *s = 0);
00071
00072
00073 virtual ssize_t send (const char *buf,
00074 size_t len,
00075 ACE_Time_Value *s = 0);
00076
00077
00078 virtual ssize_t send (const iovec *iov,
00079 int iovcnt,
00080 ACE_Time_Value *s = 0);
00081
00082
00083 virtual ssize_t recv (char *buf,
00084 size_t len,
00085 ACE_Time_Value *s = 0);
00086
00087
00088 virtual ssize_t recv (char *buf,
00089 size_t len,
00090 int flags,
00091 ACE_Time_Value *s = 0);
00092
00093
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
00103
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
00125
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
00143
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
00178
00179
00180 class TAO_AV_TCP_Base_Connector : public ACE_Connector <TAO_AV_TCP_Flow_Handler,ACE_SOCK_CONNECTOR>
00181 {
00182 public:
00183
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
00196
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
00224
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
00233 virtual ~TAO_AV_TCP_Object (void);
00234
00235 virtual int handle_input (void);
00236
00237
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
00249 virtual int destroy (void);
00250
00251 public:
00252
00253 ACE_Message_Block frame_;
00254 };
00255
00256
00257
00258
00259
00260 class TAO_AV_TCP_Flow_Factory : public TAO_AV_Flow_Protocol_Factory
00261 {
00262 public:
00263
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