|  | /* | 
|  | *  Copyright 2018 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | #include "api/jsep_ice_candidate.h" | 
|  |  | 
|  | #include <memory> | 
|  | #include <utility> | 
|  |  | 
|  | #include "absl/algorithm/container.h" | 
|  | #include "absl/memory/memory.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | std::string JsepIceCandidate::sdp_mid() const { | 
|  | return sdp_mid_; | 
|  | } | 
|  |  | 
|  | int JsepIceCandidate::sdp_mline_index() const { | 
|  | return sdp_mline_index_; | 
|  | } | 
|  |  | 
|  | const cricket::Candidate& JsepIceCandidate::candidate() const { | 
|  | return candidate_; | 
|  | } | 
|  |  | 
|  | std::string JsepIceCandidate::server_url() const { | 
|  | return candidate_.url(); | 
|  | } | 
|  |  | 
|  | JsepCandidateCollection::JsepCandidateCollection() = default; | 
|  |  | 
|  | JsepCandidateCollection::JsepCandidateCollection(JsepCandidateCollection&& o) | 
|  | : candidates_(std::move(o.candidates_)) {} | 
|  |  | 
|  | size_t JsepCandidateCollection::count() const { | 
|  | return candidates_.size(); | 
|  | } | 
|  |  | 
|  | void JsepCandidateCollection::add(JsepIceCandidate* candidate) { | 
|  | candidates_.push_back(absl::WrapUnique(candidate)); | 
|  | } | 
|  |  | 
|  | const IceCandidateInterface* JsepCandidateCollection::at(size_t index) const { | 
|  | return candidates_[index].get(); | 
|  | } | 
|  |  | 
|  | bool JsepCandidateCollection::HasCandidate( | 
|  | const IceCandidateInterface* candidate) const { | 
|  | return absl::c_any_of( | 
|  | candidates_, [&](const std::unique_ptr<JsepIceCandidate>& entry) { | 
|  | return entry->sdp_mid() == candidate->sdp_mid() && | 
|  | entry->sdp_mline_index() == candidate->sdp_mline_index() && | 
|  | entry->candidate().IsEquivalent(candidate->candidate()); | 
|  | }); | 
|  | } | 
|  |  | 
|  | size_t JsepCandidateCollection::remove(const cricket::Candidate& candidate) { | 
|  | auto iter = absl::c_find_if( | 
|  | candidates_, [&](const std::unique_ptr<JsepIceCandidate>& c) { | 
|  | return candidate.MatchesForRemoval(c->candidate()); | 
|  | }); | 
|  | if (iter != candidates_.end()) { | 
|  | candidates_.erase(iter); | 
|  | return 1; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | }  // namespace webrtc |