TAO_RTEvent  2.2.7
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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

Classes

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

Public Member Functions

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

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_Mutex
Request_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. More...
 
Request_Map request_map_
 
size_t max_requests_
 Serializes use of <request_map_>. More...
 
size_t min_purge_count_
 
CORBA::Boolean check_crc_
 Flag to indicate whether CRC should be computed and checked. More...
 

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

Member Enumeration Documentation

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 ( CORBA::Boolean  check_crc)

Initialization and termination methods.

TAO_ECG_CDR_Message_Receiver::~TAO_ECG_CDR_Message_Receiver ( void  )

Initialization and termination methods.

Member Function Documentation

TAO_ECG_CDR_Message_Receiver::Request_Map::ENTRY * TAO_ECG_CDR_Message_Receiver::get_source_entry ( const ACE_INET_Addr from)
private
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.

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.
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.

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.

void TAO_ECG_CDR_Message_Receiver::shutdown ( void  )

Initialization and termination methods.

Member Data Documentation

CORBA::Boolean TAO_ECG_CDR_Message_Receiver::check_crc_
private

Flag to indicate whether CRC should be computed and checked.

TAO_ECG_Refcounted_Endpoint TAO_ECG_CDR_Message_Receiver::ignore_from_
private

Ignore any events coming from this IP address.

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.

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.

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 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: