OpenDDS  Snapshot(2023/04/28-20:55)
Public Member Functions | Public Attributes | List of all members
OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint Struct Reference
Inheritance diagram for OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint:
Collaboration graph
[legend]

Public Member Functions

 IceEndpoint (RtpsUdpTransport &a_transport)
 
const ACE_SOCK_Dgramchoose_recv_socket (ACE_HANDLE fd) const
 
virtual int handle_input (ACE_HANDLE fd)
 
virtual ICE::AddressListType host_addresses () const
 
ACE_SOCK_Dgramchoose_send_socket (const ACE_INET_Addr &address) const
 
virtual void send (const ACE_INET_Addr &address, const STUN::Message &message)
 
virtual ACE_INET_Addr stun_server_address () const
 
- Public Member Functions inherited from ACE_Event_Handler
virtual ~ACE_Event_Handler (void)
 
virtual ACE_HANDLE get_handle (void) const
 
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
 
virtual Reference_Count add_reference (void)
 
virtual Reference_Count remove_reference (void)
 
Reference_Counting_Policyreference_counting_policy (void)
 
- Public Member Functions inherited from OpenDDS::ICE::Endpoint
virtual ~Endpoint ()
 
virtual void ice_connect (const GuidSetType &, const ACE_INET_Addr &)
 
virtual void ice_disconnect (const GuidSetType &, const ACE_INET_Addr &)
 
- 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

RtpsUdpTransporttransport
 
bool network_is_unreachable_
 
- 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
 

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)
 
- Protected Types inherited from ACE_Event_Handler
typedef ACE_Atomic_Op< ACE_SYNCH_MUTEX, Reference_CountAtomic_Reference_Count
 
- Protected Member Functions inherited from ACE_Event_Handler
 ACE_Event_Handler (ACE_Reactor *=0, int priority=ACE_Event_Handler::LO_PRIORITY)
 
- Protected Member Functions inherited from OpenDDS::DCPS::RcObject
 RcObject ()
 
- Protected Attributes inherited from ACE_Event_Handler
Atomic_Reference_Count reference_count_
 

Detailed Description

Definition at line 161 of file RtpsUdpTransport.h.

Constructor & Destructor Documentation

◆ IceEndpoint()

OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::IceEndpoint ( RtpsUdpTransport a_transport)
inline

Definition at line 164 of file RtpsUdpTransport.h.

References send().

Member Function Documentation

◆ choose_recv_socket()

const ACE_SOCK_Dgram & OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::choose_recv_socket ( ACE_HANDLE  fd) const

Definition at line 762 of file RtpsUdpTransport.cpp.

763 {
764 #ifdef ACE_HAS_IPV6
765  if (fd == transport.ipv6_unicast_socket_.get_handle()) {
766  return transport.ipv6_unicast_socket_;
767  }
768 #endif
769  ACE_UNUSED_ARG(fd);
770  return transport.unicast_socket_;
771 }

◆ choose_send_socket()

ACE_SOCK_Dgram & OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::choose_send_socket ( const ACE_INET_Addr address) const

Definition at line 900 of file RtpsUdpTransport.cpp.

References ACE_Addr::get_type().

901 {
902 #ifdef ACE_HAS_IPV6
903  if (destination.get_type() == AF_INET6) {
904  return transport.link_ ? transport.link_->ipv6_unicast_socket() : transport.ipv6_unicast_socket_;
905  }
906 #endif
907 
908  ACE_UNUSED_ARG(destination);
910 }

◆ handle_input()

int OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::handle_input ( ACE_HANDLE  fd)
virtual

Reimplemented from ACE_Event_Handler.

Definition at line 774 of file RtpsUdpTransport.cpp.

References ACE_ERROR, ACE_TEXT(), code, OpenDDS::DCPS::RtpsUdpTransport::config(), EADDRNOTAVAIL, ENETUNREACH, ENOBUFS, EPERM, LM_ERROR, LM_WARNING, OPENDDS_ASSERT, OpenDDS::DCPS::RtpsUdpReceiveStrategy::receive_bytes_helper(), ACE_SOCK_Dgram::send(), socket(), and TheServiceParticipant.

775 {
776  ThreadStatusManager::Event ev(TheServiceParticipant->get_thread_status_manager());
777 
778  struct iovec iov[1];
779  char buffer[0x10000];
780  iov[0].iov_base = buffer;
781  iov[0].iov_len = sizeof buffer;
782  ACE_INET_Addr remote_address;
783 
784  bool stop;
786 #ifdef OPENDDS_SECURITY
788 #endif
789  transport, stop);
790 
791  return 0;
792 }
virtual DCPS::WeakRcHandle< ICE::Endpoint > get_ice_endpoint()
static ssize_t receive_bytes_helper(iovec iov[], int n, const ACE_SOCK_Dgram &socket, ACE_INET_Addr &remote_address, DCPS::RcHandle< ICE::Agent > agent, DCPS::WeakRcHandle< ICE::Endpoint > endpoint, RtpsUdpTransport &tport, bool &stop)
const ACE_SOCK_Dgram & choose_recv_socket(ACE_HANDLE fd) const
#define TheServiceParticipant
DCPS::RcHandle< ICE::Agent > get_ice_agent() const

◆ host_addresses()

ICE::AddressListType OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::host_addresses ( ) const
virtual

Implements OpenDDS::ICE::Endpoint.

Definition at line 853 of file RtpsUdpTransport.cpp.

References AF_INET, OpenDDS::DCPS::get_interface_addrs(), ACE_INET_Addr::get_port_number(), and ACE_INET_Addr::is_any().

853  {
854  ICE::AddressListType addresses;
855 
857 
858  if (!cfg) {
859  return addresses;
860  }
861 
862  ACE_INET_Addr addr = cfg->local_address().to_addr();
863  if (addr != ACE_INET_Addr()) {
864  if (addr.is_any()) {
865  ICE::AddressListType addrs;
867  for (ICE::AddressListType::iterator pos = addrs.begin(), limit = addrs.end(); pos != limit; ++pos) {
868  if (pos->get_type() == AF_INET) {
869  pos->set_port_number(addr.get_port_number());
870  addresses.push_back(*pos);
871  }
872  }
873  } else {
874  addresses.push_back(addr);
875  }
876  }
877 
878 #ifdef ACE_HAS_IPV6
879  addr = cfg->ipv6_local_address().to_addr();
880  if (addr != ACE_INET_Addr()) {
881  if (addr.is_any()) {
882  ICE::AddressListType addrs;
884  for (ICE::AddressListType::iterator pos = addrs.begin(), limit = addrs.end(); pos != limit; ++pos) {
885  if (pos->get_type() == AF_INET6) {
886  pos->set_port_number(addr.get_port_number());
887  addresses.push_back(*pos);
888  }
889  }
890  } else {
891  addresses.push_back(addr);
892  }
893  }
894 #endif
895 
896  return addresses;
897 }
RcHandle< RtpsUdpInst > RtpsUdpInst_rch
bool is_any(void) const
void get_interface_addrs(OPENDDS_VECTOR(ACE_INET_Addr)&addrs)
#define AF_INET
u_short get_port_number(void) const
RtpsUdpInst_rch config() const

◆ send()

void OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::send ( const ACE_INET_Addr address,
const STUN::Message message 
)
virtual

Implements OpenDDS::ICE::Endpoint.

Definition at line 913 of file RtpsUdpTransport.cpp.

References ACE_ERROR, ACE_GUARD, OpenDDS::STUN::encoding(), OpenDDS::STUN::Message::length(), LM_ERROR, LM_WARNING, OpenDDS::DCPS::MAX_SEND_BLOCKS, OpenDDS::DCPS::TransportSendStrategy::mb_to_iov(), OpenDDS::DCPS::MCK_STUN, and socket().

914 {
915  ACE_SOCK_Dgram& socket = choose_send_socket(destination);
916 
917  ACE_Message_Block block(20 + message.length());
918  DCPS::Serializer serializer(&block, STUN::encoding);
919  const_cast<STUN::Message&>(message).block = &block;
920  serializer << message;
921 
922  iovec iov[MAX_SEND_BLOCKS];
923  const int num_blocks = RtpsUdpSendStrategy::mb_to_iov(block, iov);
924  const ssize_t result = send_single_i(transport.config(), socket, iov, num_blocks, destination, network_is_unreachable_);
925 
927  if (result < 0) {
928  if (cfg && cfg->count_messages()) {
929  ssize_t bytes = 0;
930  for (int i = 0; i < num_blocks; ++i) {
931  bytes += iov[i].iov_len;
932  }
933  const NetworkAddress da(destination);
934  const InternalMessageCountKey key(da, MCK_STUN, da == cfg->rtps_relay_address());
937  }
939  const ACE_Log_Priority prio = shouldWarn(errno) ? LM_WARNING : LM_ERROR;
940  ACE_ERROR((prio, "(%P|%t) RtpsUdpTransport::send() - "
941  "failed to send STUN message\n"));
942  }
943  } else if (cfg && cfg->count_messages()) {
944  const NetworkAddress da(destination);
945  const InternalMessageCountKey key(da, MCK_STUN, da == cfg->rtps_relay_address());
948  }
949 }
ACE_SOCK_Dgram & choose_send_socket(const ACE_INET_Addr &address) const
RcHandle< RtpsUdpInst > RtpsUdpInst_rch
#define ACE_ERROR(X)
#define ACE_GUARD(MUTEX, OBJ, LOCK)
static int mb_to_iov(const ACE_Message_Block &msg, iovec *iov)
sequence< octet > key
ACE_Thread_Mutex transport_statistics_mutex_
int ssize_t
const MessageCountKind MCK_STUN
ACE_HANDLE socket(int protocol_family, int type, int proto)
ACE_Log_Priority
LM_WARNING
InternalTransportStatistics transport_statistics_
const DCPS::Encoding encoding(DCPS::Encoding::KIND_UNALIGNED_CDR, DCPS::ENDIAN_BIG)
LM_ERROR
RtpsUdpInst_rch config() const

◆ stun_server_address()

ACE_INET_Addr OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::stun_server_address ( ) const
virtual

Implements OpenDDS::ICE::Endpoint.

Definition at line 952 of file RtpsUdpTransport.cpp.

952  {
954  return cfg ? cfg->stun_server_address().to_addr() : ACE_INET_Addr();
955 }
RcHandle< RtpsUdpInst > RtpsUdpInst_rch
RtpsUdpInst_rch config() const

Member Data Documentation

◆ network_is_unreachable_

bool OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::network_is_unreachable_

Definition at line 176 of file RtpsUdpTransport.h.

◆ transport

RtpsUdpTransport& OpenDDS::DCPS::RtpsUdpTransport::IceEndpoint::transport

Definition at line 162 of file RtpsUdpTransport.h.


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