UdpInst.cpp

Go to the documentation of this file.
00001 /*
00002  *
00003  *
00004  * Distributed under the OpenDDS License.
00005  * See: http://www.opendds.org/license.html
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); // delegate to parent
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()); // safe
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 } // namespace DCPS
00101 } // namespace OpenDDS
00102 
00103 OPENDDS_END_VERSIONED_NAMESPACE_DECL
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1