OpenDDS  Snapshot(2023/04/28-20:55)
UdpInst.cpp
Go to the documentation of this file.
1 /*
2  *
3  *
4  * Distributed under the OpenDDS License.
5  * See: http://www.opendds.org/license.html
6  */
7 
8 #include "UdpInst.h"
9 #include "UdpLoader.h"
10 
11 #include <dds/DCPS/LogAddr.h>
14 
15 #include <ace/Configuration.h>
16 
17 #include <iostream>
18 #include <sstream>
19 
21 
22 namespace OpenDDS {
23 namespace DCPS {
24 
25 UdpInst::UdpInst(const std::string& name)
26  : TransportInst("udp", name),
28  send_buffer_size_(ACE_DEFAULT_MAX_SOCKET_BUFSIZ),
29  rcv_buffer_size_(ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
30 #else
31  send_buffer_size_(0),
32  rcv_buffer_size_(0)
33 #endif
34 {
35 }
36 
39 {
40  return make_rch<UdpTransport>(rchandle_from(this));
41 }
42 
43 int
46 {
47  TransportInst::load(cf, sect); // delegate to parent
48 
49  // Explicitly initialize this string to stop gcc 11 from issuing a warning.
50  ACE_TString local_address_s(ACE_TEXT(""));
51  GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("local_address"),
52  local_address_s);
53 
54  if (!local_address_s.empty()) {
55  local_address(ACE_TEXT_ALWAYS_CHAR(local_address_s.c_str()));
56  }
57 
58  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("send_buffer_size"), this->send_buffer_size_, ACE_UINT32);
59 
60  GET_CONFIG_VALUE(cf, sect, ACE_TEXT("rcv_buffer_size"), this->rcv_buffer_size_, ACE_UINT32);
61 
62  return 0;
63 }
64 
67 {
68  std::ostringstream os;
70 
71  os << formatNameForDump("local_address") << LogAddr(local_address()).str() << std::endl;
72  os << formatNameForDump("send_buffer_size") << this->send_buffer_size_ << std::endl;
73  os << formatNameForDump("rcv_buffer_size") << this->rcv_buffer_size_ << std::endl;
74  return OPENDDS_STRING(os.str());
75 }
76 
77 size_t
79 {
80  if (this->local_address() != ACE_INET_Addr()) {
81  NetworkResource network_resource;
82  if (!this->local_address_string().empty()) {
83  network_resource = NetworkResource(this->local_address_string());
84  } else {
85  network_resource = NetworkResource(get_fully_qualified_hostname());
86  }
87  ACE_OutputCDR cdr;
88  cdr << network_resource;
89 
90  const CORBA::ULong len = static_cast<CORBA::ULong>(cdr.total_length());
91  char* buffer = const_cast<char*>(cdr.buffer()); // safe
92 
93  info.transport_type = "udp";
94  info.data = TransportBLOB(len, len, reinterpret_cast<CORBA::Octet*>(buffer));
95  return 1;
96  } else {
97  return 0;
98  }
99 }
100 
101 } // namespace DCPS
102 } // namespace OpenDDS
103 
RcHandle< T > rchandle_from(T *pointer)
Definition: RcHandle_T.h:310
virtual OPENDDS_STRING dump_to_str() const
Diagnostic aid.
Definition: UdpInst.cpp:66
const char * c_str(void) const
virtual int load(ACE_Configuration_Heap &cf, ACE_Configuration_Section_Key &sect)
Definition: UdpInst.cpp:44
ACE_INT32 send_buffer_size_
Definition: UdpInst.h:25
Base class to hold configuration settings for TransportImpls.
Definition: TransportInst.h:64
if(!(yy_init))
#define ACE_TEXT_ALWAYS_CHAR(STRING)
virtual size_t populate_locator(OpenDDS::DCPS::TransportLocator &trans_info, ConnectionInfoFlags flags) const
Populate a transport locator sequence. Return the number of "locators.".
Definition: UdpInst.cpp:78
size_t total_length(void) const
#define OPENDDS_STRING
ACE_CDR::ULong ULong
#define GET_CONFIG_VALUE(CF, SECT, KEY, VALUE, TYPE)
Definition: TransportDefs.h:45
#define GET_CONFIG_TSTRING_VALUE(CF, SECT, KEY, VALUE)
Defines a wrapper around address info which is used for advertise.
ACE_INT32 rcv_buffer_size_
Definition: UdpInst.h:26
const char * buffer(void) const
#define ACE_DEFAULT_MAX_SOCKET_BUFSIZ
UdpInst(const std::string &name)
Definition: UdpInst.cpp:25
bool empty(void) const
const char *const name
Definition: debug.cpp:60
ACE_TEXT("TCP_Factory")
OPENDDS_STRING local_address_string() const
Definition: UdpInst.h:38
virtual int load(ACE_Configuration_Heap &cf, ACE_Configuration_Section_Key &sect)
const String & str() const
Definition: LogAddr.h:31
TransportImpl_rch new_impl()
Definition: UdpInst.cpp:38
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
string transport_type
The transport type (e.g. tcp or udp)
String get_fully_qualified_hostname(ACE_INET_Addr *addr)
static OPENDDS_STRING formatNameForDump(const char *name)
DDS::OctetSeq TransportBLOB
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
virtual OPENDDS_STRING dump_to_str() const
size_t ConnectionInfoFlags
ACE_INET_Addr local_address() const
Definition: UdpInst.h:39