8 #ifdef OPENDDS_SECURITY 29 bool a_local_is_controlling,
33 foundation(
std::make_pair(a_local.foundation, a_remote.foundation)),
34 local_is_controlling(a_local_is_controlling),
35 priority(compute_priority()),
36 use_candidate(a_use_candidate)
54 return (std::min(g,d) << 32) + 2 * std::max(g,d) + (g > d ? 1 : 0);
60 : candidate_pair_(a_candidate_pair), cancelled_(false), expiration_date_(a_expiration_date)
89 :
Task(a_endpoint_manager->agent_impl)
90 , endpoint_manager_(a_endpoint_manager)
91 , local_agent_info_(local)
92 , remote_agent_info_(remote)
93 , original_remote_agent_info_(remote)
94 , local_is_controlling_(local.username < remote.username)
95 , ice_tie_breaker_(a_ice_tie_breaker)
96 , nominating_(valid_list_.end())
97 , nominated_(valid_list_.end())
98 , nominated_is_live_(false)
114 for (; local_pos != local_limit; ++local_pos) {
117 for (; remote_pos != remote_limit; ++remote_pos) {
119 if ((local_pos->address.is_linklocal() && remote_pos->address.is_linklocal()) ||
120 (!local_pos->address.is_linklocal() && !remote_pos->address.is_linklocal())) {
133 for (CandidatePairsType::iterator pos =
frozen_.begin(), limit =
frozen_.end(); pos != limit; ++pos) {
134 CandidatePairsType::iterator test_pos = pos;
137 while (test_pos != limit) {
138 if (pos->local.base == test_pos->local.base && pos->remote == test_pos->remote) {
150 double s =
static_cast<double>(
frozen_.size());
157 for (CandidatePairsType::const_iterator pos =
waiting_.begin(), limit =
waiting_.end(); pos != limit; ++pos) {
158 active_foundations.
add(pos->foundation);
161 for (CandidatePairsType::const_iterator pos =
in_progress_.begin(), limit =
in_progress_.end(); pos != limit; ++pos) {
162 active_foundations.
add(pos->foundation);
168 for (CandidatePairsType::const_iterator pos =
valid_list_.begin(), limit =
valid_list_.end(); pos != limit; ++pos) {
177 for (CandidatePairsType::iterator pos =
frozen_.begin(), limit =
frozen_.end(); pos != limit;) {
200 enqueue(MonotonicTimePoint::now());
208 for (CandidatePairsType::iterator pos =
frozen_.begin(), limit =
frozen_.end(); pos != limit;) {
223 enqueue(MonotonicTimePoint::now());
236 for (CandidatePairsType::const_iterator pos =
waiting_.begin(), limit =
waiting_.end(); pos != limit; ++pos) {
240 for (CandidatePairsType::const_iterator pos =
in_progress_.begin(), limit =
in_progress_.end(); pos != limit; ++pos) {
248 if (pos->address == address) {
260 if (pos->address == address) {
276 CandidatePairsType::iterator pos;
278 pos = std::find(
frozen_.begin(),
frozen_.end(), a_candidate_pair);
283 waiting_.push_back(a_candidate_pair);
301 waiting_.push_back(a_candidate_pair);
314 pos = std::find(
failed_.begin(),
failed_.end(), a_candidate_pair);
319 waiting_.push_back(a_candidate_pair);
327 waiting_.push_back(a_candidate_pair);
359 ACE_ERROR((
LM_WARNING,
ACE_TEXT(
"(%P|%t) Checklist::generate_triggered_check: WARNING local_address %C is no longer a local candidate\n"),
379 enqueue(MonotonicTimePoint::now());
480 if (!unknown_attributes.empty()) {
548 cc.request().get_priority(priority);
583 if (!unknown_attributes.empty()) {
601 ACE_TEXT(
"STUN error response code=%d reason=%s\n"),
608 for (std::vector<STUN::AttributeType>::const_iterator pos = unknown_attributes.begin(),
609 limit = unknown_attributes.end(); pos != limit; ++pos) {
751 enqueue(MonotonicTimePoint::now() + interval);
759 guids_.insert(a_guid_pair);
765 guids_.erase(a_guid_pair);
784 for (GuidSetType::const_iterator pos = a_guids.begin(), limit = a_guids.end(); pos != limit; ++pos) {
793 for (GuidSetType::const_iterator pos = guids.begin(), limit = guids.end(); pos != limit; ++pos) {
void add_triggered_check(const CandidatePair &a_candidate_pair)
RcHandle< T > rchandle_from(T *pointer)
void add_valid_pair(const CandidatePair &a_valid_pair)
DCPS::TimeDuration check_interval_
ACE_INET_Addr selected_address() const
bool get_mapped_address(ACE_INET_Addr &address) const
void password(const std::string &a_password)
AgentInfo remote_agent_info_
void remove_from_in_progress(const CandidatePair &a_candidate_pair)
ConnectivityCheck(const CandidatePair &a_candidate_pair, const AgentInfo &a_local_agent_info, const AgentInfo &a_remote_agent_info, ACE_UINT64 a_ice_tie_breaker, const DCPS::MonotonicTimePoint &a_expiration_date)
void success_response(const ACE_INET_Addr &a_local_address, const ACE_INET_Addr &a_remote_address, const STUN::Message &a_message)
const CandidatePair & candidate_pair() const
const STUN::Message & request() const
Attribute make_ice_controlled(ACE_UINT64 ice_tie_breaker)
bool contains(const FoundationType &a_foundation) const
void compute_active_foundations(ActiveFoundationSet &a_active_foundations) const
bool is_succeeded(const CandidatePair &a_candidate_pair) const
bool has_message_integrity() const
Attribute make_username(const std::string &username)
void unfreeze(const FoundationType &a_foundation)
void ice_disconnect(const GuidSetType &guids, const ACE_INET_Addr &addr)
std::pair< std::string, std::string > FoundationType
ACE_UINT64 compute_priority()
#define OPENDDS_ASSERT(C)
void enqueue(const DCPS::MonotonicTimePoint &release_time)
void ice_connect(const GuidSetType &guids, const ACE_INET_Addr &addr)
GuidSetType guids() const
CandidatePairsType in_progress_
void add(const FoundationType &a_foundation)
Candidate make_peer_reflexive_candidate(const ACE_INET_Addr &address, const ACE_INET_Addr &base, const ACE_INET_Addr &server_address, ACE_UINT32 priority)
void generate_transaction_id()
std::vector< AttributeType > get_unknown_attributes() const
void checklist_period(const DCPS::TimeDuration &x)
Attribute make_use_candidate()
const ACE_UINT16 UNKNOWN_ATTRIBUTE
CandidatePairsType waiting_
void T_a(const DCPS::TimeDuration &x)
void failed(const ConnectivityCheck &a_connectivity_check)
AgentImpl *const agent_impl
bool has_unknown_attributes() const
void nominated_ttl(const DCPS::TimeDuration &x)
void send(const ACE_INET_Addr &address, const STUN::Message &message)
Checklist(EndpointManager *a_endpoint, const AgentInfo &a_local, const AgentInfo &a_remote, ACE_UINT64 a_ice_tie_breaker)
CandidatePairsType frozen_
bool const local_is_controlling_
CandidatesType::const_iterator const_iterator
const ACE_UINT16 BAD_REQUEST
DCPS::MonotonicTimePoint last_indication_
ACE_UINT16 get_error_code() const
bool get_local_candidate(const ACE_INET_Addr &a_address, Candidate &a_candidate)
ACE_UINT32 local_priority(const ACE_INET_Addr &addr)
void do_next_check(const DCPS::MonotonicTimePoint &a_now)
CandidatePairsType succeeded_
CandidatesType candidates
void generate_candidate_pairs()
TimePoint_T< MonotonicClock > MonotonicTimePoint
ConnectivityChecksType connectivity_checks_
CandidatePairsType::const_iterator nominated_
Attribute make_ice_controlling(ACE_UINT64 ice_tie_breaker)
bool const local_is_controlling
DCPS::TimeDuration max_check_interval_
void succeeded(const ConnectivityCheck &a_connectivity_check)
Attribute make_message_integrity()
bool has_error_code() const
Attribute make_fingerprint()
bool get_remote_candidate(const ACE_INET_Addr &a_address, Candidate &a_candidate)
static bool priority_sorted(const CandidatePair &x, const CandidatePair &y)
const_iterator end() const
unsigned long long ACE_UINT64
void append_attribute(const Attribute &attribute)
void remove_guid(const GuidPair &a_guid_pair)
void execute(const DCPS::MonotonicTimePoint &a_now)
std::string get_error_reason() const
void check_invariants() const
void remove(const FoundationType &a_foundation)
static Configuration * instance()
FoundationType const foundation
void generate_triggered_check(const ACE_INET_Addr &a_local_address, const ACE_INET_Addr &a_remote_address, ACE_UINT32 a_priority, bool a_use_candidate)
const_iterator begin() const
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
bool operator==(const CandidatePair &a_other) const
void add_guids(const GuidSetType &a_guids)
CandidatePairsType::const_iterator nominating_
EndpointManager *const endpoint_manager_
AgentInfo local_agent_info_
bool verify_message_integrity(const std::string &password) const
const FoundationSet & foundations() const
CandidatePair(const Candidate &a_local, const Candidate &a_remote, bool a_local_is_controlling, bool a_use_candidate=false)
ACE_UINT64 const ice_tie_breaker_
CandidatePairsType valid_list_
void add_guid(const GuidPair &a_guid_pair)
void error_response(const ACE_INET_Addr &a_local_address, const ACE_INET_Addr &a_remote_address, const STUN::Message &a_message)
std::vector< AttributeType > unknown_comprehension_required_attributes() const
bool is_in_progress(const CandidatePair &a_candidate_pair) const
TransactionId transaction_id
The Internal API and Implementation of OpenDDS.
void unset_responsible_checklist(const STUN::TransactionId &a_transaction_id, ChecklistPtr a_checklist)
CandidatePairsType failed_
Attribute make_priority(ACE_UINT32 priority)
void set_responsible_checklist(const STUN::TransactionId &a_transaction_id, ChecklistPtr a_checklist)
void add(const FoundationType &a_foundation)
DCPS::MonotonicTimePoint expiration_date() const
std::set< GuidPair > GuidSetType
bool candidates_sorted(const Candidate &x, const Candidate &y)
CandidatePairsType triggered_check_queue_
size_t remote_peer_reflexive_counter()
bool has_fingerprint() const