00001 /* 00002 * 00003 * 00004 * Distributed under the OpenDDS License. 00005 * See: http://www.opendds.org/license.html 00006 */ 00007 00008 #ifndef DCPS_RTPSUDPINST_H 00009 #define DCPS_RTPSUDPINST_H 00010 00011 #include "Rtps_Udp_Export.h" 00012 00013 #include "dds/DCPS/transport/framework/TransportInst.h" 00014 #include "dds/DCPS/SafetyProfileStreams.h" 00015 00016 OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL 00017 00018 namespace OpenDDS { 00019 namespace RTPS { 00020 class Sedp; 00021 } 00022 00023 namespace DCPS { 00024 class RtpsUdpTransport; 00025 class TransportReceiveListener; 00026 typedef RcHandle<TransportReceiveListener> TransportReceiveListener_rch; 00027 00028 class OpenDDS_Rtps_Udp_Export RtpsUdpInst : public TransportInst { 00029 public: 00030 ACE_INT32 send_buffer_size_; 00031 ACE_INT32 rcv_buffer_size_; 00032 00033 bool use_multicast_; 00034 unsigned char ttl_; 00035 ACE_INET_Addr multicast_group_address_; 00036 OPENDDS_STRING multicast_interface_; 00037 00038 size_t nak_depth_; 00039 ACE_Time_Value nak_response_delay_, heartbeat_period_, 00040 heartbeat_response_delay_, handshake_timeout_, durable_data_timeout_; 00041 00042 virtual int load(ACE_Configuration_Heap& cf, 00043 ACE_Configuration_Section_Key& sect); 00044 00045 /// Diagnostic aid. 00046 virtual OPENDDS_STRING dump_to_str() const; 00047 00048 bool is_reliable() const { return true; } 00049 bool requires_cdr() const { return true; } 00050 00051 virtual size_t populate_locator(OpenDDS::DCPS::TransportLocator& trans_info) const; 00052 const TransportBLOB* get_blob(const OpenDDS::DCPS::TransportLocatorSeq& trans_info) const; 00053 00054 OPENDDS_STRING local_address_string() const { return local_address_config_str_; } 00055 ACE_INET_Addr local_address() const { return local_address_; } 00056 void local_address(const char* str) 00057 { 00058 local_address_config_str_ = str; 00059 local_address_.set(str); 00060 } 00061 void local_address(u_short port_number, const char* host_name) 00062 { 00063 local_address_config_str_ = host_name; 00064 local_address_config_str_ += ":" + to_dds_string(port_number); 00065 local_address_.set(port_number, host_name); 00066 } 00067 void local_address_set_port(u_short port_number) { 00068 local_address_.set_port_number(port_number); 00069 set_port_in_addr_string(local_address_config_str_, port_number); 00070 } 00071 00072 private: 00073 friend class RtpsUdpType; 00074 template <typename T, typename U> 00075 friend RcHandle<T> OpenDDS::DCPS::make_rch(U const&); 00076 explicit RtpsUdpInst(const OPENDDS_STRING& name); 00077 00078 TransportImpl_rch new_impl(); 00079 00080 friend class RTPS::Sedp; 00081 friend class RtpsUdpTransport; 00082 TransportReceiveListener_rch opendds_discovery_default_listener_; 00083 RepoId opendds_discovery_guid_; 00084 00085 ACE_INET_Addr local_address_; 00086 OPENDDS_STRING local_address_config_str_; 00087 }; 00088 00089 } // namespace DCPS 00090 } // namespace OpenDDS 00091 00092 OPENDDS_END_VERSIONED_NAMESPACE_DECL 00093 00094 #endif /* DCPS_RTPSUDPINST_H */