UdpInst.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include "UdpInst.h"
00009 #include "UdpLoader.h"
00010
00011 #include "dds/DCPS/transport/framework/TransportDefs.h"
00012 #include "dds/DCPS/transport/framework/NetworkAddress.h"
00013
00014 #include "ace/Configuration.h"
00015
00016 #include <iostream>
00017 #include <sstream>
00018
00019 OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL
00020
00021 namespace OpenDDS {
00022 namespace DCPS {
00023
00024 UdpInst::UdpInst(const std::string& name)
00025 : TransportInst("udp", name),
00026 #if defined (ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
00027 send_buffer_size_(ACE_DEFAULT_MAX_SOCKET_BUFSIZ),
00028 rcv_buffer_size_(ACE_DEFAULT_MAX_SOCKET_BUFSIZ)
00029 #else
00030 send_buffer_size_(0),
00031 rcv_buffer_size_(0)
00032 #endif
00033 {
00034 }
00035
00036 TransportImpl_rch
00037 UdpInst::new_impl()
00038 {
00039 return make_rch<UdpTransport>(ref(*this));
00040 }
00041
00042 int
00043 UdpInst::load(ACE_Configuration_Heap& cf,
00044 ACE_Configuration_Section_Key& sect)
00045 {
00046 TransportInst::load(cf, sect);
00047
00048 ACE_TString local_address_s;
00049 GET_CONFIG_TSTRING_VALUE(cf, sect, ACE_TEXT("local_address"),
00050 local_address_s);
00051
00052 if (!local_address_s.empty()) {
00053 local_address(ACE_TEXT_ALWAYS_CHAR(local_address_s.c_str()));
00054 }
00055
00056 GET_CONFIG_VALUE(cf, sect, ACE_TEXT("send_buffer_size"), this->send_buffer_size_, ACE_UINT32);
00057
00058 GET_CONFIG_VALUE(cf, sect, ACE_TEXT("rcv_buffer_size"), this->rcv_buffer_size_, ACE_UINT32);
00059
00060 return 0;
00061 }
00062
00063 OPENDDS_STRING
00064 UdpInst::dump_to_str() const
00065 {
00066 std::ostringstream os;
00067 os << TransportInst::dump_to_str() << std::endl;
00068
00069 os << formatNameForDump("local_address") << this->local_address().get_host_addr()
00070 << ":" << this->local_address().get_port_number() << std::endl;
00071 os << formatNameForDump("send_buffer_size") << this->send_buffer_size_ << std::endl;
00072 os << formatNameForDump("rcv_buffer_size") << this->rcv_buffer_size_ << std::endl;
00073 return OPENDDS_STRING(os.str());
00074 }
00075
00076 size_t
00077 UdpInst::populate_locator(OpenDDS::DCPS::TransportLocator& info) const
00078 {
00079 if (this->local_address() != ACE_INET_Addr()) {
00080 NetworkAddress network_address;
00081 if (!this->local_address_string().empty()) {
00082 network_address = NetworkAddress(this->local_address_string());
00083 } else {
00084 network_address = NetworkAddress(this->local_address(), true);
00085 }
00086 ACE_OutputCDR cdr;
00087 cdr << network_address;
00088
00089 const CORBA::ULong len = static_cast<CORBA::ULong>(cdr.total_length());
00090 char* buffer = const_cast<char*>(cdr.buffer());
00091
00092 info.transport_type = "udp";
00093 info.data = TransportBLOB(len, len, reinterpret_cast<CORBA::Octet*>(buffer));
00094 return 1;
00095 } else {
00096 return 0;
00097 }
00098 }
00099
00100 }
00101 }
00102
00103 OPENDDS_END_VERSIONED_NAMESPACE_DECL