00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef TAO_AV_TRANSPORT_H
00015 #define TAO_AV_TRANSPORT_H
00016 #include "ace/pre.h"
00017
00018
00019 #include "orbsvcs/AV/FlowSpec_Entry.h"
00020 #include "orbsvcs/AV/AV_Core.h"
00021
00022 #include "orbsvcs/AV/AV_export.h"
00023
00024 #include "ace/Service_Object.h"
00025 #include "ace/Acceptor.h"
00026 #include "ace/SOCK_Acceptor.h"
00027 #include "ace/SOCK_Connector.h"
00028 #include "ace/Connector.h"
00029 #include "ace/Addr.h"
00030 #include "ace/SOCK_Dgram.h"
00031
00032
00033 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00034
00035
00036 class TAO_AV_Core;
00037 class TAO_AV_Transport_Factory;
00038 class TAO_AV_Protocol_Object;
00039 class TAO_AV_Callback;
00040 class TAO_AV_Transport;
00041
00042
00043
00044
00045
00046 class TAO_AV_Export TAO_AV_Transport_Item
00047 {
00048 public:
00049
00050
00051 TAO_AV_Transport_Item (const ACE_CString &name);
00052
00053
00054
00055 const ACE_CString &name (void);
00056
00057
00058 TAO_AV_Transport_Factory *factory (void);
00059
00060
00061 void factory (TAO_AV_Transport_Factory *factory);
00062
00063 private:
00064
00065 ACE_CString name_;
00066
00067
00068 TAO_AV_Transport_Factory *factory_;
00069 };
00070
00071
00072
00073
00074 class TAO_AV_Flow_Protocol_Factory;
00075
00076
00077
00078
00079
00080 class TAO_AV_Export TAO_AV_Flow_Protocol_Item
00081 {
00082 public:
00083
00084
00085 TAO_AV_Flow_Protocol_Item (const ACE_CString &name);
00086
00087
00088
00089 const ACE_CString &name (void);
00090
00091
00092 TAO_AV_Flow_Protocol_Factory *factory (void);
00093
00094
00095 void factory (TAO_AV_Flow_Protocol_Factory *factory);
00096
00097 private:
00098
00099 ACE_CString name_;
00100
00101
00102 TAO_AV_Flow_Protocol_Factory *factory_;
00103 };
00104
00105
00106
00107
00108
00109
00110 class TAO_AV_Export TAO_AV_Flow_Handler
00111 {
00112 public:
00113
00114 TAO_AV_Flow_Handler (void);
00115
00116 virtual ~TAO_AV_Flow_Handler (void);
00117
00118 virtual int start (TAO_FlowSpec_Entry::Role role);
00119 virtual int stop (TAO_FlowSpec_Entry::Role role);
00120
00121
00122 virtual int schedule_timer (void);
00123 virtual int cancel_timer (void);
00124
00125
00126 TAO_AV_Transport *transport (void);
00127
00128
00129 TAO_AV_Protocol_Object* protocol_object (void);
00130 void protocol_object (TAO_AV_Protocol_Object *protocol_object);
00131
00132
00133 void callback (TAO_AV_Callback *callback);
00134
00135
00136 virtual int handle_timeout (const ACE_Time_Value &tv, const void *arg = 0);
00137
00138
00139 virtual int set_remote_address (ACE_Addr *address);
00140
00141
00142 virtual ACE_Event_Handler* event_handler (void) = 0;
00143
00144 virtual int change_qos (AVStreams::QoS);
00145
00146 protected:
00147 TAO_AV_Transport *transport_;
00148 TAO_AV_Callback *callback_;
00149 TAO_AV_Protocol_Object *protocol_object_;
00150 long timer_id_;
00151 ACE_Reactor *reactor_;
00152 void *timeout_arg_;
00153 };
00154
00155
00156
00157
00158
00159
00160
00161
00162 class TAO_AV_Export TAO_AV_Transport
00163 {
00164 public:
00165 TAO_AV_Transport (void);
00166
00167 virtual ~TAO_AV_Transport (void);
00168
00169 virtual int open (ACE_Addr *address) = 0;
00170
00171 virtual int close (void) = 0;
00172
00173
00174 virtual int mtu (void) = 0;
00175 virtual ACE_Addr *get_peer_addr (void) = 0;
00176 virtual ACE_Addr *get_local_addr (void);
00177 virtual ssize_t send (const ACE_Message_Block *mblk,
00178 ACE_Time_Value *s = 0) = 0;
00179
00180
00181 virtual ssize_t send (const char *buf,
00182 size_t len,
00183 ACE_Time_Value *s = 0) = 0;
00184
00185
00186 virtual ssize_t send (const iovec *iov,
00187 int iovcnt,
00188 ACE_Time_Value *s = 0) = 0;
00189
00190
00191 virtual ssize_t recv (char *buf,
00192 size_t len,
00193 ACE_Time_Value *s = 0) = 0;
00194
00195
00196 virtual ssize_t recv (char *buf,
00197 size_t len,
00198 int flags,
00199 ACE_Time_Value *s = 0) = 0;
00200
00201
00202 virtual ssize_t recv (iovec *iov,
00203 int iovcnt,
00204 ACE_Time_Value *s = 0) = 0;
00205
00206 };
00207
00208 class TAO_Base_StreamEndPoint;
00209 class TAO_AV_Core;
00210 class TAO_FlowSpec_Entry;
00211
00212
00213
00214
00215
00216 class TAO_AV_Export TAO_AV_Acceptor
00217 {
00218 public:
00219 TAO_AV_Acceptor (void);
00220 virtual ~TAO_AV_Acceptor (void);
00221 virtual int open (TAO_Base_StreamEndPoint *endpoint,
00222 TAO_AV_Core *av_core,
00223 TAO_FlowSpec_Entry *entry,
00224 TAO_AV_Flow_Protocol_Factory *factory,
00225 TAO_AV_Core::Flow_Component flow_comp) = 0;
00226
00227 virtual int open_default (TAO_Base_StreamEndPoint *endpoint,
00228 TAO_AV_Core *av_core,
00229 TAO_FlowSpec_Entry *entry,
00230 TAO_AV_Flow_Protocol_Factory *factory,
00231 TAO_AV_Core::Flow_Component flow_comp) = 0;
00232
00233 const char *flowname ();
00234 virtual int close (void) = 0;
00235 protected:
00236 ACE_CString flowname_;
00237 TAO_AV_Core *av_core_;
00238 ACE_Addr *address_;
00239 };
00240
00241
00242
00243
00244
00245 class TAO_AV_Export TAO_AV_Connector
00246 {
00247 public:
00248 TAO_AV_Connector (void);
00249 virtual ~TAO_AV_Connector (void);
00250 const char *flowname (void);
00251
00252 virtual int open (TAO_Base_StreamEndPoint *endpoint,
00253 TAO_AV_Core *av_core,
00254 TAO_AV_Flow_Protocol_Factory *factory) = 0;
00255
00256 virtual int connect (TAO_FlowSpec_Entry *entry,
00257 TAO_AV_Transport *&transport,
00258 TAO_AV_Core::Flow_Component flow_component) = 0;
00259
00260 virtual int close (void) = 0;
00261 protected:
00262 ACE_CString flowname_;
00263 };
00264
00265
00266 typedef ACE_Unbounded_Set<TAO_AV_Connector*> TAO_AV_ConnectorSet;
00267 typedef ACE_Unbounded_Set_Iterator<TAO_AV_Connector*> TAO_AV_ConnectorSetItor;
00268
00269
00270
00271
00272
00273 class TAO_AV_Export TAO_AV_Connector_Registry
00274 {
00275 public:
00276
00277
00278
00279
00280
00281
00282 TAO_AV_Connector_Registry (void);
00283 ~TAO_AV_Connector_Registry (void);
00284 int open (TAO_Base_StreamEndPoint *endpoint,
00285 TAO_AV_Core *av_core,
00286 TAO_AV_FlowSpecSet &flow_spec_set);
00287 int close (TAO_AV_Connector *connector);
00288 int close_all (void);
00289 TAO_AV_ConnectorSetItor begin (void);
00290 TAO_AV_ConnectorSetItor end (void);
00291 protected:
00292 TAO_AV_ConnectorSet connectors_;
00293 };
00294
00295 typedef ACE_Unbounded_Set<TAO_AV_Acceptor*> TAO_AV_AcceptorSet;
00296 typedef ACE_Unbounded_Set_Iterator<TAO_AV_Acceptor*> TAO_AV_AcceptorSetItor;
00297
00298
00299
00300
00301
00302 class TAO_AV_Export TAO_AV_Acceptor_Registry
00303 {
00304 public:
00305 TAO_AV_Acceptor_Registry (void);
00306 ~TAO_AV_Acceptor_Registry (void);
00307 int open (TAO_Base_StreamEndPoint *endpoint,
00308 TAO_AV_Core *av_core,
00309 TAO_AV_FlowSpecSet &flow_spec_set);
00310 int close (TAO_AV_Acceptor *acceptor);
00311 int close_all (void);
00312 TAO_AV_AcceptorSetItor begin (void);
00313 TAO_AV_AcceptorSetItor end (void);
00314 protected:
00315 int open_default (TAO_Base_StreamEndPoint *endpoint,
00316 TAO_AV_Core *av_core,
00317 TAO_FlowSpec_Entry *entry);
00318 TAO_AV_AcceptorSet acceptors_;
00319 };
00320
00321
00322
00323
00324
00325 class TAO_AV_Export TAO_AV_Transport_Factory : public ACE_Service_Object
00326 {
00327 public:
00328
00329 TAO_AV_Transport_Factory (void);
00330 virtual ~TAO_AV_Transport_Factory (void);
00331 virtual int init (int argc, char *argv[]);
00332 virtual int match_protocol (const char *protocol_string);
00333 virtual TAO_AV_Acceptor *make_acceptor (void);
00334 virtual TAO_AV_Connector *make_connector (void);
00335 int ref_count;
00336 };
00337
00338 TAO_END_VERSIONED_NAMESPACE_DECL
00339
00340 #if defined (__ACE_INLINE__)
00341 #include "orbsvcs/AV/Transport.inl"
00342 #endif
00343
00344 #include "ace/post.h"
00345 #endif