OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Protected Member Functions | Private Attributes | List of all members
OpenDDS::DCPS::MulticastReceiveStrategy Class Reference

#include <MulticastReceiveStrategy.h>

Inheritance diagram for OpenDDS::DCPS::MulticastReceiveStrategy:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::MulticastReceiveStrategy:
Collaboration graph
[legend]

Public Member Functions

 MulticastReceiveStrategy (MulticastDataLink *link)
 
virtual ACE_HANDLE get_handle () const
 
virtual int handle_input (ACE_HANDLE fd)
 
- Public Member Functions inherited from OpenDDS::DCPS::TransportReceiveStrategy<>
virtual ~TransportReceiveStrategy ()
 
int start ()
 
void stop ()
 
int handle_dds_input (ACE_HANDLE fd)
 
virtual void relink (bool do_suspend=true)
 
const TransportHeaderreceived_header () const
 
TransportHeaderreceived_header ()
 
const DataSampleHeaderreceived_sample_header () const
 
DataSampleHeaderreceived_sample_header ()
 
ACE_Message_Blockto_msgblock (const ReceivedDataSample &sample)
 
- Public Member Functions inherited from OpenDDS::DCPS::TransportStrategy
virtual ~TransportStrategy ()
 
- Public Member Functions inherited from OpenDDS::DCPS::RcObject
virtual ~RcObject ()
 
virtual void _add_ref ()
 
virtual void _remove_ref ()
 
long ref_count () const
 
WeakObject_get_weak_object () const
 
- Public Member Functions inherited from OpenDDS::DCPS::RcEventHandler
 RcEventHandler ()
 
ACE_Event_Handler::Reference_Count add_reference ()
 
ACE_Event_Handler::Reference_Count remove_reference ()
 
- Public Member Functions inherited from ACE_Event_Handler
virtual ~ACE_Event_Handler (void)
 
virtual void set_handle (ACE_HANDLE)
 
virtual int priority (void) const
 
virtual void priority (int priority)
 
virtual int handle_output (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_exception (ACE_HANDLE fd=ACE_INVALID_HANDLE)
 
virtual int handle_timeout (const ACE_Time_Value &current_time, const void *act=0)
 
virtual int handle_exit (ACE_Process *)
 
virtual int handle_close (ACE_HANDLE handle, ACE_Reactor_Mask close_mask)
 
virtual int handle_signal (int signum, siginfo_t *=0, ucontext_t *=0)
 
virtual int resume_handler (void)
 
virtual int handle_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual int handle_group_qos (ACE_HANDLE=ACE_INVALID_HANDLE)
 
virtual void reactor (ACE_Reactor *reactor)
 
virtual ACE_Reactorreactor (void) const
 
virtual ACE_Reactor_Timer_Interfacereactor_timer_interface (void) const
 
Reference_Counting_Policyreference_counting_policy (void)
 

Protected Member Functions

virtual ssize_t receive_bytes (iovec iov[], int n, ACE_INET_Addr &remote_address, ACE_HANDLE fd, bool &stop)
 Only our subclass knows how to do this. More...
 
virtual bool check_header (const TransportHeader &header)
 Check the transport header for suitability. More...
 
virtual bool check_header (const DataSampleHeader &header)
 Check the data sample header for suitability. More...
 
virtual void deliver_sample (ReceivedDataSample &sample, const ACE_INET_Addr &remote_address)
 Called when there is a ReceivedDataSample to be delivered. More...
 
virtual int start_i ()
 Let the subclass start. More...
 
virtual void stop_i ()
 Let the subclass stop. More...
 
virtual bool reassemble (ReceivedDataSample &data)
 
- Protected Member Functions inherited from OpenDDS::DCPS::TransportReceiveStrategy<>
 TransportReceiveStrategy (const TransportInst_rch &config, size_t receive_buffers_count=RECEIVE_BUFFERS)
 
virtual void begin_transport_header_processing ()
 Begin Current Transport Header Processing. More...
 
virtual void end_transport_header_processing ()
 End Current Transport Header Processing. More...
 
virtual void finish_message ()
 
int skip_bad_pdus ()
 Ignore bad PDUs by skipping over them. More...
 
void reset ()
 
size_t pdu_remaining () const
 
size_t successor_index (size_t index) const
 Manage an index into the receive buffer array. More...
 
void update_buffer_index (bool &done)
 
 OPENDDS_VECTOR (ACE_Message_Block *) receive_buffers_
 Set of receive buffers in use. More...
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Protected Member Functions inherited from ACE_Event_Handler
 ACE_Event_Handler (ACE_Reactor *=0, int priority=ACE_Event_Handler::LO_PRIORITY)
 

Private Attributes

MulticastDataLinklink_
 

Additional Inherited Members

- Public Types inherited from ACE_Event_Handler
typedef long Reference_Count
 
- Static Public Member Functions inherited from ACE_Event_Handler
static ACE_THR_FUNC_RETURN read_adapter (void *event_handler)
 
static int register_stdin_handler (ACE_Event_Handler *eh, ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr, int flags=THR_DETACHED)
 
static int remove_stdin_handler (ACE_Reactor *reactor, ACE_Thread_Manager *thr_mgr)
 
- Public Attributes inherited from ACE_Event_Handler
 LO_PRIORITY
 
 HI_PRIORITY
 
 NULL_MASK
 
 READ_MASK
 
 WRITE_MASK
 
 EXCEPT_MASK
 
 ACCEPT_MASK
 
 CONNECT_MASK
 
 TIMER_MASK
 
 QOS_MASK
 
 GROUP_QOS_MASK
 
 SIGNAL_MASK
 
 ALL_EVENTS_MASK
 
 RWE_MASK
 
 DONT_CALL
 
 ACE_EVENT_HANDLER_NOT_RESUMED
 
 ACE_REACTOR_RESUMES_HANDLER
 
 ACE_APPLICATION_RESUMES_HANDLER
 
- Static Public Attributes inherited from OpenDDS::DCPS::TransportReceiveConstants
static const size_t RECEIVE_BUFFERS = DEFAULT_TRANSPORT_RECEIVE_BUFFERS
 
static const size_t BUFFER_LOW_WATER = 4096
 
static const size_t MESSAGE_BLOCKS = 1000
 
static const size_t DATA_BLOCKS = 100
 
- Protected Types inherited from ACE_Event_Handler
typedef ACE_Atomic_Op< ACE_SYNCH_MUTEX, Reference_CountAtomic_Reference_Count
 
- Protected Attributes inherited from OpenDDS::DCPS::TransportReceiveStrategy<>
bool gracefully_disconnected_
 Flag indicates if the GRACEFUL_DISCONNECT message is received. More...
 
size_t receive_sample_remaining_
 Bytes remaining in the current DataSample. More...
 
TransportHeader receive_transport_header_
 Current receive TransportHeader. More...
 
TransportMessageBlockAllocator mb_allocator_
 
TransportDataBlockAllocator db_allocator_
 
TransportDataAllocator data_allocator_
 
ACE_Lock_Adapter< ACE_SYNCH_MUTEXreceive_lock_
 Locking strategy for the allocators. More...
 
size_t buffer_index_
 Current receive buffer index in use. More...
 
DataSampleHeader data_sample_header_
 Current data sample header. More...
 
ACE_Message_Blockpayload_
 
bool good_pdu_
 
size_t pdu_remaining_
 Amount of the current PDU that has not been processed yet. More...
 
- Protected Attributes inherited from ACE_Event_Handler
Atomic_Reference_Count reference_count_
 

Detailed Description

Definition at line 23 of file MulticastReceiveStrategy.h.

Constructor & Destructor Documentation

◆ MulticastReceiveStrategy()

OpenDDS::DCPS::MulticastReceiveStrategy::MulticastReceiveStrategy ( MulticastDataLink link)
explicit

Definition at line 18 of file MulticastReceiveStrategy.cpp.

Member Function Documentation

◆ check_header() [1/2]

bool OpenDDS::DCPS::MulticastReceiveStrategy::check_header ( const TransportHeader header)
protectedvirtual

Check the transport header for suitability.

Reimplemented from OpenDDS::DCPS::TransportReceiveStrategy<>.

Definition at line 57 of file MulticastReceiveStrategy.cpp.

References OpenDDS::DCPS::MulticastDataLink::check_header(), and link_.

58 {
59  return this->link_->check_header(header);
60 }
Christopher Diggins *renamed files *fixing compilation errors *adding Visual C project file *removed make Max Lybbert *removed references to missing and unused header
Definition: CHANGELOG.txt:8
bool check_header(const TransportHeader &header)

◆ check_header() [2/2]

bool OpenDDS::DCPS::MulticastReceiveStrategy::check_header ( const DataSampleHeader header)
protectedvirtual

Check the data sample header for suitability.

Reimplemented from OpenDDS::DCPS::TransportReceiveStrategy<>.

Definition at line 63 of file MulticastReceiveStrategy.cpp.

References OpenDDS::DCPS::MulticastDataLink::check_header(), and link_.

64 {
65  return this->link_->check_header(header);
66 }
Christopher Diggins *renamed files *fixing compilation errors *adding Visual C project file *removed make Max Lybbert *removed references to missing and unused header
Definition: CHANGELOG.txt:8
bool check_header(const TransportHeader &header)

◆ deliver_sample()

void OpenDDS::DCPS::MulticastReceiveStrategy::deliver_sample ( ReceivedDataSample sample,
const ACE_INET_Addr remote_address 
)
protectedvirtual

Called when there is a ReceivedDataSample to be delivered.

Implements OpenDDS::DCPS::TransportReceiveStrategy<>.

Definition at line 69 of file MulticastReceiveStrategy.cpp.

References link_, and OpenDDS::DCPS::MulticastDataLink::sample_received().

71 {
72  this->link_->sample_received(sample);
73 }
void sample_received(ReceivedDataSample &sample)

◆ get_handle()

ACE_HANDLE OpenDDS::DCPS::MulticastReceiveStrategy::get_handle ( void  ) const
virtual

Reimplemented from ACE_Event_Handler.

Definition at line 25 of file MulticastReceiveStrategy.cpp.

References ACE_IPC_SAP::get_handle(), link_, socket(), and OpenDDS::DCPS::MulticastDataLink::socket().

26 {
28  return socket.get_handle();
29 }
ACE_HANDLE socket(int protocol_family, int type, int proto)
ACE_SOCK_Dgram_Mcast & socket()
ACE_HANDLE get_handle(void) const

◆ handle_input()

int OpenDDS::DCPS::MulticastReceiveStrategy::handle_input ( ACE_HANDLE  fd)
virtual

Reimplemented from ACE_Event_Handler.

Definition at line 32 of file MulticastReceiveStrategy.cpp.

References OpenDDS::DCPS::TransportReceiveStrategy<>::handle_dds_input(), LM_DEBUG, OpenDDS::DCPS::TransportReceiveStrategy<>::pdu_remaining(), OpenDDS::DCPS::TransportReceiveStrategy<>::reset(), TheServiceParticipant, and VDBG_LVL.

33 {
34  ThreadStatusManager::Event ev(TheServiceParticipant->get_thread_status_manager());
35 
36  const int result = this->handle_dds_input(fd);
37  if (result >= 0 && this->pdu_remaining()) {
38  VDBG_LVL((LM_DEBUG, "(%P|%t) MulticastReceiveStrategy[%@]::handle_input "
39  "resetting with %B bytes remaining\n", this, this->pdu_remaining()), 4);
40  this->reset();
41  }
42  return result;
43 }
#define VDBG_LVL(DBG_ARGS, LEVEL)
#define TheServiceParticipant

◆ reassemble()

bool OpenDDS::DCPS::MulticastReceiveStrategy::reassemble ( ReceivedDataSample data)
protectedvirtual

Reimplemented from OpenDDS::DCPS::TransportReceiveStrategy<>.

Definition at line 76 of file MulticastReceiveStrategy.cpp.

References link_, OpenDDS::DCPS::MulticastDataLink::reassemble(), and OpenDDS::DCPS::TransportReceiveStrategy<>::received_header().

77 {
78  return this->link_->reassemble(data, received_header());
79 }
bool reassemble(ReceivedDataSample &data, const TransportHeader &header)

◆ receive_bytes()

ssize_t OpenDDS::DCPS::MulticastReceiveStrategy::receive_bytes ( iovec  iov[],
int  n,
ACE_INET_Addr remote_address,
ACE_HANDLE  fd,
bool &  stop 
)
protectedvirtual

Only our subclass knows how to do this.

Implements OpenDDS::DCPS::TransportReceiveStrategy<>.

Definition at line 46 of file MulticastReceiveStrategy.cpp.

References link_, ACE_SOCK_Dgram::recv(), socket(), and OpenDDS::DCPS::MulticastDataLink::socket().

51 {
53  return socket.recv(iov, n, remote_address);
54 }
ssize_t recv(void *buf, size_t n, ACE_Addr &addr, int flags=0) const
ACE_HANDLE socket(int protocol_family, int type, int proto)
ACE_SOCK_Dgram_Mcast & socket()

◆ start_i()

int OpenDDS::DCPS::MulticastReceiveStrategy::start_i ( )
protectedvirtual

Let the subclass start.

Implements OpenDDS::DCPS::TransportReceiveStrategy<>.

Definition at line 82 of file MulticastReceiveStrategy.cpp.

References ACE_ERROR_RETURN, ACE_TEXT(), OpenDDS::DCPS::MulticastDataLink::get_reactor(), link_, LM_ERROR, ACE_Event_Handler::reactor(), ACE_Event_Handler::READ_MASK, and ACE_Reactor::register_handler().

83 {
85  if (reactor == 0) {
86  ACE_ERROR_RETURN((LM_ERROR,
87  ACE_TEXT("(%P|%t) ERROR: ")
88  ACE_TEXT("MulticastReceiveStrategy::start_i: ")
89  ACE_TEXT("NULL reactor reference!\n")),
90  -1);
91  }
92 
93  if (reactor->register_handler(this, ACE_Event_Handler::READ_MASK) != 0) {
94  ACE_ERROR_RETURN((LM_ERROR,
95  ACE_TEXT("(%P|%t) ERROR: ")
96  ACE_TEXT("MulticastReceiveStrategy::start_i: ")
97  ACE_TEXT("failed to register handler for DataLink!\n")),
98  -1);
99  }
100 
101  return 0;
102 }
int register_handler(ACE_Event_Handler *event_handler, ACE_Reactor_Mask mask)
virtual ACE_Reactor * reactor(void) const
ACE_TEXT("TCP_Factory")
#define ACE_ERROR_RETURN(X, Y)

◆ stop_i()

void OpenDDS::DCPS::MulticastReceiveStrategy::stop_i ( )
protectedvirtual

Let the subclass stop.

Implements OpenDDS::DCPS::TransportReceiveStrategy<>.

Definition at line 105 of file MulticastReceiveStrategy.cpp.

References ACE_ERROR, ACE_TEXT(), OpenDDS::DCPS::MulticastDataLink::get_reactor(), link_, LM_ERROR, OPENDDS_END_VERSIONED_NAMESPACE_DECL, ACE_Event_Handler::reactor(), ACE_Event_Handler::READ_MASK, and ACE_Reactor::remove_handler().

106 {
107  ACE_Reactor* reactor = this->link_->get_reactor();
108  if (reactor == 0) {
109  ACE_ERROR((LM_ERROR,
110  ACE_TEXT("(%P|%t) ERROR: ")
111  ACE_TEXT("MulticastReceiveStrategy::stop_i: ")
112  ACE_TEXT("NULL reactor reference!\n")));
113  return;
114  }
115 
117 }
#define ACE_ERROR(X)
int remove_handler(ACE_HANDLE handle, ACE_Reactor_Mask masks)
virtual ACE_Reactor * reactor(void) const
ACE_TEXT("TCP_Factory")

Member Data Documentation

◆ link_

MulticastDataLink* OpenDDS::DCPS::MulticastReceiveStrategy::link_
private

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