TAO_RTEvent 4.0.2
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
TAO_ECG_CDR_Message_Receiver Class Reference

Receives UDP and Multicast messages. More...

#include <ECG_CDR_Message_Receiver.h>

Collaboration diagram for TAO_ECG_CDR_Message_Receiver:
Collaboration graph
[legend]

Classes

struct  Mcast_Header
 Helper for decoding, validating and storing mcast header. More...
 
class  Requests
 

Public Member Functions

 TAO_ECG_CDR_Message_Receiver (CORBA::Boolean check_crc)
 Initialization and termination methods.
 
 ~TAO_ECG_CDR_Message_Receiver ()
 
void init (TAO_ECG_Refcounted_Endpoint ignore_from)
 
void shutdown ()
 
int handle_input (ACE_SOCK_Dgram &dgram, TAO_ECG_CDR_Processor *cdr_processor)
 

Static Public Attributes

static TAO_ECG_UDP_Request_Entry Request_Completed_
 

Private Types

enum  { ECG_DEFAULT_MAX_FRAGMENTED_REQUESTS = 1024 , ECG_DEFAULT_FRAGMENTED_REQUESTS_MIN_PURGE_COUNT = 32 }
 
typedef ACE_Hash_Map_Manager< ACE_INET_Addr, Requests *, ACE_Null_MutexRequest_Map
 

Private Member Functions

int mark_received (const ACE_INET_Addr &from, CORBA::ULong request_id)
 
int process_fragment (const ACE_INET_Addr &from, const Mcast_Header &header, char *data_buf, TAO_ECG_CDR_Processor *cdr_processor)
 
Request_Map::ENTRYget_source_entry (const ACE_INET_Addr &from)
 

Private Attributes

TAO_ECG_Refcounted_Endpoint ignore_from_
 Ignore any events coming from this IP address.
 
Request_Map request_map_
 
size_t max_requests_
 Serializes use of <request_map_>.
 
size_t min_purge_count_
 
CORBA::Boolean check_crc_
 Flag to indicate whether CRC should be computed and checked.
 

Detailed Description

Receives UDP and Multicast messages.

Todo
Update class documentation below.
  5)  Make status array size and purge_count configurable.

This class receives UDP and Multicast message fragments, assembles them (described in detail below), and passes complete messages in the form of cdr streams to the calling classes.

This class is used by various Gateway classes (Senders/Receivers) responsible for federating Event Channels with UDP/Mcast.

= REASSEMBLY Fragmentation is described in ECG_CDR_Message_Sender.h Whenever an incomplete fragment is received (one with fragment_count > 1) we allocate an entry for the message in an map indexed by (host,port,request_id). The entry contains the buffer, a bit vector to keep track of the fragments received so far, and a timeout counter. This timeout counter is set to 0 on each (new) fragment arrival, and incremented on a regular basis. If the counter reaches a maximum value the message is dropped. Once all the fragments have been received the message is sent up to the calling classes, and the memory reclaimed.

Member Typedef Documentation

◆ Request_Map

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private
Enumerator
ECG_DEFAULT_MAX_FRAGMENTED_REQUESTS 
ECG_DEFAULT_FRAGMENTED_REQUESTS_MIN_PURGE_COUNT 

Constructor & Destructor Documentation

◆ TAO_ECG_CDR_Message_Receiver()

TAO_ECG_CDR_Message_Receiver::TAO_ECG_CDR_Message_Receiver ( CORBA::Boolean check_crc)

Initialization and termination methods.

◆ ~TAO_ECG_CDR_Message_Receiver()

TAO_ECG_CDR_Message_Receiver::~TAO_ECG_CDR_Message_Receiver ( )

Member Function Documentation

◆ get_source_entry()

TAO_ECG_CDR_Message_Receiver::Request_Map::ENTRY * TAO_ECG_CDR_Message_Receiver::get_source_entry ( const ACE_INET_Addr & from)
private

◆ handle_input()

int TAO_ECG_CDR_Message_Receiver::handle_input ( ACE_SOCK_Dgram & dgram,
TAO_ECG_CDR_Processor * cdr_processor )

Main method: read the data from dgram and either pass ready data to cdr_processor or update the <request_map_> if the request is not yet complete. Returns 1 if data was read successfully and accepted by <cdr_processor> without errors. Returns 0 if there were no errors, but no data has been passed to <cdr_processor>, either due to request being incomplete (not all fragments received), or it being a duplicate. Returns -1 if there were errors.

◆ init()

void TAO_ECG_CDR_Message_Receiver::init ( TAO_ECG_Refcounted_Endpoint ignore_from)
Parameters
ignore_fromEndpoint used to remove events generated by the same process.

◆ mark_received()

int TAO_ECG_CDR_Message_Receiver::mark_received ( const ACE_INET_Addr & from,
CORBA::ULong request_id )
private

Returns 1 on success, 0 if <request_id> has already been received or is below current request range, and -1 on error.

◆ process_fragment()

int TAO_ECG_CDR_Message_Receiver::process_fragment ( const ACE_INET_Addr & from,
const Mcast_Header & header,
char * data_buf,
TAO_ECG_CDR_Processor * cdr_processor )
private

Returns 1 if complete request is received and <event> is populated, 0 if request has only partially been received or is a duplicate, and -1 on error.

◆ shutdown()

void TAO_ECG_CDR_Message_Receiver::shutdown ( )

Member Data Documentation

◆ check_crc_

CORBA::Boolean TAO_ECG_CDR_Message_Receiver::check_crc_
private

Flag to indicate whether CRC should be computed and checked.

◆ ignore_from_

TAO_ECG_Refcounted_Endpoint TAO_ECG_CDR_Message_Receiver::ignore_from_
private

Ignore any events coming from this IP address.

◆ max_requests_

size_t TAO_ECG_CDR_Message_Receiver::max_requests_
private

Serializes use of <request_map_>.

Size of a fragmented requests array, i.e., max number of partially received requests kept at any given time per source.

◆ min_purge_count_

size_t TAO_ECG_CDR_Message_Receiver::min_purge_count_
private

Minimum number of requests purged from a fragmented requests array when the range of requests represented there needs to be shifted.

◆ Request_Completed_

TAO_ECG_UDP_Request_Entry TAO_ECG_CDR_Message_Receiver::Request_Completed_
static

Represents any request that has been fully received and serviced, to simplify the internal logic.

◆ request_map_

Request_Map TAO_ECG_CDR_Message_Receiver::request_map_
private

The map containing all the incoming requests which have been partially received.


The documentation for this class was generated from the following files: