#include <EC_Gateway_UDP.h>
Inheritance diagram for TAO_ECG_UDP_Sender
Public Types | |
enum | { ECG_HEADER_SIZE = 32, ECG_MIN_MTU = 32 + 8, ECG_MAX_MTU = 65536, ECG_DEFAULT_MTU = 1024 } |
Public Methods | |
TAO_ECG_UDP_Sender (void) | |
int | get_local_addr (ACE_INET_Addr& addr) |
Get the local endpoint used to send the events. | |
void | init (RtecEventChannelAdmin::EventChannel_ptr lcl_ec, RtecUDPAdmin::AddrServer_ptr addr_server, TAO_ECG_UDP_Out_Endpoint *endpoint, CORBA::Environment &env = TAO_default_environment ()) |
int | mtu (CORBA::ULong mtu) |
CORBA::ULong | mtu (void) const |
void | shutdown (CORBA::Environment & = TAO_default_environment ()) |
Disconnect and shutdown the sender, no further connections will work unless init() is called again. | |
void | open (RtecEventChannelAdmin::ConsumerQOS &sub, CORBA::Environment &env = TAO_default_environment ()) |
Connect (or reconnect) to the EC with the given subscriptions. | |
void | close (CORBA::Environment &env = TAO_default_environment ()) |
Disconnect from the EC, but reconnection is still possible. | |
virtual void | disconnect_push_consumer (CORBA::Environment & = TAO_default_environment ()) throw (CORBA::SystemException) |
The PushConsumer methods. | |
virtual void | push (const RtecEventComm::EventSet &events, CORBA::Environment & = TAO_default_environment ()) throw (CORBA::SystemException) |
Private Methods | |
ACE_SOCK_Dgram& | dgram (void) |
Return the datagram... | |
void | send_fragment (const RtecUDPAdmin::UDP_Addr& udp_addr, CORBA::ULong request_id, CORBA::ULong request_size, CORBA::ULong fragment_size, CORBA::ULong fragment_offset, CORBA::ULong fragment_id, CORBA::ULong fragment_count, iovec iov[], int iovcnt, CORBA::Environment &env = TAO_default_environment ()) |
CORBA::ULong | compute_fragment_count (const ACE_Message_Block* begin, const ACE_Message_Block* end, int iov_size, CORBA::ULong max_fragment_payload, CORBA::ULong& total_length) |
Private Attributes | |
RtecEventChannelAdmin::EventChannel_var | lcl_ec_ |
The remote and the local EC, so we can reconnect when the subscription list changes. | |
RtecEventChannelAdmin::ProxyPushSupplier_var | supplier_proxy_ |
We talk to the EC (as a consumer) using this proxy. | |
RtecUDPAdmin::AddrServer_var | addr_server_ |
We query this object to determine where are the events sent. | |
TAO_ECG_UDP_Out_Endpoint* | endpoint_ |
The datagram used to sendto(), this object is *not* owned by the UDP_Sender. | |
CORBA::ULong | mtu_ |
The MTU for this sender... |
This class connect as a consumer to an EventChannel and it sends the events using UDP, the UDP address can be a normal IP address or it can be a multicast group. The UDP address is obtained from a RtecUDPAdmin::AddrServer class. It marshalls the events using TAO CDR classes.
//
// Ensures the header ends at an 8-byte boundary. }; // size (in CDR stream) = 32
|
|
|
|
|
Disconnect from the EC, but reconnection is still possible.
|
|
Count the number of fragments that will be required to send the message blocks in the range [begin,end) The maximum fragment payload (i.e. the size without the header is also required); <total_length> returns the total message size. |
|
Return the datagram...
|
|
The PushConsumer methods.
|
|
Get the local endpoint used to send the events.
|
|
To do its job this class requires to know the local EC it will connect to; it also requires to build an RT_Info for the local scheduler. It only keeps a copy of its SupplierProxy, used for later connection and disconnections.
|
|
|
|
The sender may need to fragment the message, otherwise the network may drop the packets. Setting the MTU can fail if the value is too small (at least the header + 8 bytes must fit). |
|
Connect (or reconnect) to the EC with the given subscriptions.
|
|
|
|
Send one fragment, the first entry in the iovec is used to send the header, the rest of the iovec array should contain pointers to the actual data. |
|
Disconnect and shutdown the sender, no further connections will work unless init() is called again.
|
|
We query this object to determine where are the events sent.
|
|
The datagram used to sendto(), this object is *not* owned by the UDP_Sender.
|
|
The remote and the local EC, so we can reconnect when the subscription list changes.
|
|
The MTU for this sender...
|
|
We talk to the EC (as a consumer) using this proxy.
|