blob: e18e6e28afa6348a22ab3a82e2fe31d3f1b55b4e [file] [log] [blame]
Mirko Bonadei2ffed6d2018-07-20 09:09:321/*
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 17:11:0011#include "api/jsep_ice_candidate.h"
Mirko Bonadei2ffed6d2018-07-20 09:09:3212
Steve Anton8e967df2019-07-31 01:07:4013#include <memory>
Yves Gerey988cc082018-10-23 10:03:0114#include <utility>
15
Steve Antona59dcc32019-03-25 20:53:0716#include "absl/algorithm/container.h"
Steve Anton8e967df2019-07-31 01:07:4017#include "absl/memory/memory.h"
Steve Antona59dcc32019-03-25 20:53:0718
Mirko Bonadei2ffed6d2018-07-20 09:09:3219namespace 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-31 01:07:4047 candidates_.push_back(absl::WrapUnique(candidate));
Mirko Bonadei2ffed6d2018-07-20 09:09:3248}
49
50const IceCandidateInterface* JsepCandidateCollection::at(size_t index) const {
Steve Anton8e967df2019-07-31 01:07:4051 return candidates_[index].get();
Mirko Bonadei2ffed6d2018-07-20 09:09:3252}
53
54bool JsepCandidateCollection::HasCandidate(
55 const IceCandidateInterface* candidate) const {
Steve Anton8e967df2019-07-31 01:07:4056 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 09:09:3262}
63
64size_t JsepCandidateCollection::remove(const cricket::Candidate& candidate) {
Steve Anton8e967df2019-07-31 01:07:4065 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 09:09:3269 if (iter != candidates_.end()) {
Mirko Bonadei2ffed6d2018-07-20 09:09:3270 candidates_.erase(iter);
71 return 1;
72 }
73 return 0;
74}
75
76} // namespace webrtc