blob: e18e6e28afa6348a22ab3a82e2fe31d3f1b55b4e [file] [log] [blame]
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +02001/*
2 * Copyright 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Steve Anton10542f22019-01-11 09:11:00 -080011#include "api/jsep_ice_candidate.h"
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020012
Steve Anton8e967df2019-07-30 18:07:40 -070013#include <memory>
Yves Gerey988cc082018-10-23 12:03:01 +020014#include <utility>
15
Steve Antona59dcc32019-03-25 13:53:07 -070016#include "absl/algorithm/container.h"
Steve Anton8e967df2019-07-30 18:07:40 -070017#include "absl/memory/memory.h"
Steve Antona59dcc32019-03-25 13:53:07 -070018
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020019namespace webrtc {
20
21std::string JsepIceCandidate::sdp_mid() const {
22 return sdp_mid_;
23}
24
25int JsepIceCandidate::sdp_mline_index() const {
26 return sdp_mline_index_;
27}
28
29const cricket::Candidate& JsepIceCandidate::candidate() const {
30 return candidate_;
31}
32
33std::string JsepIceCandidate::server_url() const {
34 return candidate_.url();
35}
36
37JsepCandidateCollection::JsepCandidateCollection() = default;
38
39JsepCandidateCollection::JsepCandidateCollection(JsepCandidateCollection&& o)
40 : candidates_(std::move(o.candidates_)) {}
41
42size_t JsepCandidateCollection::count() const {
43 return candidates_.size();
44}
45
46void JsepCandidateCollection::add(JsepIceCandidate* candidate) {
Steve Anton8e967df2019-07-30 18:07:40 -070047 candidates_.push_back(absl::WrapUnique(candidate));
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020048}
49
50const IceCandidateInterface* JsepCandidateCollection::at(size_t index) const {
Steve Anton8e967df2019-07-30 18:07:40 -070051 return candidates_[index].get();
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020052}
53
54bool JsepCandidateCollection::HasCandidate(
55 const IceCandidateInterface* candidate) const {
Steve Anton8e967df2019-07-30 18:07:40 -070056 return absl::c_any_of(
57 candidates_, [&](const std::unique_ptr<JsepIceCandidate>& entry) {
58 return entry->sdp_mid() == candidate->sdp_mid() &&
59 entry->sdp_mline_index() == candidate->sdp_mline_index() &&
60 entry->candidate().IsEquivalent(candidate->candidate());
61 });
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020062}
63
64size_t JsepCandidateCollection::remove(const cricket::Candidate& candidate) {
Steve Anton8e967df2019-07-30 18:07:40 -070065 auto iter = absl::c_find_if(
66 candidates_, [&](const std::unique_ptr<JsepIceCandidate>& c) {
67 return candidate.MatchesForRemoval(c->candidate());
68 });
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020069 if (iter != candidates_.end()) {
Mirko Bonadei2ffed6d2018-07-20 11:09:32 +020070 candidates_.erase(iter);
71 return 1;
72 }
73 return 0;
74}
75
76} // namespace webrtc