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

#include <RtpsUdpInst.h>

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

Public Member Functions

virtual int load (ACE_Configuration_Heap &cf, ACE_Configuration_Section_Key &sect)
 
virtual OPENDDS_STRING dump_to_str () const
 Diagnostic aid. More...
 
bool is_reliable () const
 Does the transport as configured support RELIABLE_RELIABILITY_QOS? More...
 
bool requires_cdr_encapsulation () const
 Does the transport require a CDR-encapsulated data payload? More...
 
virtual size_t populate_locator (OpenDDS::DCPS::TransportLocator &trans_info, ConnectionInfoFlags flags) const
 Populate a transport locator sequence. Return the number of "locators.". More...
 
const TransportBLOBget_blob (const OpenDDS::DCPS::TransportLocatorSeq &trans_info) const
 
NetworkAddress multicast_group_address () const
 
void multicast_group_address (const NetworkAddress &addr)
 
NetworkAddress local_address () const
 
void local_address (const NetworkAddress &addr)
 
NetworkAddress advertised_address () const
 
void advertised_address (const NetworkAddress &addr)
 
void rtps_relay_only (bool flag)
 
bool rtps_relay_only () const
 
void use_rtps_relay (bool flag)
 
bool use_rtps_relay () const
 
void rtps_relay_address (const NetworkAddress &address)
 
NetworkAddress rtps_relay_address () const
 
void use_ice (bool flag)
 
bool use_ice () const
 
void stun_server_address (const NetworkAddress &address)
 
NetworkAddress stun_server_address () const
 
void update_locators (const GUID_t &remote_id, const TransportLocatorSeq &locators)
 } More...
 
void get_last_recv_locator (const GUID_t &, TransportLocator &)
 
void rtps_relay_address_change ()
 
void append_transport_statistics (TransportStatisticsSequence &seq)
 
- Public Member Functions inherited from OpenDDS::DCPS::TransportInst
const OPENDDS_STRINGname () const
 
void dump () const
 Diagnostic aid. More...
 
DCPS::WeakRcHandle< ICE::Endpointget_ice_endpoint ()
 
void rtps_relay_only_now (bool flag)
 
void use_rtps_relay_now (bool flag)
 
void use_ice_now (bool flag)
 
ReactorTask_rch reactor_task ()
 
EventDispatcher_rch event_dispatcher ()
 
void count_messages (bool flag)
 
bool count_messages () const
 
void drop_messages (bool flag)
 
void drop_messages_m (double m)
 
void drop_messages_b (double b)
 
bool should_drop (ssize_t length) const
 
bool should_drop (const iovec iov[], int n, ssize_t &length) const
 
- 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 Attributes

ACE_INT32 send_buffer_size_
 
ACE_INT32 rcv_buffer_size_
 
bool use_multicast_
 
unsigned char ttl_
 
OPENDDS_STRING multicast_interface_
 
size_t anticipated_fragments_
 
size_t max_message_size_
 
size_t nak_depth_
 
TimeDuration nak_response_delay_
 
TimeDuration heartbeat_period_
 
TimeDuration receive_address_duration_
 
bool responsive_mode_
 
TimeDuration send_delay_
 
- Public Attributes inherited from OpenDDS::DCPS::TransportInst
const OPENDDS_STRING transport_type_
 
size_t queue_messages_per_pool_
 
size_t queue_initial_pools_
 
ACE_UINT32 max_packet_size_
 Max size (in bytes) of a packet (packet header + sample(s)) More...
 
size_t max_samples_per_packet_
 Max number of samples that should ever be in a single packet. More...
 
ACE_UINT32 optimum_packet_size_
 Optimum size (in bytes) of a packet (packet header + sample(s)). More...
 
bool thread_per_connection_
 
long datalink_release_delay_
 
size_t datalink_control_chunks_
 
TimeDuration fragment_reassembly_timeout_
 
size_t receive_preallocated_message_blocks_
 
size_t receive_preallocated_data_blocks_
 

Static Public Attributes

static const suseconds_t DEFAULT_NAK_RESPONSE_DELAY_USEC = 200000
 
static const time_t DEFAULT_HEARTBEAT_PERIOD_SEC = 1
 
- Static Public Attributes inherited from OpenDDS::DCPS::TransportInst
static const long DEFAULT_DATALINK_RELEASE_DELAY = 10000
 
static const size_t DEFAULT_DATALINK_CONTROL_CHUNKS = 32u
 

Private Member Functions

 RtpsUdpInst (const OPENDDS_STRING &name)
 
TransportImpl_rch new_impl ()
 

Private Attributes

TransportReceiveListener_rch opendds_discovery_default_listener_
 
GUID_t opendds_discovery_guid_
 
NetworkAddress multicast_group_address_
 
NetworkAddress local_address_
 
NetworkAddress advertised_address_
 
ACE_SYNCH_MUTEX config_lock_
 
bool rtps_relay_only_
 
bool use_rtps_relay_
 
NetworkAddress rtps_relay_address_
 
bool use_ice_
 
NetworkAddress stun_server_address_
 

Friends

class RtpsUdpType
 
class RTPS::Sedp
 
class RtpsUdpTransport
 
template<typename T , typename U >
RcHandle< T > OpenDDS::DCPS::make_rch (U const &)
 

Additional Inherited Members

- Static Public Member Functions inherited from OpenDDS::DCPS::TransportInst
static OPENDDS_STRING formatNameForDump (const char *name)
 
- Protected Member Functions inherited from OpenDDS::DCPS::TransportInst
 TransportInst (const char *type, const OPENDDS_STRING &name)
 
virtual ~TransportInst ()
 
void set_port_in_addr_string (OPENDDS_STRING &addr_str, u_short port_number)
 
TransportImpl_rch get_or_create_impl ()
 
TransportImpl_rch get_impl ()
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Protected Attributes inherited from OpenDDS::DCPS::TransportInst
ACE_SYNCH_MUTEX lock_
 
bool shutting_down_
 

Detailed Description

Definition at line 31 of file RtpsUdpInst.h.

Constructor & Destructor Documentation

◆ RtpsUdpInst()

OpenDDS::DCPS::RtpsUdpInst::RtpsUdpInst ( const OPENDDS_STRING name)
explicitprivate

Definition at line 29 of file RtpsUdpInst.cpp.

References ACE_DEFAULT_MAX_SOCKET_BUFSIZ, and if().

30  : TransportInst("rtps_udp", name)
31 #if defined (ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
32  , send_buffer_size_(ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
33  , rcv_buffer_size_(ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
34 #else
36  , rcv_buffer_size_(0)
37 #endif
38  , use_multicast_(true)
39  , ttl_(1)
42  , nak_depth_(0)
46  , responsive_mode_(false)
47  , send_delay_(0, 10 * 1000)
49  , multicast_group_address_(7401, "239.255.0.2")
50  , local_address_(u_short(0), "0.0.0.0")
51 #ifdef ACE_HAS_IPV6
52  , ipv6_multicast_group_address_(7401, "FF03::2")
53  , ipv6_local_address_(u_short(0), "::")
54 #endif
55  , rtps_relay_only_(false)
56  , use_rtps_relay_(false)
57  , use_ice_(false)
58 {}
NetworkAddress multicast_group_address_
Definition: RtpsUdpInst.h:163
const OPENDDS_STRING & name() const
Definition: TransportInst.h:70
static const suseconds_t DEFAULT_NAK_RESPONSE_DELAY_USEC
Definition: RtpsUdpInst.h:34
TimeDuration receive_address_duration_
Definition: RtpsUdpInst.h:49
const GUID_t GUID_UNKNOWN
Nil value for GUID.
Definition: GuidUtils.h:59
static const time_t DEFAULT_HEARTBEAT_PERIOD_SEC
Definition: RtpsUdpInst.h:35
NetworkAddress local_address_
Definition: RtpsUdpInst.h:164
TimeDuration heartbeat_period_
Definition: RtpsUdpInst.h:48
TransportInst(const char *type, const OPENDDS_STRING &name)
TimeDuration nak_response_delay_
Definition: RtpsUdpInst.h:47
static const ACE_CDR::UShort FRAG_SIZE

Member Function Documentation

◆ advertised_address() [1/2]

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::advertised_address ( ) const
inline

Definition at line 85 of file RtpsUdpInst.h.

Referenced by load(), and populate_locator().

85 { return advertised_address_; }
NetworkAddress advertised_address_
Definition: RtpsUdpInst.h:165

◆ advertised_address() [2/2]

void OpenDDS::DCPS::RtpsUdpInst::advertised_address ( const NetworkAddress addr)
inline

Definition at line 86 of file RtpsUdpInst.h.

References ACE_ERROR, ACE_TEXT(), AF_INET, OpenDDS::DCPS::NetworkAddress::get_type(), and LM_ERROR.

87  {
88  if (addr.get_type() == AF_INET) {
89  advertised_address_ = addr;
90  } else {
91  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) ERROR: RtpsUdpInst::advertised_address set failed because address family is not AF_INET\n")));
92  }
93  }
#define ACE_ERROR(X)
#define AF_INET
ACE_TEXT("TCP_Factory")
NetworkAddress advertised_address_
Definition: RtpsUdpInst.h:165

◆ append_transport_statistics()

void OpenDDS::DCPS::RtpsUdpInst::append_transport_statistics ( TransportStatisticsSequence seq)
virtual

Reimplemented from OpenDDS::DCPS::TransportInst.

Definition at line 319 of file RtpsUdpInst.cpp.

References OpenDDS::DCPS::TransportInst::get_or_create_impl(), OPENDDS_END_VERSIONED_NAMESPACE_DECL, and OpenDDS::DCPS::static_rchandle_cast().

320 {
322  if (imp) {
324  rtps_impl->append_transport_statistics(seq);
325  }
326 }
RcHandle< TransportImpl > TransportImpl_rch
The type definition for the smart-pointer to the underlying type.
RcHandle< T > static_rchandle_cast(const RcHandle< U > &h)
Definition: RcHandle_T.h:202
friend class RtpsUdpTransport
Definition: RtpsUdpInst.h:159
RcHandle< RtpsUdpTransport > RtpsUdpTransport_rch
TransportImpl_rch get_or_create_impl()

◆ dump_to_str()

OPENDDS_STRING OpenDDS::DCPS::RtpsUdpInst::dump_to_str ( ) const
virtual

Diagnostic aid.

Reimplemented from OpenDDS::DCPS::TransportInst.

Definition at line 174 of file RtpsUdpInst.cpp.

References anticipated_fragments_, OpenDDS::DCPS::TransportInst::dump_to_str(), OpenDDS::DCPS::TransportInst::formatNameForDump(), heartbeat_period_, local_address(), max_message_size_, multicast_group_address_, multicast_interface_, nak_depth_, nak_response_delay_, OPENDDS_STRING, rcv_buffer_size_, responsive_mode_, send_buffer_size_, OpenDDS::DCPS::LogAddr::str(), OpenDDS::DCPS::TimeDuration::str(), OpenDDS::DCPS::to_dds_string(), ttl_, and use_multicast_.

175 {
177  ret += formatNameForDump("local_address") + LogAddr(local_address()).str() + '\n';
178  ret += formatNameForDump("use_multicast") + (use_multicast_ ? "true" : "false") + '\n';
179  ret += formatNameForDump("multicast_group_address") + LogAddr(multicast_group_address_).str() + '\n';
180  ret += formatNameForDump("multicast_interface") + multicast_interface_ + '\n';
181  ret += formatNameForDump("nak_depth") + to_dds_string(unsigned(nak_depth_)) + '\n';
182  ret += formatNameForDump("anticipated_fragments") + to_dds_string(unsigned(anticipated_fragments_)) + '\n';
183  ret += formatNameForDump("max_message_size") + to_dds_string(unsigned(max_message_size_)) + '\n';
184  ret += formatNameForDump("nak_response_delay") + nak_response_delay_.str() + '\n';
185  ret += formatNameForDump("heartbeat_period") + heartbeat_period_.str() + '\n';
186  ret += formatNameForDump("send_buffer_size") + to_dds_string(send_buffer_size_) + '\n';
187  ret += formatNameForDump("rcv_buffer_size") + to_dds_string(rcv_buffer_size_) + '\n';
188  ret += formatNameForDump("ttl") + to_dds_string(ttl_) + '\n';
189  ret += formatNameForDump("responsive_mode") + (responsive_mode_ ? "true" : "false") + '\n';
190  return ret;
191 }
NetworkAddress multicast_group_address_
Definition: RtpsUdpInst.h:163
NetworkAddress local_address() const
Definition: RtpsUdpInst.h:75
virtual OPENDDS_STRING dump_to_str() const
OPENDDS_STRING multicast_interface_
Definition: RtpsUdpInst.h:42
TimeDuration heartbeat_period_
Definition: RtpsUdpInst.h:48
#define OPENDDS_STRING
String str(unsigned decimal_places=3, bool just_sec=false) const
TimeDuration nak_response_delay_
Definition: RtpsUdpInst.h:47
static OPENDDS_STRING formatNameForDump(const char *name)
String to_dds_string(unsigned short to_convert)

◆ get_blob()

const TransportBLOB * OpenDDS::DCPS::RtpsUdpInst::get_blob ( const OpenDDS::DCPS::TransportLocatorSeq trans_info) const

Definition at line 275 of file RtpsUdpInst.cpp.

276 {
277  for (CORBA::ULong idx = 0, limit = trans_info.length(); idx != limit; ++idx) {
278  if (std::strcmp(trans_info[idx].transport_type, "rtps_udp") == 0) {
279  return &trans_info[idx].data;
280  }
281  }
282 
283  return 0;
284 }
ACE_CDR::ULong ULong

◆ get_last_recv_locator()

void OpenDDS::DCPS::RtpsUdpInst::get_last_recv_locator ( const GUID_t remote_id,
TransportLocator locator 
)
virtual

Reimplemented from OpenDDS::DCPS::TransportInst.

Definition at line 298 of file RtpsUdpInst.cpp.

References OpenDDS::DCPS::TransportInst::get_or_create_impl(), and OpenDDS::DCPS::static_rchandle_cast().

300 {
302  if (imp) {
304  rtps_impl->get_last_recv_locator(remote_id, locator);
305  }
306 }
RcHandle< TransportImpl > TransportImpl_rch
The type definition for the smart-pointer to the underlying type.
RcHandle< T > static_rchandle_cast(const RcHandle< U > &h)
Definition: RcHandle_T.h:202
friend class RtpsUdpTransport
Definition: RtpsUdpInst.h:159
RcHandle< RtpsUdpTransport > RtpsUdpTransport_rch
TransportImpl_rch get_or_create_impl()

◆ is_reliable()

bool OpenDDS::DCPS::RtpsUdpInst::is_reliable ( ) const
inlinevirtual

Does the transport as configured support RELIABLE_RELIABILITY_QOS?

Implements OpenDDS::DCPS::TransportInst.

Definition at line 59 of file RtpsUdpInst.h.

59 { return true; }

◆ load()

int OpenDDS::DCPS::RtpsUdpInst::load ( ACE_Configuration_Heap cf,
ACE_Configuration_Section_Key sect 
)
virtual

Overwrite the default configurations with the configuration from the given section in the ACE_Configuration_Heap object.

Reimplemented from OpenDDS::DCPS::TransportInst.

Definition at line 67 of file RtpsUdpInst.cpp.

References ACE_ERROR_RETURN, ACE_TEXT(), advertised_address(), anticipated_fragments_, ACE_String_Base< char >::c_str(), GET_CONFIG_STRING_VALUE, GET_CONFIG_TIME_VALUE, GET_CONFIG_TSTRING_VALUE, GET_CONFIG_VALUE, heartbeat_period_, ACE_String_Base< char >::is_empty(), LM_ERROR, OpenDDS::DCPS::TransportInst::load(), local_address(), max_message_size_, multicast_group_address(), multicast_interface_, nak_depth_, nak_response_delay_, ACE_String_Base_Const::npos, OPENDDS_STRING, rcv_buffer_size_, responsive_mode_, ACE_String_Base< char >::rfind(), rtps_relay_address(), rtps_relay_only_, send_buffer_size_, send_delay_, stun_server_address(), TheServiceParticipant, ttl_, use_ice_, use_multicast_, and use_rtps_relay_.

69 {
70  TransportInst::load(cf, sect); // delegate to parent
71 
72  ACE_TString local_address_s;
73  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("local_address"),
74  local_address_s);
75  if (!local_address_s.is_empty()) {
76  NetworkAddress addr(local_address_s.c_str());
77  local_address(addr);
78  }
79 
80  ACE_TString advertised_address_s;
81  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("advertised_address"),
82  advertised_address_s);
83  if (!advertised_address_s.is_empty()) {
84  NetworkAddress addr(advertised_address_s.c_str());
85  advertised_address(addr);
86  }
87 
88 #ifdef ACE_HAS_IPV6
89  ACE_TString ipv6_local_address_s;
90  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("ipv6_local_address"),
91  ipv6_local_address_s);
92  if (!ipv6_local_address_s.is_empty()) {
93  NetworkAddress addr(ipv6_local_address_s.c_str());
94  ipv6_local_address(addr);
95  }
96 
97  ACE_TString ipv6_advertised_address_s;
98  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("ipv6_advertised_address"),
99  ipv6_advertised_address_s);
100  if (!ipv6_advertised_address_s.is_empty()) {
101  NetworkAddress addr(ipv6_advertised_address_s.c_str());
102  ipv6_advertised_address(addr);
103  }
104 #endif
105 
106  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("send_buffer_size"), send_buffer_size_, ACE_UINT32);
107 
108  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("rcv_buffer_size"), rcv_buffer_size_, ACE_UINT32);
109 
110  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("use_multicast"), use_multicast_, bool);
111 
112  ACE_TString group_address_s;
113  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("multicast_group_address"),
114  group_address_s);
115  if (!group_address_s.is_empty()) {
116  if (group_address_s.rfind(':') == group_address_s.npos) {
117  // Concatenate a port number if the user does not supply one.
118  group_address_s += ACE_TEXT(":7401");
119  }
120  NetworkAddress addr(group_address_s.c_str());
122  }
123 
124  GET_CONFIG_STRING_VALUE(cf, sect, ACE_TEXT("multicast_interface"),
126 
127  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("anticipated_fragments"), anticipated_fragments_, size_t);
128 
129  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("max_message_size"), max_message_size_, size_t);
130 
131  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("nak_depth"), nak_depth_, size_t);
132 
133  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("ttl"), ttl_, unsigned char);
134 
135  GET_CONFIG_TIME_VALUE(cf, sect, ACE_TEXT("nak_response_delay"),
137  GET_CONFIG_TIME_VALUE(cf, sect, ACE_TEXT("heartbeat_period"),
139  GET_CONFIG_TIME_VALUE(cf, sect, ACE_TEXT("send_delay"),
140  send_delay_);
141 
142  ACE_TString rtps_relay_address_s;
143  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("DataRtpsRelayAddress"),
144  rtps_relay_address_s);
145  if (!rtps_relay_address_s.is_empty()) {
146  NetworkAddress addr(rtps_relay_address_s.c_str());
147  rtps_relay_address(addr);
148  }
149 
150  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("RtpsRelayOnly"), rtps_relay_only_, bool);
151  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("UseRtpsRelay"), use_rtps_relay_, bool);
152 
153  ACE_TString stun_server_address_s;
154  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("DataStunServerAddress"),
155  stun_server_address_s);
156  if (!stun_server_address_s.is_empty()) {
157  NetworkAddress addr(stun_server_address_s.c_str());
158  stun_server_address(addr);
159  }
160 
161 #ifdef OPENDDS_SECURITY
162  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("UseIce"), use_ice_, bool);
163  if (use_ice_ && !TheServiceParticipant->get_security()) {
164  ACE_ERROR_RETURN((LM_ERROR, ACE_TEXT("(%P|%t) ERROR: Security must be enabled (-DCPSSecurity 1) when using ICE (UseIce)\n")), -1);
165  }
166 #endif
167 
168  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("ResponsiveMode"), responsive_mode_, bool);
169 
170  return 0;
171 }
const char * c_str(void) const
NetworkAddress stun_server_address() const
Definition: RtpsUdpInst.h:243
NetworkAddress local_address() const
Definition: RtpsUdpInst.h:75
#define GET_CONFIG_STRING_VALUE(CF, SECT, KEY, VALUE)
Definition: TransportDefs.h:76
OPENDDS_STRING multicast_interface_
Definition: RtpsUdpInst.h:42
size_type rfind(char c, size_type pos=npos) const
TimeDuration heartbeat_period_
Definition: RtpsUdpInst.h:48
static size_type const npos
bool is_empty(void) const
NetworkAddress multicast_group_address() const
Definition: RtpsUdpInst.h:65
#define GET_CONFIG_VALUE(CF, SECT, KEY, VALUE, TYPE)
Definition: TransportDefs.h:45
#define GET_CONFIG_TSTRING_VALUE(CF, SECT, KEY, VALUE)
NetworkAddress rtps_relay_address() const
Definition: RtpsUdpInst.h:216
#define GET_CONFIG_TIME_VALUE(CF, SECT, KEY, VALUE)
ACE_TEXT("TCP_Factory")
TimeDuration nak_response_delay_
Definition: RtpsUdpInst.h:47
NetworkAddress advertised_address() const
Definition: RtpsUdpInst.h:85
#define ACE_ERROR_RETURN(X, Y)
#define TheServiceParticipant
virtual int load(ACE_Configuration_Heap &cf, ACE_Configuration_Section_Key &sect)

◆ local_address() [1/2]

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::local_address ( ) const
inline

Definition at line 75 of file RtpsUdpInst.h.

Referenced by dump_to_str(), load(), and populate_locator().

75 { return local_address_; }
NetworkAddress local_address_
Definition: RtpsUdpInst.h:164

◆ local_address() [2/2]

void OpenDDS::DCPS::RtpsUdpInst::local_address ( const NetworkAddress addr)
inline

Definition at line 76 of file RtpsUdpInst.h.

References ACE_ERROR, ACE_TEXT(), AF_INET, OpenDDS::DCPS::NetworkAddress::get_type(), and LM_ERROR.

77  {
78  if (addr.get_type() == AF_INET) {
79  local_address_ = addr;
80  } else {
81  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) ERROR: RtpsUdpInst::local_address set failed because address family is not AF_INET\n")));
82  }
83  }
#define ACE_ERROR(X)
NetworkAddress local_address_
Definition: RtpsUdpInst.h:164
#define AF_INET
ACE_TEXT("TCP_Factory")

◆ multicast_group_address() [1/2]

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::multicast_group_address ( ) const
inline

Definition at line 65 of file RtpsUdpInst.h.

Referenced by load().

65 { return multicast_group_address_; }
NetworkAddress multicast_group_address_
Definition: RtpsUdpInst.h:163

◆ multicast_group_address() [2/2]

void OpenDDS::DCPS::RtpsUdpInst::multicast_group_address ( const NetworkAddress addr)
inline

Definition at line 66 of file RtpsUdpInst.h.

References ACE_ERROR, ACE_TEXT(), AF_INET, OpenDDS::DCPS::NetworkAddress::get_type(), and LM_ERROR.

67  {
68  if (addr.get_type() == AF_INET) {
70  } else {
71  ACE_ERROR((LM_ERROR, ACE_TEXT("(%P|%t) ERROR: RtpsUdpInst::multicast_group_address set failed because address family is not AF_INET\n")));
72  }
73  }
NetworkAddress multicast_group_address_
Definition: RtpsUdpInst.h:163
#define ACE_ERROR(X)
#define AF_INET
ACE_TEXT("TCP_Factory")

◆ new_impl()

TransportImpl_rch OpenDDS::DCPS::RtpsUdpInst::new_impl ( )
privatevirtual

Implements OpenDDS::DCPS::TransportInst.

Definition at line 61 of file RtpsUdpInst.cpp.

References OpenDDS::DCPS::rchandle_from().

62 {
63  return make_rch<RtpsUdpTransport>(rchandle_from(this));
64 }
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310

◆ populate_locator()

size_t OpenDDS::DCPS::RtpsUdpInst::populate_locator ( OpenDDS::DCPS::TransportLocator trans_info,
ConnectionInfoFlags  flags 
) const
virtual

Populate a transport locator sequence. Return the number of "locators.".

Implements OpenDDS::DCPS::TransportInst.

Definition at line 194 of file RtpsUdpInst.cpp.

References OpenDDS::DCPS::address_to_locator(), advertised_address(), AF_INET, OpenDDS::DCPS::CONNINFO_MULTICAST, OpenDDS::DCPS::CONNINFO_UNICAST, OpenDDS::DCPS::TransportLocator::data, OpenDDS::DCPS::get_interface_addrs(), OpenDDS::DCPS::NetworkAddress::get_port_number(), ACE_Addr::get_type(), OpenDDS::DCPS::grow(), local_address(), OpenDDS::RTPS::locators_to_blob(), multicast_group_address_, OpenDDS::DCPS::OPENDDS_VECTOR(), OpenDDS::DCPS::NetworkAddress::to_addr(), OpenDDS::DCPS::TransportLocator::transport_type, and use_multicast_.

195 {
196  using namespace OpenDDS::RTPS;
197 
198  LocatorSeq locators;
199  CORBA::ULong idx = 0;
200 
201  // multicast first so it's preferred by remote peers
202  if ((flags & CONNINFO_MULTICAST) && use_multicast_ && multicast_group_address_ != NetworkAddress()) {
203  grow(locators);
205  }
206 #ifdef ACE_HAS_IPV6
207  if ((flags & CONNINFO_MULTICAST) && use_multicast_ && ipv6_multicast_group_address_ != NetworkAddress()) {
208  grow(locators);
209  address_to_locator(locators[idx++], ipv6_multicast_group_address_.to_addr());
210  }
211 #endif
212 
213  if (flags & CONNINFO_UNICAST) {
214  if (local_address() != NetworkAddress()) {
215  if (advertised_address() != NetworkAddress()) {
216  grow(locators);
217  address_to_locator(locators[idx], advertised_address().to_addr());
218  if (locators[idx].port == 0) {
219  locators[idx].port = local_address().get_port_number();
220  }
221  ++idx;
222  } else if (local_address().is_any()) {
223  typedef OPENDDS_VECTOR(ACE_INET_Addr) AddrVector;
224  AddrVector addrs;
225  get_interface_addrs(addrs);
226  for (AddrVector::iterator adr_it = addrs.begin(); adr_it != addrs.end(); ++adr_it) {
227  if (*adr_it != ACE_INET_Addr() && adr_it->get_type() == AF_INET) {
228  grow(locators);
229  address_to_locator(locators[idx], *adr_it);
230  locators[idx].port = local_address().get_port_number();
231  ++idx;
232  }
233  }
234  } else {
235  grow(locators);
236  address_to_locator(locators[idx++], local_address().to_addr());
237  }
238  }
239 #ifdef ACE_HAS_IPV6
240  if (ipv6_local_address() != NetworkAddress()) {
241  if (ipv6_advertised_address() != NetworkAddress()) {
242  grow(locators);
243  address_to_locator(locators[idx], ipv6_advertised_address().to_addr());
244  if (locators[idx].port == 0) {
245  locators[idx].port = ipv6_local_address().get_port_number();
246  }
247  ++idx;
248  } else if (ipv6_local_address().is_any()) {
249  typedef OPENDDS_VECTOR(ACE_INET_Addr) AddrVector;
250  AddrVector addrs;
251  get_interface_addrs(addrs);
252  for (AddrVector::iterator adr_it = addrs.begin(); adr_it != addrs.end(); ++adr_it) {
253  if (*adr_it != ACE_INET_Addr() && adr_it->get_type() == AF_INET6) {
254  grow(locators);
255  address_to_locator(locators[idx], *adr_it);
256  locators[idx].port = ipv6_local_address().get_port_number();
257  ++idx;
258  }
259  }
260  } else {
261  grow(locators);
262  address_to_locator(locators[idx++], ipv6_local_address().to_addr());
263  }
264  }
265 #endif
266  }
267 
268  info.transport_type = "rtps_udp";
269  RTPS::locators_to_blob(locators, info.data);
270 
271  return locators.length();
272 }
NetworkAddress multicast_group_address_
Definition: RtpsUdpInst.h:163
static const ConnectionInfoFlags CONNINFO_MULTICAST
NetworkAddress local_address() const
Definition: RtpsUdpInst.h:75
typedef OPENDDS_VECTOR(ActionConnectionRecord) ConnectionRecords
int get_type(void) const
ACE_CDR::ULong ULong
ACE_INET_Addr to_addr() const
void get_interface_addrs(OPENDDS_VECTOR(ACE_INET_Addr)&addrs)
Seq::size_type grow(Seq &seq)
Definition: Util.h:151
#define AF_INET
OpenDDS_Dcps_Export void address_to_locator(Locator_t &locator, const ACE_INET_Addr &addr)
NetworkAddress advertised_address() const
Definition: RtpsUdpInst.h:85
void locators_to_blob(const DCPS::LocatorSeq &locators, DCPS::TransportBLOB &blob)
ACE_UINT16 get_port_number() const
static const ConnectionInfoFlags CONNINFO_UNICAST
sequence< Locator_t > LocatorSeq

◆ requires_cdr_encapsulation()

bool OpenDDS::DCPS::RtpsUdpInst::requires_cdr_encapsulation ( ) const
inlinevirtual

Does the transport require a CDR-encapsulated data payload?

Reimplemented from OpenDDS::DCPS::TransportInst.

Definition at line 60 of file RtpsUdpInst.h.

60 { return true; }

◆ rtps_relay_address() [1/2]

void OpenDDS::DCPS::RtpsUdpInst::rtps_relay_address ( const NetworkAddress address)
inline

Definition at line 210 of file RtpsUdpInst.h.

References ACE_GUARD.

211 {
213  rtps_relay_address_ = address;
214 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
NetworkAddress rtps_relay_address_
Definition: RtpsUdpInst.h:175
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172

◆ rtps_relay_address() [2/2]

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::rtps_relay_address ( ) const
inline

Definition at line 216 of file RtpsUdpInst.h.

References ACE_GUARD_RETURN.

Referenced by load().

217 {
218  ACE_GUARD_RETURN(ACE_Thread_Mutex, g, config_lock_, NetworkAddress());
219  return rtps_relay_address_;
220 }
NetworkAddress rtps_relay_address_
Definition: RtpsUdpInst.h:175
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

◆ rtps_relay_address_change()

void OpenDDS::DCPS::RtpsUdpInst::rtps_relay_address_change ( )
virtual

Reimplemented from OpenDDS::DCPS::TransportInst.

Definition at line 309 of file RtpsUdpInst.cpp.

References OpenDDS::DCPS::TransportInst::get_impl(), and OpenDDS::DCPS::static_rchandle_cast().

310 {
311  TransportImpl_rch imp = get_impl();
312  if (imp) {
314  rtps_impl->rtps_relay_address_change();
315  }
316 }
RcHandle< TransportImpl > TransportImpl_rch
The type definition for the smart-pointer to the underlying type.
RcHandle< T > static_rchandle_cast(const RcHandle< U > &h)
Definition: RcHandle_T.h:202
friend class RtpsUdpTransport
Definition: RtpsUdpInst.h:159
RcHandle< RtpsUdpTransport > RtpsUdpTransport_rch
TransportImpl_rch get_impl()

◆ rtps_relay_only() [1/2]

void OpenDDS::DCPS::RtpsUdpInst::rtps_relay_only ( bool  flag)
inline

Relay address and stun server address may change, these use a mutex {

Definition at line 180 of file RtpsUdpInst.h.

References ACE_DEBUG, ACE_GUARD, OpenDDS::DCPS::DCPS_debug_level, and LM_INFO.

181 {
183  rtps_relay_only_ = flag;
184  if (DCPS::DCPS_debug_level > 3) {
185  ACE_DEBUG((LM_INFO, "(%P|%t) RtpsUdpInst::rtps_relay_only is now %d\n", rtps_relay_only_));
186  }
187 }
#define ACE_DEBUG(X)
#define ACE_GUARD(MUTEX, OBJ, LOCK)
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30

◆ rtps_relay_only() [2/2]

bool OpenDDS::DCPS::RtpsUdpInst::rtps_relay_only ( ) const
inline

Definition at line 189 of file RtpsUdpInst.h.

References ACE_GUARD_RETURN.

190 {
192  return rtps_relay_only_;
193 }
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

◆ stun_server_address() [1/2]

void OpenDDS::DCPS::RtpsUdpInst::stun_server_address ( const NetworkAddress address)
inline

Definition at line 237 of file RtpsUdpInst.h.

References ACE_GUARD.

238 {
240  stun_server_address_ = address;
241 }
#define ACE_GUARD(MUTEX, OBJ, LOCK)
NetworkAddress stun_server_address_
Definition: RtpsUdpInst.h:177
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172

◆ stun_server_address() [2/2]

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::stun_server_address ( ) const
inline

Definition at line 243 of file RtpsUdpInst.h.

References ACE_GUARD_RETURN, and OPENDDS_END_VERSIONED_NAMESPACE_DECL.

Referenced by load().

244 {
245  ACE_GUARD_RETURN(ACE_Thread_Mutex, g, config_lock_, NetworkAddress());
246  return stun_server_address_;
247 }
NetworkAddress stun_server_address_
Definition: RtpsUdpInst.h:177
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

◆ update_locators()

void OpenDDS::DCPS::RtpsUdpInst::update_locators ( const GUID_t remote_id,
const TransportLocatorSeq locators 
)
virtual

}

Reimplemented from OpenDDS::DCPS::TransportInst.

Definition at line 287 of file RtpsUdpInst.cpp.

References OpenDDS::DCPS::TransportInst::get_or_create_impl(), and OpenDDS::DCPS::static_rchandle_cast().

289 {
291  if (imp) {
293  rtps_impl->update_locators(remote_id, locators);
294  }
295 }
RcHandle< TransportImpl > TransportImpl_rch
The type definition for the smart-pointer to the underlying type.
RcHandle< T > static_rchandle_cast(const RcHandle< U > &h)
Definition: RcHandle_T.h:202
friend class RtpsUdpTransport
Definition: RtpsUdpInst.h:159
RcHandle< RtpsUdpTransport > RtpsUdpTransport_rch
TransportImpl_rch get_or_create_impl()

◆ use_ice() [1/2]

void OpenDDS::DCPS::RtpsUdpInst::use_ice ( bool  flag)
inline

Definition at line 222 of file RtpsUdpInst.h.

References ACE_DEBUG, ACE_GUARD, OpenDDS::DCPS::DCPS_debug_level, and LM_INFO.

223 {
225  use_ice_ = flag;
226  if (DCPS::DCPS_debug_level > 3) {
227  ACE_DEBUG((LM_INFO, "(%P|%t) RtpsUdpInst::use_ice is now %d\n", use_ice_));
228  }
229 }
#define ACE_DEBUG(X)
#define ACE_GUARD(MUTEX, OBJ, LOCK)
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30

◆ use_ice() [2/2]

bool OpenDDS::DCPS::RtpsUdpInst::use_ice ( ) const
inline

Definition at line 231 of file RtpsUdpInst.h.

References ACE_GUARD_RETURN.

232 {
234  return use_ice_;
235 }
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

◆ use_rtps_relay() [1/2]

void OpenDDS::DCPS::RtpsUdpInst::use_rtps_relay ( bool  flag)
inline

Definition at line 195 of file RtpsUdpInst.h.

References ACE_DEBUG, ACE_GUARD, OpenDDS::DCPS::DCPS_debug_level, and LM_INFO.

196 {
198  use_rtps_relay_ = flag;
199  if (DCPS::DCPS_debug_level > 3) {
200  ACE_DEBUG((LM_INFO, "(%P|%t) RtpsUdpInst::use_rtps_relay is now %d\n", use_rtps_relay_));
201  }
202 }
#define ACE_DEBUG(X)
#define ACE_GUARD(MUTEX, OBJ, LOCK)
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
OpenDDS_Dcps_Export unsigned int DCPS_debug_level
Definition: debug.cpp:30

◆ use_rtps_relay() [2/2]

bool OpenDDS::DCPS::RtpsUdpInst::use_rtps_relay ( ) const
inline

Definition at line 204 of file RtpsUdpInst.h.

References ACE_GUARD_RETURN.

205 {
207  return use_rtps_relay_;
208 }
ACE_SYNCH_MUTEX config_lock_
Definition: RtpsUdpInst.h:172
#define ACE_GUARD_RETURN(MUTEX, OBJ, LOCK, RETURN)

Friends And Related Function Documentation

◆ OpenDDS::DCPS::make_rch

template<typename T , typename U >
RcHandle<T> OpenDDS::DCPS::make_rch ( U const &  )
friend

◆ RTPS::Sedp

friend class RTPS::Sedp
friend

Definition at line 158 of file RtpsUdpInst.h.

◆ RtpsUdpTransport

friend class RtpsUdpTransport
friend

Definition at line 159 of file RtpsUdpInst.h.

◆ RtpsUdpType

friend class RtpsUdpType
friend

Definition at line 151 of file RtpsUdpInst.h.

Member Data Documentation

◆ advertised_address_

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::advertised_address_
private

Definition at line 165 of file RtpsUdpInst.h.

◆ anticipated_fragments_

size_t OpenDDS::DCPS::RtpsUdpInst::anticipated_fragments_

Definition at line 44 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ config_lock_

ACE_SYNCH_MUTEX OpenDDS::DCPS::RtpsUdpInst::config_lock_
mutableprivate

Definition at line 172 of file RtpsUdpInst.h.

◆ DEFAULT_HEARTBEAT_PERIOD_SEC

const time_t OpenDDS::DCPS::RtpsUdpInst::DEFAULT_HEARTBEAT_PERIOD_SEC = 1
static

◆ DEFAULT_NAK_RESPONSE_DELAY_USEC

const suseconds_t OpenDDS::DCPS::RtpsUdpInst::DEFAULT_NAK_RESPONSE_DELAY_USEC = 200000
static

◆ heartbeat_period_

TimeDuration OpenDDS::DCPS::RtpsUdpInst::heartbeat_period_

Definition at line 48 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ local_address_

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::local_address_
private

Definition at line 164 of file RtpsUdpInst.h.

◆ max_message_size_

size_t OpenDDS::DCPS::RtpsUdpInst::max_message_size_

Definition at line 45 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ multicast_group_address_

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::multicast_group_address_
private

Definition at line 163 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and populate_locator().

◆ multicast_interface_

OPENDDS_STRING OpenDDS::DCPS::RtpsUdpInst::multicast_interface_

Definition at line 42 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ nak_depth_

size_t OpenDDS::DCPS::RtpsUdpInst::nak_depth_

Definition at line 46 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ nak_response_delay_

TimeDuration OpenDDS::DCPS::RtpsUdpInst::nak_response_delay_

Definition at line 47 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ opendds_discovery_default_listener_

TransportReceiveListener_rch OpenDDS::DCPS::RtpsUdpInst::opendds_discovery_default_listener_
private

Definition at line 160 of file RtpsUdpInst.h.

◆ opendds_discovery_guid_

GUID_t OpenDDS::DCPS::RtpsUdpInst::opendds_discovery_guid_
private

Definition at line 161 of file RtpsUdpInst.h.

◆ rcv_buffer_size_

ACE_INT32 OpenDDS::DCPS::RtpsUdpInst::rcv_buffer_size_

Definition at line 38 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ receive_address_duration_

TimeDuration OpenDDS::DCPS::RtpsUdpInst::receive_address_duration_

Definition at line 49 of file RtpsUdpInst.h.

◆ responsive_mode_

bool OpenDDS::DCPS::RtpsUdpInst::responsive_mode_

Definition at line 50 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ rtps_relay_address_

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::rtps_relay_address_
private

Definition at line 175 of file RtpsUdpInst.h.

◆ rtps_relay_only_

bool OpenDDS::DCPS::RtpsUdpInst::rtps_relay_only_
private

Definition at line 173 of file RtpsUdpInst.h.

Referenced by load().

◆ send_buffer_size_

ACE_INT32 OpenDDS::DCPS::RtpsUdpInst::send_buffer_size_

Definition at line 37 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ send_delay_

TimeDuration OpenDDS::DCPS::RtpsUdpInst::send_delay_

Definition at line 51 of file RtpsUdpInst.h.

Referenced by load().

◆ stun_server_address_

NetworkAddress OpenDDS::DCPS::RtpsUdpInst::stun_server_address_
private

Definition at line 177 of file RtpsUdpInst.h.

◆ ttl_

unsigned char OpenDDS::DCPS::RtpsUdpInst::ttl_

Definition at line 41 of file RtpsUdpInst.h.

Referenced by dump_to_str(), and load().

◆ use_ice_

bool OpenDDS::DCPS::RtpsUdpInst::use_ice_
private

Definition at line 176 of file RtpsUdpInst.h.

Referenced by load().

◆ use_multicast_

bool OpenDDS::DCPS::RtpsUdpInst::use_multicast_

Definition at line 40 of file RtpsUdpInst.h.

Referenced by dump_to_str(), load(), and populate_locator().

◆ use_rtps_relay_

bool OpenDDS::DCPS::RtpsUdpInst::use_rtps_relay_
private

Definition at line 174 of file RtpsUdpInst.h.

Referenced by load().


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