From b5bd26aa781e547905b4133117f5f240dc33d863 Mon Sep 17 00:00:00 2001 From: "Justin R. Wilson" Date: Fri, 20 Jan 2023 14:51:05 -0600 Subject: [PATCH 1/3] Factor out DiscoveredParticipant, DiscoveredPublication, DiscoveredSubscription Problem ------- Sedp.h is too big. Solution -------- Make Sedp.h smaller by factoring out data structures. --- dds/DCPS/RTPS/DiscoveredEntities.h | 324 ++++++++++++++++++ dds/DCPS/RTPS/Sedp.h | 317 +---------------- dds/DCPS/Time_Helper.h | 3 + dds/DCPS/Time_Helper.inl | 6 + .../dds/DCPS/RTPS/DiscoveredEntities.cpp | 193 +++++++++++ tests/unit-tests/dds/DCPS/Time_Helper.cpp | 135 ++++---- 6 files changed, 612 insertions(+), 366 deletions(-) create mode 100644 dds/DCPS/RTPS/DiscoveredEntities.h create mode 100644 tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp diff --git a/dds/DCPS/RTPS/DiscoveredEntities.h b/dds/DCPS/RTPS/DiscoveredEntities.h new file mode 100644 index 00000000000..aec2223a90a --- /dev/null +++ b/dds/DCPS/RTPS/DiscoveredEntities.h @@ -0,0 +1,324 @@ +/* + * Distributed under the OpenDDS License. + * See: http://www.opendds.org/license.html + */ +#ifndef OPENDDS_DCPS_RTPS_DISCOVERED_ENTITIES_H +#define OPENDDS_DCPS_RTPS_DISCOVERED_ENTITIES_H + +#include + +#include "AssociationRecord.h" +#include "RtpsCoreC.h" +#ifdef OPENDDS_SECURITY +# include "RtpsSecurityC.h" +#endif +#include "ICE/Ice.h" + +#include +#include +#include + +#ifndef ACE_LACKS_PRAGMA_ONCE +# pragma once +#endif + +OPENDDS_BEGIN_VERSIONED_NAMESPACE_DECL + +namespace OpenDDS { +namespace RTPS { + +#ifdef OPENDDS_SECURITY +enum AuthState { + AUTH_STATE_HANDSHAKE, + AUTH_STATE_AUTHENTICATED, + AUTH_STATE_UNAUTHENTICATED +}; + +enum HandshakeState { + HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST, //!< Requester should call begin_handshake_request + HANDSHAKE_STATE_BEGIN_HANDSHAKE_REPLY, //!< Replier should call begin_handshake_reply + HANDSHAKE_STATE_PROCESS_HANDSHAKE, //!< Requester and replier should call process handshake + HANDSHAKE_STATE_DONE //!< Handshake concluded or timed out +}; + +typedef Security::SPDPdiscoveredParticipantData ParticipantData_t; +#else +typedef SPDPdiscoveredParticipantData ParticipantData_t; +#endif + +struct DiscoveredParticipant { + DiscoveredParticipant() + : location_ih_(DDS::HANDLE_NIL) + , bit_ih_(DDS::HANDLE_NIL) + , seq_reset_count_(0) +#ifdef OPENDDS_SECURITY + , have_spdp_info_(false) + , have_sedp_info_(false) + , have_auth_req_msg_(false) + , have_handshake_msg_(false) + , handshake_resend_falloff_(DCPS::TimeDuration::zero_value) + , auth_state_(AUTH_STATE_HANDSHAKE) + , handshake_state_(HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST) + , is_requester_(false) + , auth_req_sequence_number_(0) + , handshake_sequence_number_(0) + , identity_handle_(DDS::HANDLE_NIL) + , handshake_handle_(DDS::HANDLE_NIL) + , permissions_handle_(DDS::HANDLE_NIL) + , extended_builtin_endpoints_(0) + , participant_tokens_sent_(false) +#endif + { +#ifdef OPENDDS_SECURITY + security_info_.participant_security_attributes = 0; + security_info_.plugin_participant_security_attributes = 0; +#endif + } + + DiscoveredParticipant(const ParticipantData_t& p, + const DCPS::SequenceNumber& seq, + const DCPS::TimeDuration& resend_period) + : pdata_(p) + , location_ih_(DDS::HANDLE_NIL) + , bit_ih_(DDS::HANDLE_NIL) + , max_seq_(seq) + , seq_reset_count_(0) +#ifdef OPENDDS_SECURITY + , have_spdp_info_(false) + , have_sedp_info_(false) + , have_auth_req_msg_(false) + , have_handshake_msg_(false) + , handshake_resend_falloff_(resend_period) + , auth_state_(AUTH_STATE_HANDSHAKE) + , handshake_state_(HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST) + , is_requester_(false) + , auth_req_sequence_number_(0) + , handshake_sequence_number_(0) + , identity_handle_(DDS::HANDLE_NIL) + , handshake_handle_(DDS::HANDLE_NIL) + , permissions_handle_(DDS::HANDLE_NIL) + , extended_builtin_endpoints_(0) + , participant_tokens_sent_(false) +#endif + { + const DCPS::GUID_t guid = DCPS::make_part_guid(p.participantProxy.guidPrefix); + assign(location_data_.guid, guid); + location_data_.location = 0; + location_data_.change_mask = 0; + location_data_.local_timestamp.sec = 0; + location_data_.local_timestamp.nanosec = 0; + location_data_.ice_timestamp.sec = 0; + location_data_.ice_timestamp.nanosec = 0; + location_data_.relay_timestamp.sec = 0; + location_data_.relay_timestamp.nanosec = 0; + location_data_.local6_timestamp.sec = 0; + location_data_.local6_timestamp.nanosec = 0; + location_data_.ice6_timestamp.sec = 0; + location_data_.ice6_timestamp.nanosec = 0; + location_data_.relay6_timestamp.sec = 0; + location_data_.relay6_timestamp.nanosec = 0; + +#ifdef OPENDDS_SECURITY + security_info_.participant_security_attributes = 0; + security_info_.plugin_participant_security_attributes = 0; +#else + ACE_UNUSED_ARG(resend_period); +#endif + } + + ParticipantData_t pdata_; + + struct LocationUpdate { + DCPS::ParticipantLocation mask_; + ACE_INET_Addr from_; + DCPS::SystemTimePoint timestamp_; + LocationUpdate() {} + LocationUpdate(DCPS::ParticipantLocation mask, + const ACE_INET_Addr& from, + const DCPS::SystemTimePoint& timestamp) + : mask_(mask), from_(from), timestamp_(timestamp) {} + }; + typedef OPENDDS_VECTOR(LocationUpdate) LocationUpdateList; + LocationUpdateList location_updates_; + DCPS::ParticipantLocationBuiltinTopicData location_data_; + DDS::InstanceHandle_t location_ih_; + + ACE_INET_Addr last_recv_address_; + DCPS::MonotonicTimePoint discovered_at_; + DCPS::MonotonicTimePoint lease_expiration_; + DDS::InstanceHandle_t bit_ih_; + DCPS::SequenceNumber max_seq_; + ACE_UINT16 seq_reset_count_; + typedef OPENDDS_LIST(BuiltinAssociationRecord) BuiltinAssociationRecords; + BuiltinAssociationRecords builtin_pending_records_; + BuiltinAssociationRecords builtin_associated_records_; + typedef OPENDDS_LIST(WriterAssociationRecord_rch) WriterAssociationRecords; + WriterAssociationRecords writer_pending_records_; + WriterAssociationRecords writer_associated_records_; + typedef OPENDDS_LIST(ReaderAssociationRecord_rch) ReaderAssociationRecords; + ReaderAssociationRecords reader_pending_records_; + ReaderAssociationRecords reader_associated_records_; +#ifdef OPENDDS_SECURITY + bool have_spdp_info_; + ICE::AgentInfo spdp_info_; + bool have_sedp_info_; + ICE::AgentInfo sedp_info_; + bool have_auth_req_msg_; + DDS::Security::ParticipantStatelessMessage auth_req_msg_; + bool have_handshake_msg_; + DDS::Security::ParticipantStatelessMessage handshake_msg_; + DCPS::FibonacciSequence handshake_resend_falloff_; + DCPS::MonotonicTimePoint stateless_msg_deadline_; + + DCPS::MonotonicTimePoint handshake_deadline_; + AuthState auth_state_; + HandshakeState handshake_state_; + bool is_requester_; + CORBA::LongLong auth_req_sequence_number_; + CORBA::LongLong handshake_sequence_number_; + + DDS::Security::IdentityToken identity_token_; + DDS::Security::PermissionsToken permissions_token_; + DDS::Security::PropertyQosPolicy property_qos_; + DDS::Security::ParticipantSecurityInfo security_info_; + DDS::Security::IdentityStatusToken identity_status_token_; + DDS::Security::IdentityHandle identity_handle_; + DDS::Security::HandshakeHandle handshake_handle_; + DDS::Security::AuthRequestMessageToken local_auth_request_token_; + DDS::Security::AuthRequestMessageToken remote_auth_request_token_; + DDS::Security::AuthenticatedPeerCredentialToken authenticated_peer_credential_token_; + DDS::Security::SharedSecretHandle_var shared_secret_handle_; + DDS::Security::PermissionsHandle permissions_handle_; + DDS::Security::ParticipantCryptoTokenSeq crypto_tokens_; + DDS::Security::ExtendedBuiltinEndpointSet_t extended_builtin_endpoints_; + bool participant_tokens_sent_; +#endif +}; + +struct DiscoveredSubscription : DCPS::PoolAllocationBase { + DiscoveredSubscription() + : bit_ih_(DDS::HANDLE_NIL) + , participant_discovered_at_(DCPS::monotonic_time_zero()) + , transport_context_(0) +#ifdef OPENDDS_SECURITY + , have_ice_agent_info_(false) +#endif + { +#ifdef OPENDDS_SECURITY + security_attribs_.base = DDS::Security::TopicSecurityAttributes(); + security_attribs_.is_key_protected = 0; + security_attribs_.is_payload_protected = 0; + security_attribs_.is_submessage_protected = 0; + security_attribs_.plugin_endpoint_attributes = 0; +#endif + } + + explicit DiscoveredSubscription(const DCPS::DiscoveredReaderData& r) + : reader_data_(r) + , bit_ih_(DDS::HANDLE_NIL) + , participant_discovered_at_(DCPS::monotonic_time_zero()) + , transport_context_(0) +#ifdef OPENDDS_SECURITY + , security_attribs_(DDS::Security::EndpointSecurityAttributes()) + , have_ice_agent_info_(false) +#endif + { +#ifdef OPENDDS_SECURITY + security_attribs_.base = DDS::Security::TopicSecurityAttributes(); + security_attribs_.is_key_protected = 0; + security_attribs_.is_payload_protected = 0; + security_attribs_.is_submessage_protected = 0; + security_attribs_.plugin_endpoint_attributes = 0; +#endif + } + + DCPS::RepoIdSet matched_endpoints_; + DCPS::DiscoveredReaderData reader_data_; + DDS::InstanceHandle_t bit_ih_; + DCPS::MonotonicTime_t participant_discovered_at_; + ACE_CDR::ULong transport_context_; + XTypes::TypeInformation type_info_; + +#ifdef OPENDDS_SECURITY + DDS::Security::EndpointSecurityAttributes security_attribs_; + bool have_ice_agent_info_; + ICE::AgentInfo ice_agent_info_; +#endif + + const char* get_topic_name() const + { + return reader_data_.ddsSubscriptionData.topic_name; + } + + const char* get_type_name() const + { + return reader_data_.ddsSubscriptionData.type_name; + } +}; + +struct DiscoveredPublication : DCPS::PoolAllocationBase { + DiscoveredPublication() + : bit_ih_(DDS::HANDLE_NIL) + , participant_discovered_at_(DCPS::monotonic_time_zero()) + , transport_context_(0) +#ifdef OPENDDS_SECURITY + , have_ice_agent_info_(false) +#endif + { +#ifdef OPENDDS_SECURITY + security_attribs_.base = DDS::Security::TopicSecurityAttributes(); + security_attribs_.is_key_protected = 0; + security_attribs_.is_payload_protected = 0; + security_attribs_.is_submessage_protected = 0; + security_attribs_.plugin_endpoint_attributes = 0; +#endif + } + + explicit DiscoveredPublication(const DCPS::DiscoveredWriterData& w) + : writer_data_(w) + , bit_ih_(DDS::HANDLE_NIL) + , participant_discovered_at_(DCPS::monotonic_time_zero()) + , transport_context_(0) +#ifdef OPENDDS_SECURITY + , have_ice_agent_info_(false) +#endif + { +#ifdef OPENDDS_SECURITY + security_attribs_.base = DDS::Security::TopicSecurityAttributes(); + security_attribs_.is_key_protected = 0; + security_attribs_.is_payload_protected = 0; + security_attribs_.is_submessage_protected = 0; + security_attribs_.plugin_endpoint_attributes = 0; +#endif + } + + DCPS::RepoIdSet matched_endpoints_; + DCPS::DiscoveredWriterData writer_data_; + DDS::InstanceHandle_t bit_ih_; + DCPS::MonotonicTime_t participant_discovered_at_; + ACE_CDR::ULong transport_context_; + XTypes::TypeInformation type_info_; + +#ifdef OPENDDS_SECURITY + DDS::Security::EndpointSecurityAttributes security_attribs_; + bool have_ice_agent_info_; + ICE::AgentInfo ice_agent_info_; +#endif + + const char* get_topic_name() const + { + return writer_data_.ddsPublicationData.topic_name; + } + + const char* get_type_name() const + { + return writer_data_.ddsPublicationData.type_name; + } +}; + +} +} + +OPENDDS_END_VERSIONED_NAMESPACE_DECL + +#endif // OPENDDS_DCPS_RTPS_DISCOVERED_ENTITIES_H diff --git a/dds/DCPS/RTPS/Sedp.h b/dds/DCPS/RTPS/Sedp.h index 8279b9d814c..1ba6c488c89 100644 --- a/dds/DCPS/RTPS/Sedp.h +++ b/dds/DCPS/RTPS/Sedp.h @@ -7,13 +7,13 @@ #define OPENDDS_DCPS_RTPS_SEDP_H #include "AssociationRecord.h" +#include "DiscoveredEntities.h" #include "TypeLookup.h" #include "MessageTypes.h" #include "MessageUtils.h" #ifdef OPENDDS_SECURITY # include "ParameterListConverter.h" #endif -#include "ICE/Ice.h" #include "RtpsRpcTypeSupportImpl.h" #include "RtpsCoreTypeSupportImpl.h" #ifdef OPENDDS_SECURITY @@ -70,32 +70,10 @@ namespace RTPS { using DCPS::RepoIdSet; using DCPS::AtomicBool; -#ifdef OPENDDS_SECURITY -enum AuthState { - AUTH_STATE_HANDSHAKE, - AUTH_STATE_AUTHENTICATED, - AUTH_STATE_UNAUTHENTICATED -}; - -enum HandshakeState { - HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST, //!< Requester should call begin_handshake_request - HANDSHAKE_STATE_BEGIN_HANDSHAKE_REPLY, //!< Replier should call begin_handshake_reply - HANDSHAKE_STATE_PROCESS_HANDSHAKE, //!< Requester and replier should call process handshake - HANDSHAKE_STATE_DONE //!< Handshake concluded or timed out -}; -#endif - class RtpsDiscovery; class Spdp; -class Sedp; class WaitForAcks; -#ifdef OPENDDS_SECURITY -typedef Security::SPDPdiscoveredParticipantData ParticipantData_t; -#else -typedef SPDPdiscoveredParticipantData ParticipantData_t; -#endif - #ifdef OPENDDS_SECURITY typedef OPENDDS_MAP_CMP(GUID_t, DDS::Security::DatareaderCryptoTokenSeq, GUID_tKeyLessThan) DatareaderCryptoTokenSeqMap; @@ -108,290 +86,7 @@ inline bool has_security_data(Security::DiscoveredParticipantDataKind kind) } #endif -struct DiscoveredParticipant { - - DiscoveredParticipant() - : location_ih_(DDS::HANDLE_NIL) - , bit_ih_(DDS::HANDLE_NIL) - , seq_reset_count_(0) -#ifdef OPENDDS_SECURITY - , have_spdp_info_(false) - , have_sedp_info_(false) - , have_auth_req_msg_(false) - , have_handshake_msg_(false) - , handshake_resend_falloff_(TimeDuration::zero_value) - , auth_state_(AUTH_STATE_HANDSHAKE) - , handshake_state_(HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST) - , is_requester_(false) - , auth_req_sequence_number_(0) - , handshake_sequence_number_(0) - , identity_handle_(DDS::HANDLE_NIL) - , handshake_handle_(DDS::HANDLE_NIL) - , permissions_handle_(DDS::HANDLE_NIL) - , extended_builtin_endpoints_(0) - , participant_tokens_sent_(false) -#endif - { -#ifdef OPENDDS_SECURITY - security_info_.participant_security_attributes = 0; - security_info_.plugin_participant_security_attributes = 0; -#endif - } - - DiscoveredParticipant(const ParticipantData_t& p, - const SequenceNumber& seq, - const TimeDuration& resend_period) - : pdata_(p) - , location_ih_(DDS::HANDLE_NIL) - , bit_ih_(DDS::HANDLE_NIL) - , max_seq_(seq) - , seq_reset_count_(0) -#ifdef OPENDDS_SECURITY - , have_spdp_info_(false) - , have_sedp_info_(false) - , have_auth_req_msg_(false) - , have_handshake_msg_(false) - , handshake_resend_falloff_(resend_period) - , auth_state_(AUTH_STATE_HANDSHAKE) - , handshake_state_(HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST) - , is_requester_(false) - , auth_req_sequence_number_(0) - , handshake_sequence_number_(0) - , identity_handle_(DDS::HANDLE_NIL) - , handshake_handle_(DDS::HANDLE_NIL) - , permissions_handle_(DDS::HANDLE_NIL) - , extended_builtin_endpoints_(0) - , participant_tokens_sent_(false) -#endif - { - const GUID_t guid = DCPS::make_part_guid(p.participantProxy.guidPrefix); - assign(location_data_.guid, guid); - location_data_.location = 0; - location_data_.change_mask = 0; - location_data_.local_timestamp.sec = 0; - location_data_.local_timestamp.nanosec = 0; - location_data_.ice_timestamp.sec = 0; - location_data_.ice_timestamp.nanosec = 0; - location_data_.relay_timestamp.sec = 0; - location_data_.relay_timestamp.nanosec = 0; - location_data_.local6_timestamp.sec = 0; - location_data_.local6_timestamp.nanosec = 0; - location_data_.ice6_timestamp.sec = 0; - location_data_.ice6_timestamp.nanosec = 0; - location_data_.relay6_timestamp.sec = 0; - location_data_.relay6_timestamp.nanosec = 0; - -#ifdef OPENDDS_SECURITY - security_info_.participant_security_attributes = 0; - security_info_.plugin_participant_security_attributes = 0; -#else - ACE_UNUSED_ARG(resend_period); -#endif - } - - ParticipantData_t pdata_; - - struct LocationUpdate { - DCPS::ParticipantLocation mask_; - ACE_INET_Addr from_; - SystemTimePoint timestamp_; - LocationUpdate() {} - LocationUpdate(DCPS::ParticipantLocation mask, - const ACE_INET_Addr& from, - const SystemTimePoint& timestamp) - : mask_(mask), from_(from), timestamp_(timestamp) {} - }; - typedef OPENDDS_VECTOR(LocationUpdate) LocationUpdateList; - LocationUpdateList location_updates_; - DCPS::ParticipantLocationBuiltinTopicData location_data_; - DDS::InstanceHandle_t location_ih_; - - ACE_INET_Addr last_recv_address_; - MonotonicTimePoint discovered_at_; - MonotonicTimePoint lease_expiration_; - DDS::InstanceHandle_t bit_ih_; - SequenceNumber max_seq_; - ACE_UINT16 seq_reset_count_; - typedef OPENDDS_LIST(BuiltinAssociationRecord) BuiltinAssociationRecords; - BuiltinAssociationRecords builtin_pending_records_; - BuiltinAssociationRecords builtin_associated_records_; - typedef OPENDDS_LIST(WriterAssociationRecord_rch) WriterAssociationRecords; - WriterAssociationRecords writer_pending_records_; - WriterAssociationRecords writer_associated_records_; - typedef OPENDDS_LIST(ReaderAssociationRecord_rch) ReaderAssociationRecords; - ReaderAssociationRecords reader_pending_records_; - ReaderAssociationRecords reader_associated_records_; -#ifdef OPENDDS_SECURITY - bool have_spdp_info_; - ICE::AgentInfo spdp_info_; - bool have_sedp_info_; - ICE::AgentInfo sedp_info_; - bool have_auth_req_msg_; - DDS::Security::ParticipantStatelessMessage auth_req_msg_; - bool have_handshake_msg_; - DDS::Security::ParticipantStatelessMessage handshake_msg_; - DCPS::FibonacciSequence handshake_resend_falloff_; - MonotonicTimePoint stateless_msg_deadline_; - - MonotonicTimePoint handshake_deadline_; - AuthState auth_state_; - HandshakeState handshake_state_; - bool is_requester_; - CORBA::LongLong auth_req_sequence_number_; - CORBA::LongLong handshake_sequence_number_; - - DDS::Security::IdentityToken identity_token_; - DDS::Security::PermissionsToken permissions_token_; - DDS::Security::PropertyQosPolicy property_qos_; - DDS::Security::ParticipantSecurityInfo security_info_; - DDS::Security::IdentityStatusToken identity_status_token_; - DDS::Security::IdentityHandle identity_handle_; - DDS::Security::HandshakeHandle handshake_handle_; - DDS::Security::AuthRequestMessageToken local_auth_request_token_; - DDS::Security::AuthRequestMessageToken remote_auth_request_token_; - DDS::Security::AuthenticatedPeerCredentialToken authenticated_peer_credential_token_; - DDS::Security::SharedSecretHandle_var shared_secret_handle_; - DDS::Security::PermissionsHandle permissions_handle_; - DDS::Security::ParticipantCryptoTokenSeq crypto_tokens_; - DDS::Security::ExtendedBuiltinEndpointSet_t extended_builtin_endpoints_; - bool participant_tokens_sent_; -#endif -}; - class Sedp : public virtual DCPS::RcEventHandler { -private: - struct DiscoveredSubscription : PoolAllocationBase { - DiscoveredSubscription() - : bit_ih_(DDS::HANDLE_NIL) - , participant_discovered_at_(DCPS::monotonic_time_zero()) - , transport_context_(0) -#ifdef OPENDDS_SECURITY - , have_ice_agent_info_(false) -#endif - { -#ifdef OPENDDS_SECURITY - security_attribs_.base = DDS::Security::TopicSecurityAttributes(); - security_attribs_.is_key_protected = 0; - security_attribs_.is_payload_protected = 0; - security_attribs_.is_submessage_protected = 0; - security_attribs_.plugin_endpoint_attributes = 0; -#endif - } - - explicit DiscoveredSubscription(const DCPS::DiscoveredReaderData& r) - : reader_data_(r) - , bit_ih_(DDS::HANDLE_NIL) - , participant_discovered_at_(DCPS::monotonic_time_zero()) - , transport_context_(0) -#ifdef OPENDDS_SECURITY - , security_attribs_(DDS::Security::EndpointSecurityAttributes()) - , have_ice_agent_info_(false) -#endif - { -#ifdef OPENDDS_SECURITY - security_attribs_.base = DDS::Security::TopicSecurityAttributes(); - security_attribs_.is_key_protected = 0; - security_attribs_.is_payload_protected = 0; - security_attribs_.is_submessage_protected = 0; - security_attribs_.plugin_endpoint_attributes = 0; -#endif - } - - RepoIdSet matched_endpoints_; - DCPS::DiscoveredReaderData reader_data_; - DDS::InstanceHandle_t bit_ih_; - DCPS::MonotonicTime_t participant_discovered_at_; - ACE_CDR::ULong transport_context_; - XTypes::TypeInformation type_info_; - -#ifdef OPENDDS_SECURITY - DDS::Security::EndpointSecurityAttributes security_attribs_; - bool have_ice_agent_info_; - ICE::AgentInfo ice_agent_info_; -#endif - - const char* get_topic_name() const - { - return reader_data_.ddsSubscriptionData.topic_name; - } - - const char* get_type_name() const - { - return reader_data_.ddsSubscriptionData.type_name; - } - }; - - typedef OPENDDS_MAP_CMP(GUID_t, DiscoveredSubscription, - GUID_tKeyLessThan) DiscoveredSubscriptionMap; - - typedef DiscoveredSubscriptionMap::iterator DiscoveredSubscriptionIter; - - struct DiscoveredPublication : PoolAllocationBase { - DiscoveredPublication() - : bit_ih_(DDS::HANDLE_NIL) - , participant_discovered_at_(DCPS::monotonic_time_zero()) - , transport_context_(0) -#ifdef OPENDDS_SECURITY - , have_ice_agent_info_(false) -#endif - { -#ifdef OPENDDS_SECURITY - security_attribs_.base = DDS::Security::TopicSecurityAttributes(); - security_attribs_.is_key_protected = 0; - security_attribs_.is_payload_protected = 0; - security_attribs_.is_submessage_protected = 0; - security_attribs_.plugin_endpoint_attributes = 0; -#endif - } - - explicit DiscoveredPublication(const DCPS::DiscoveredWriterData& w) - : writer_data_(w) - , bit_ih_(DDS::HANDLE_NIL) - , participant_discovered_at_(DCPS::monotonic_time_zero()) - , transport_context_(0) -#ifdef OPENDDS_SECURITY - , have_ice_agent_info_(false) -#endif - { -#ifdef OPENDDS_SECURITY - security_attribs_.base = DDS::Security::TopicSecurityAttributes(); - security_attribs_.is_key_protected = 0; - security_attribs_.is_payload_protected = 0; - security_attribs_.is_submessage_protected = 0; - security_attribs_.plugin_endpoint_attributes = 0; -#endif - } - - RepoIdSet matched_endpoints_; - DCPS::DiscoveredWriterData writer_data_; - DDS::InstanceHandle_t bit_ih_; - DCPS::MonotonicTime_t participant_discovered_at_; - ACE_CDR::ULong transport_context_; - XTypes::TypeInformation type_info_; - -#ifdef OPENDDS_SECURITY - DDS::Security::EndpointSecurityAttributes security_attribs_; - bool have_ice_agent_info_; - ICE::AgentInfo ice_agent_info_; -#endif - - const char* get_topic_name() const - { - return writer_data_.ddsPublicationData.topic_name; - } - - const char* get_type_name() const - { - return writer_data_.ddsPublicationData.type_name; - } - }; - - typedef OPENDDS_MAP_CMP(GUID_t, DiscoveredPublication, - GUID_tKeyLessThan) DiscoveredPublicationMap; - typedef DiscoveredPublicationMap::iterator DiscoveredPublicationIter; - - void populate_origination_locator(const GUID_t& id, DCPS::TransportLocator& tl); - public: Sedp(const DCPS::GUID_t& participant_id, Spdp& owner, @@ -583,6 +278,16 @@ class Sedp : public virtual DCPS::RcEventHandler { DCPS::TypeObjReqCond& cond); private: + typedef OPENDDS_MAP_CMP(GUID_t, DiscoveredSubscription, + GUID_tKeyLessThan) DiscoveredSubscriptionMap; + typedef DiscoveredSubscriptionMap::iterator DiscoveredSubscriptionIter; + + typedef OPENDDS_MAP_CMP(GUID_t, DiscoveredPublication, + GUID_tKeyLessThan) DiscoveredPublicationMap; + typedef DiscoveredPublicationMap::iterator DiscoveredPublicationIter; + + void populate_origination_locator(const GUID_t& id, DCPS::TransportLocator& tl); + bool remote_knows_about_local_i(const GUID_t& local, const GUID_t& remote) const; #ifdef OPENDDS_SECURITY bool remote_is_authenticated_i(const GUID_t& local, const GUID_t& remote, const DiscoveredParticipant& participant) const; diff --git a/dds/DCPS/Time_Helper.h b/dds/DCPS/Time_Helper.h index b9a4ab5fe80..dfce9e7bbd5 100644 --- a/dds/DCPS/Time_Helper.h +++ b/dds/DCPS/Time_Helper.h @@ -109,6 +109,9 @@ DDS::Duration_t operator-(const MonotonicTime_t& t1, const MonotonicTime_t& t2); ACE_INLINE OpenDDS_Dcps_Export bool operator<(const MonotonicTime_t& t1, const MonotonicTime_t& t2); +ACE_INLINE OpenDDS_Dcps_Export +bool operator==(const MonotonicTime_t& t1, const MonotonicTime_t& t2); + ACE_INLINE OpenDDS_Dcps_Export ACE_UINT32 uint32_fractional_seconds_to_nanoseconds(ACE_UINT32 fraction); diff --git a/dds/DCPS/Time_Helper.inl b/dds/DCPS/Time_Helper.inl index 76cd3cdbdeb..1719804f98f 100644 --- a/dds/DCPS/Time_Helper.inl +++ b/dds/DCPS/Time_Helper.inl @@ -166,6 +166,12 @@ operator<(const MonotonicTime_t& t1, const MonotonicTime_t& t2) return t1.sec < t2.sec || (t1.sec == t2.sec && t1.nanosec < t2.nanosec); } +ACE_INLINE bool +operator==(const MonotonicTime_t& t1, const MonotonicTime_t& t2) +{ + return t1.sec == t2.sec && t1.nanosec == t2.nanosec; +} + ACE_INLINE ACE_Time_Value time_to_time_value(const DDS::Time_t& t) { diff --git a/tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp b/tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp new file mode 100644 index 00000000000..42dacb566d6 --- /dev/null +++ b/tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp @@ -0,0 +1,193 @@ +/* + * + * + * Distributed under the OpenDDS License. + * See: http://www.opendds.org/license.html + */ + +#include +#include + +#include + +using namespace OpenDDS::DCPS; +using namespace OpenDDS::RTPS; + +TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredParticipant_ctor) +{ + { + DiscoveredParticipant uut; + + EXPECT_EQ(uut.location_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.seq_reset_count_, 0); +#ifdef OPENDDS_SECURITY + EXPECT_EQ(uut.have_spdp_info_, false); + EXPECT_EQ(uut.have_sedp_info_, false); + EXPECT_EQ(uut.have_auth_req_msg_, false); + EXPECT_EQ(uut.have_handshake_msg_, false); + EXPECT_EQ(uut.handshake_resend_falloff_.get(), TimeDuration::zero_value); + EXPECT_EQ(uut.auth_state_, AUTH_STATE_HANDSHAKE); + EXPECT_EQ(uut.handshake_state_, HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST); + EXPECT_EQ(uut.is_requester_, false); + EXPECT_EQ(uut.auth_req_sequence_number_, 0); + EXPECT_EQ(uut.handshake_sequence_number_, 0); + EXPECT_EQ(uut.identity_handle_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.handshake_handle_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.permissions_handle_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.extended_builtin_endpoints_, 0u); + EXPECT_EQ(uut.participant_tokens_sent_, false); + EXPECT_EQ(uut.security_info_.participant_security_attributes, 0u); + EXPECT_EQ(uut.security_info_.plugin_participant_security_attributes, 0u); +#endif + } + + { + ParticipantData_t p; + p.participantProxy.guidPrefix[0] = 83; + SequenceNumber seq(84); + TimeDuration resend_period(85); + DiscoveredParticipant uut(p, seq, resend_period); + + // Can't compared IDL defined type. + //EXPECT_EQ(uut.pdata_, p); + EXPECT_EQ(uut.location_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.max_seq_, seq); + EXPECT_EQ(uut.seq_reset_count_, 0); + GUID_t guid; + std::memcpy(&guid, uut.location_data_.guid, sizeof(guid)); + EXPECT_EQ(guid, make_part_guid(p.participantProxy.guidPrefix)); + + EXPECT_EQ(uut.location_data_.location, 0); + EXPECT_EQ(uut.location_data_.change_mask, 0); + EXPECT_EQ(uut.location_data_.local_timestamp.sec, 0); + EXPECT_EQ(uut.location_data_.local_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.ice_timestamp.sec, 0); + EXPECT_EQ(uut.location_data_.ice_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.relay_timestamp.sec, 0); + EXPECT_EQ(uut.location_data_.relay_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.local6_timestamp.sec, 0); + EXPECT_EQ(uut.location_data_.local6_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.ice6_timestamp.sec, 0); + EXPECT_EQ(uut.location_data_.ice6_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.relay6_timestamp.sec, 0); + EXPECT_EQ(uut.location_data_.relay6_timestamp.nanosec, 0); + +#ifdef OPENDDS_SECURITY + EXPECT_EQ(uut.have_spdp_info_, false); + EXPECT_EQ(uut.have_sedp_info_, false); + EXPECT_EQ(uut.have_auth_req_msg_, false); + EXPECT_EQ(uut.have_handshake_msg_, false); + EXPECT_EQ(uut.handshake_resend_falloff_.get(), resend_period); + EXPECT_EQ(uut.auth_state_, AUTH_STATE_HANDSHAKE); + EXPECT_EQ(uut.handshake_state_, HANDSHAKE_STATE_BEGIN_HANDSHAKE_REQUEST); + EXPECT_EQ(uut.is_requester_, false); + EXPECT_EQ(uut.auth_req_sequence_number_, 0); + EXPECT_EQ(uut.handshake_sequence_number_, 0); + EXPECT_EQ(uut.identity_handle_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.handshake_handle_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.permissions_handle_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.extended_builtin_endpoints_, 0u); + EXPECT_EQ(uut.participant_tokens_sent_, false); + EXPECT_EQ(uut.security_info_.participant_security_attributes, 0u); + EXPECT_EQ(uut.security_info_.plugin_participant_security_attributes, 0u); +#endif + } +} + +TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredSubscription_ctor) +{ + { + DiscoveredSubscription uut; + + EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); + EXPECT_EQ(uut.transport_context_, 0); +#ifdef OPENDDS_SECURITY + EXPECT_EQ(uut.have_ice_agent_info_, false); + // Can't compare IDL defined type. + //EXPECT_EQ(uut.security_attribs_.base, DDS::Security::TopicSecurityAttributes()); + EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); +#endif + EXPECT_STREQ(uut.get_topic_name(), ""); + EXPECT_STREQ(uut.get_type_name(), ""); + } + + { + DiscoveredReaderData r; + r.ddsSubscriptionData.topic_name = "a topic"; + r.ddsSubscriptionData.type_name = "a type"; + DiscoveredSubscription uut(r); + + // Can't compare IDL defined type. + //EXPECT_EQ(uut.reader_data_, r); + EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); + EXPECT_EQ(uut.transport_context_, 0); +#ifdef OPENDDS_SECURITY + // Can't compare IDL defined type. + //EXPECT_EQ(uut.security_attribs_, DDS::Security::EndpointSecurityAttributes()); + EXPECT_EQ(uut.have_ice_agent_info_, false); + // Can't compare IDL defined type. + //EXPECT_EQ(uut.security_attribs_.base, DDS::Security::TopicSecurityAttributes()); + EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); +#endif + EXPECT_STREQ(uut.get_topic_name(), "a topic"); + EXPECT_STREQ(uut.get_type_name(), "a type"); + } +} + +TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredPublication_ctor) +{ + { + DiscoveredPublication uut; + + EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); + EXPECT_EQ(uut.transport_context_, 0); +#ifdef OPENDDS_SECURITY + EXPECT_EQ(uut.have_ice_agent_info_, false); + // Can't compare IDL defined type. + //EXPECT_EQ(uut.security_attribs_.base, DDS::Security::TopicSecurityAttributes()); + EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); +#endif + EXPECT_STREQ(uut.get_topic_name(), ""); + EXPECT_STREQ(uut.get_type_name(), ""); + } + + { + DiscoveredWriterData w; + w.ddsPublicationData.topic_name = "a topic"; + w.ddsPublicationData.type_name = "a type"; + DiscoveredPublication uut(w); + + // Can't compare IDL defined type. + //EXPECT_EQ(uut.reader_data_, r); + EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); + EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); + EXPECT_EQ(uut.transport_context_, 0); +#ifdef OPENDDS_SECURITY + // Can't compare IDL defined type. + //EXPECT_EQ(uut.security_attribs_, DDS::Security::EndpointSecurityAttributes()); + EXPECT_EQ(uut.have_ice_agent_info_, false); + // Can't compare IDL defined type. + //EXPECT_EQ(uut.security_attribs_.base, DDS::Security::TopicSecurityAttributes()); + EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); + EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); +#endif + EXPECT_STREQ(uut.get_topic_name(), "a topic"); + EXPECT_STREQ(uut.get_type_name(), "a type"); + } +} diff --git a/tests/unit-tests/dds/DCPS/Time_Helper.cpp b/tests/unit-tests/dds/DCPS/Time_Helper.cpp index 985ab6f7dee..17dc94e62bf 100644 --- a/tests/unit-tests/dds/DCPS/Time_Helper.cpp +++ b/tests/unit-tests/dds/DCPS/Time_Helper.cpp @@ -16,67 +16,82 @@ using namespace OpenDDS::DCPS; -TEST(dds_DCPS_Time_Helper, maintest) +const DDS::Duration_t infinite_duration = { ::DDS::DURATION_INFINITE_SEC, ::DDS::DURATION_INFINITE_NSEC }; + +TEST(dds_DCPS_Time_Helper, infinite_duration_to_time_value) +{ + const ACE_Time_Value tv = duration_to_time_value(infinite_duration); + // see value. + //time_t sec = tv.sec (); + //suseconds_t usec = tv.usec (); + //unsigned long msec = tv.msec (); + + //std::cout << "infinite sec and nsec convert to time value: sec=" + // << sec << " usec=" << usec << " msec=" << msec << std::endl; + + EXPECT_TRUE(tv.sec() == ACE_Time_Value::max_time.sec() + || tv.sec() == (time_t)(infinite_duration.sec + infinite_duration.nanosec/1000/ACE_ONE_SECOND_IN_USECS)); + EXPECT_TRUE(tv.usec() == ACE_Time_Value::max_time.usec() + || tv.usec() == (suseconds_t)(infinite_duration.nanosec/1000%ACE_ONE_SECOND_IN_USECS)); +} + +TEST(dds_DCPS_Time_Helper, infinite_duration_to_absolute_time_value) +{ + const ACE_Time_Value now = SystemTimePoint::now().value(); + const ACE_Time_Value tv = duration_to_absolute_time_value(infinite_duration, now); + // see value. + //time_t sec = tv.sec (); + //suseconds_t usec = tv.usec (); + //unsigned long msec = tv.msec (); + + //std::cout << "infinite sec and nsec convert to absolute time value: sec=" + // << sec << " usec=" << usec << " msec=" << msec << std::endl; + + EXPECT_TRUE(tv.sec() == ACE_Time_Value::max_time.sec() + || tv.sec() == infinite_duration.sec + now.sec() + (time_t)((infinite_duration.nanosec/1000 + now.usec ())/ACE_ONE_SECOND_IN_USECS)); + EXPECT_TRUE(tv.usec() == ACE_Time_Value::max_time.usec() + || tv.usec() == (suseconds_t)(infinite_duration.nanosec/1000 + now.usec ())%ACE_ONE_SECOND_IN_USECS); +} + +TEST(dds_DCPS_Time_Helper, finite_duration_to_time_value) { DDS::Duration_t duration; - duration.sec = ::DDS::DURATION_INFINITE_SEC; + duration.sec = ::DDS::DURATION_INFINITE_SEC - 2; duration.nanosec = ::DDS::DURATION_INFINITE_NSEC; - { - const ACE_Time_Value tv = duration_to_time_value(duration); - // see value. - //time_t sec = tv.sec (); - //suseconds_t usec = tv.usec (); - //unsigned long msec = tv.msec (); - - //std::cout << "infinite sec and nsec convert to time value: sec=" - // << sec << " usec=" << usec << " msec=" << msec << std::endl; - - EXPECT_TRUE (tv.sec() == ACE_Time_Value::max_time.sec() - || tv.sec() == (time_t)(duration.sec + duration.nanosec/1000/ACE_ONE_SECOND_IN_USECS)); - EXPECT_TRUE (tv.usec() == ACE_Time_Value::max_time.usec() - || tv.usec() == (suseconds_t)(duration.nanosec/1000%ACE_ONE_SECOND_IN_USECS)); - } - - { - const ACE_Time_Value now = SystemTimePoint::now().value(); - const ACE_Time_Value tv = duration_to_absolute_time_value(duration, now); - // see value. - //time_t sec = tv.sec (); - //suseconds_t usec = tv.usec (); - //unsigned long msec = tv.msec (); - - //std::cout << "infinite sec and nsec convert to absolute time value: sec=" - // << sec << " usec=" << usec << " msec=" << msec << std::endl; - - EXPECT_TRUE (tv.sec() == ACE_Time_Value::max_time.sec() - || tv.sec() == duration.sec + now.sec() + (time_t)((duration.nanosec/1000 + now.usec ())/ACE_ONE_SECOND_IN_USECS)); - EXPECT_TRUE (tv.usec() == ACE_Time_Value::max_time.usec() - || tv.usec() == (suseconds_t)(duration.nanosec/1000 + now.usec ())%ACE_ONE_SECOND_IN_USECS); - } - { - duration.sec = ::DDS::DURATION_INFINITE_SEC - 2; - duration.nanosec = ::DDS::DURATION_INFINITE_NSEC; - const ACE_Time_Value tv = duration_to_time_value(duration); - // see value. - //time_t sec = tv.sec (); - //suseconds_t usec = tv.usec (); - //unsigned long msec = tv.msec (); - - //std::cout << "finite sec convert to time value: sec=" - // << sec << " usec=" << usec << " msec=" << msec << std::endl; - - EXPECT_TRUE (tv.sec() == duration.sec + (time_t)(duration.nanosec/1000/ACE_ONE_SECOND_IN_USECS)); - EXPECT_TRUE (tv.usec() == (suseconds_t)(duration.nanosec/1000%ACE_ONE_SECOND_IN_USECS)); - EXPECT_TRUE (tv < ACE_Time_Value::max_time); - } - { - DDS::Time_t tt1 = {3,1}; - DDS::Time_t tt2 = {1,3}; - DDS::Duration_t result1 = tt2 - tt1; - DDS::Duration_t result2 = tt1 - tt2; - // std::cout << "tt2 - tt1 : " << result1.sec << " : " << result1.nanosec << std::endl; - // std::cout << "tt1 - tt2 : " << result2.sec << " : " << result2.nanosec << std::endl; - EXPECT_TRUE (result1.sec == -2 && result1.nanosec == 2); - EXPECT_TRUE (result2.sec == 1 && result2.nanosec == 999999998); - } + const ACE_Time_Value tv = duration_to_time_value(duration); + // see value. + //time_t sec = tv.sec (); + //suseconds_t usec = tv.usec (); + //unsigned long msec = tv.msec (); + + //std::cout << "finite sec convert to time value: sec=" + // << sec << " usec=" << usec << " msec=" << msec << std::endl; + + EXPECT_TRUE(tv.sec() == duration.sec + (time_t)(duration.nanosec/1000/ACE_ONE_SECOND_IN_USECS)); + EXPECT_TRUE(tv.usec() == (suseconds_t)(duration.nanosec/1000%ACE_ONE_SECOND_IN_USECS)); + EXPECT_TRUE(tv < ACE_Time_Value::max_time); +} + +TEST(dds_DCPS_Time_Helper, Duration_t_difference) +{ + const DDS::Time_t tt1 = {3,1}; + const DDS::Time_t tt2 = {1,3}; + const DDS::Duration_t result1 = tt2 - tt1; + const DDS::Duration_t result2 = tt1 - tt2; + // std::cout << "tt2 - tt1 : " << result1.sec << " : " << result1.nanosec << std::endl; + // std::cout << "tt1 - tt2 : " << result2.sec << " : " << result2.nanosec << std::endl; + EXPECT_TRUE(result1.sec == -2 && result1.nanosec == 2); + EXPECT_TRUE(result2.sec == 1 && result2.nanosec == 999999998); +} + +TEST(dds_DCPS_Time_Helper, MonotonicTime_t_equal) +{ + const MonotonicTime_t tt1 = {3,1}; + const MonotonicTime_t tt2 = {1,3}; + const MonotonicTime_t tt3 = {3,1}; + EXPECT_EQ(tt1, tt1); + EXPECT_EQ(tt1, tt3); + EXPECT_EQ(tt3, tt1); + EXPECT_TRUE(!(tt1 == tt2)); + EXPECT_TRUE(!(tt2 == tt1)); } From 3be4483c9d70411b091daa8879896ea5367dad44 Mon Sep 17 00:00:00 2001 From: "Justin R. Wilson" Date: Tue, 24 Jan 2023 11:22:50 -0600 Subject: [PATCH 2/3] Fix CI issues in unit test --- .../dds/DCPS/RTPS/DiscoveredEntities.cpp | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp b/tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp index 42dacb566d6..6082b87d79d 100644 --- a/tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp +++ b/tests/unit-tests/dds/DCPS/RTPS/DiscoveredEntities.cpp @@ -9,6 +9,7 @@ #include #include +#include using namespace OpenDDS::DCPS; using namespace OpenDDS::RTPS; @@ -44,6 +45,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredParticipant_ctor) { ParticipantData_t p; + std::memset(p.participantProxy.guidPrefix, 0, sizeof(p.participantProxy.guidPrefix)); p.participantProxy.guidPrefix[0] = 83; SequenceNumber seq(84); TimeDuration resend_period(85); @@ -59,20 +61,20 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredParticipant_ctor) std::memcpy(&guid, uut.location_data_.guid, sizeof(guid)); EXPECT_EQ(guid, make_part_guid(p.participantProxy.guidPrefix)); - EXPECT_EQ(uut.location_data_.location, 0); - EXPECT_EQ(uut.location_data_.change_mask, 0); + EXPECT_EQ(uut.location_data_.location, 0u); + EXPECT_EQ(uut.location_data_.change_mask, 0u); EXPECT_EQ(uut.location_data_.local_timestamp.sec, 0); - EXPECT_EQ(uut.location_data_.local_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.local_timestamp.nanosec, 0u); EXPECT_EQ(uut.location_data_.ice_timestamp.sec, 0); - EXPECT_EQ(uut.location_data_.ice_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.ice_timestamp.nanosec, 0u); EXPECT_EQ(uut.location_data_.relay_timestamp.sec, 0); - EXPECT_EQ(uut.location_data_.relay_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.relay_timestamp.nanosec, 0u); EXPECT_EQ(uut.location_data_.local6_timestamp.sec, 0); - EXPECT_EQ(uut.location_data_.local6_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.local6_timestamp.nanosec, 0u); EXPECT_EQ(uut.location_data_.ice6_timestamp.sec, 0); - EXPECT_EQ(uut.location_data_.ice6_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.ice6_timestamp.nanosec, 0u); EXPECT_EQ(uut.location_data_.relay6_timestamp.sec, 0); - EXPECT_EQ(uut.location_data_.relay6_timestamp.nanosec, 0); + EXPECT_EQ(uut.location_data_.relay6_timestamp.nanosec, 0u); #ifdef OPENDDS_SECURITY EXPECT_EQ(uut.have_spdp_info_, false); @@ -103,7 +105,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredSubscription_ctor) EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); - EXPECT_EQ(uut.transport_context_, 0); + EXPECT_EQ(uut.transport_context_, 0u); #ifdef OPENDDS_SECURITY EXPECT_EQ(uut.have_ice_agent_info_, false); // Can't compare IDL defined type. @@ -111,7 +113,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredSubscription_ctor) EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); - EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0u); #endif EXPECT_STREQ(uut.get_topic_name(), ""); EXPECT_STREQ(uut.get_type_name(), ""); @@ -127,7 +129,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredSubscription_ctor) //EXPECT_EQ(uut.reader_data_, r); EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); - EXPECT_EQ(uut.transport_context_, 0); + EXPECT_EQ(uut.transport_context_, 0u); #ifdef OPENDDS_SECURITY // Can't compare IDL defined type. //EXPECT_EQ(uut.security_attribs_, DDS::Security::EndpointSecurityAttributes()); @@ -137,7 +139,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredSubscription_ctor) EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); - EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0u); #endif EXPECT_STREQ(uut.get_topic_name(), "a topic"); EXPECT_STREQ(uut.get_type_name(), "a type"); @@ -151,7 +153,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredPublication_ctor) EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); - EXPECT_EQ(uut.transport_context_, 0); + EXPECT_EQ(uut.transport_context_, 0u); #ifdef OPENDDS_SECURITY EXPECT_EQ(uut.have_ice_agent_info_, false); // Can't compare IDL defined type. @@ -159,7 +161,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredPublication_ctor) EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); - EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0u); #endif EXPECT_STREQ(uut.get_topic_name(), ""); EXPECT_STREQ(uut.get_type_name(), ""); @@ -175,7 +177,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredPublication_ctor) //EXPECT_EQ(uut.reader_data_, r); EXPECT_EQ(uut.bit_ih_, DDS::HANDLE_NIL); EXPECT_EQ(uut.participant_discovered_at_, monotonic_time_zero()); - EXPECT_EQ(uut.transport_context_, 0); + EXPECT_EQ(uut.transport_context_, 0u); #ifdef OPENDDS_SECURITY // Can't compare IDL defined type. //EXPECT_EQ(uut.security_attribs_, DDS::Security::EndpointSecurityAttributes()); @@ -185,7 +187,7 @@ TEST(dds_DCPS_RTPS_DiscoveredEntities, DiscoveredPublication_ctor) EXPECT_EQ(uut.security_attribs_.is_key_protected, 0); EXPECT_EQ(uut.security_attribs_.is_payload_protected, 0); EXPECT_EQ(uut.security_attribs_.is_submessage_protected, 0); - EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0); + EXPECT_EQ(uut.security_attribs_.plugin_endpoint_attributes, 0u); #endif EXPECT_STREQ(uut.get_topic_name(), "a topic"); EXPECT_STREQ(uut.get_type_name(), "a type"); From 47efeb475f61d7949db1ce3b22b102e12099559c Mon Sep 17 00:00:00 2001 From: "Justin R. Wilson" Date: Tue, 24 Jan 2023 15:25:25 -0600 Subject: [PATCH 3/3] Fix safety profile --- dds/DCPS/Time_Helper.h | 2 ++ dds/DCPS/Time_Helper.inl | 2 ++ 2 files changed, 4 insertions(+) diff --git a/dds/DCPS/Time_Helper.h b/dds/DCPS/Time_Helper.h index dfce9e7bbd5..3c106bec3ba 100644 --- a/dds/DCPS/Time_Helper.h +++ b/dds/DCPS/Time_Helper.h @@ -109,8 +109,10 @@ DDS::Duration_t operator-(const MonotonicTime_t& t1, const MonotonicTime_t& t2); ACE_INLINE OpenDDS_Dcps_Export bool operator<(const MonotonicTime_t& t1, const MonotonicTime_t& t2); +#ifndef OPENDDS_SAFETY_PROFILE ACE_INLINE OpenDDS_Dcps_Export bool operator==(const MonotonicTime_t& t1, const MonotonicTime_t& t2); +#endif ACE_INLINE OpenDDS_Dcps_Export ACE_UINT32 uint32_fractional_seconds_to_nanoseconds(ACE_UINT32 fraction); diff --git a/dds/DCPS/Time_Helper.inl b/dds/DCPS/Time_Helper.inl index 1719804f98f..231ac32fd98 100644 --- a/dds/DCPS/Time_Helper.inl +++ b/dds/DCPS/Time_Helper.inl @@ -166,11 +166,13 @@ operator<(const MonotonicTime_t& t1, const MonotonicTime_t& t2) return t1.sec < t2.sec || (t1.sec == t2.sec && t1.nanosec < t2.nanosec); } +#ifndef OPENDDS_SAFETY_PROFILE ACE_INLINE bool operator==(const MonotonicTime_t& t1, const MonotonicTime_t& t2) { return t1.sec == t2.sec && t1.nanosec == t2.nanosec; } +#endif ACE_INLINE ACE_Time_Value time_to_time_value(const DDS::Time_t& t)