blob: 4801a040b6cc6b644d59d95618ee71039b496875 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:361/*
kjellanderb24317b2016-02-10 15:54:432 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:363 *
kjellanderb24317b2016-02-10 15:54:434 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:369 */
10
deadbeefb10f32f2017-02-08 09:38:2111// TODO(deadbeef): Move this out of api/; it's an implementation detail and
12// shouldn't be used externally.
henrike@webrtc.org28e20752013-07-10 00:45:3613
Mirko Bonadei92ea95e2017-09-15 04:47:3114#ifndef API_JSEPICECANDIDATE_H_
15#define API_JSEPICECANDIDATE_H_
henrike@webrtc.org28e20752013-07-10 00:45:3616
17#include <string>
oprypin803dc292017-02-01 09:55:5918#include <utility>
19#include <vector>
henrike@webrtc.org28e20752013-07-10 00:45:3620
Patrik Höglunde2d6a062017-10-05 12:53:3321#include "api/candidate.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3122#include "api/jsep.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3123#include "rtc_base/constructormagic.h"
henrike@webrtc.org28e20752013-07-10 00:45:3624
25namespace webrtc {
26
deadbeefb10f32f2017-02-08 09:38:2127// Implementation of IceCandidateInterface.
henrike@webrtc.org28e20752013-07-10 00:45:3628class JsepIceCandidate : public IceCandidateInterface {
29 public:
30 JsepIceCandidate(const std::string& sdp_mid, int sdp_mline_index);
Yves Gerey665174f2018-06-19 13:03:0531 JsepIceCandidate(const std::string& sdp_mid,
32 int sdp_mline_index,
henrike@webrtc.org28e20752013-07-10 00:45:3633 const cricket::Candidate& candidate);
34 ~JsepIceCandidate();
deadbeef8d60a942017-02-27 22:47:3335 // |err| may be null.
henrike@webrtc.org28e20752013-07-10 00:45:3636 bool Initialize(const std::string& sdp, SdpParseError* err);
37 void SetCandidate(const cricket::Candidate& candidate) {
38 candidate_ = candidate;
39 }
40
41 virtual std::string sdp_mid() const { return sdp_mid_; }
42 virtual int sdp_mline_index() const { return sdp_mline_index_; }
Yves Gerey665174f2018-06-19 13:03:0543 virtual const cricket::Candidate& candidate() const { return candidate_; }
henrike@webrtc.org28e20752013-07-10 00:45:3644
zhihuangd7e771d2017-02-16 19:29:3945 virtual std::string server_url() const { return candidate_.url(); }
46
henrike@webrtc.org28e20752013-07-10 00:45:3647 virtual bool ToString(std::string* out) const;
48
49 private:
50 std::string sdp_mid_;
51 int sdp_mline_index_;
52 cricket::Candidate candidate_;
53
henrikg3c089d72015-09-16 12:37:4454 RTC_DISALLOW_COPY_AND_ASSIGN(JsepIceCandidate);
henrike@webrtc.org28e20752013-07-10 00:45:3655};
56
deadbeefb10f32f2017-02-08 09:38:2157// Implementation of IceCandidateCollection which stores JsepIceCandidates.
henrike@webrtc.org28e20752013-07-10 00:45:3658class JsepCandidateCollection : public IceCandidateCollection {
59 public:
deadbeef9d3584c2016-02-17 01:54:1060 JsepCandidateCollection() {}
61 // Move constructor is defined so that a vector of JsepCandidateCollections
62 // can be resized.
63 JsepCandidateCollection(JsepCandidateCollection&& o)
64 : candidates_(std::move(o.candidates_)) {}
henrike@webrtc.org28e20752013-07-10 00:45:3665 ~JsepCandidateCollection();
Yves Gerey665174f2018-06-19 13:03:0566 virtual size_t count() const { return candidates_.size(); }
henrike@webrtc.org28e20752013-07-10 00:45:3667 virtual bool HasCandidate(const IceCandidateInterface* candidate) const;
68 // Adds and takes ownership of the JsepIceCandidate.
deadbeefb10f32f2017-02-08 09:38:2169 // TODO(deadbeef): Make this use an std::unique_ptr<>, so ownership logic is
70 // more clear.
henrike@webrtc.org28e20752013-07-10 00:45:3671 virtual void add(JsepIceCandidate* candidate) {
72 candidates_.push_back(candidate);
73 }
74 virtual const IceCandidateInterface* at(size_t index) const {
75 return candidates_[index];
76 }
Honghai Zhang7fb69db2016-03-14 18:59:1877 // Removes the candidate that has a matching address and protocol.
deadbeefb10f32f2017-02-08 09:38:2178 //
Honghai Zhang7fb69db2016-03-14 18:59:1879 // Returns the number of candidates that were removed.
80 size_t remove(const cricket::Candidate& candidate);
henrike@webrtc.org28e20752013-07-10 00:45:3681
82 private:
83 std::vector<JsepIceCandidate*> candidates_;
deadbeef9d3584c2016-02-17 01:54:1084
85 RTC_DISALLOW_COPY_AND_ASSIGN(JsepCandidateCollection);
henrike@webrtc.org28e20752013-07-10 00:45:3686};
87
88} // namespace webrtc
89
Mirko Bonadei92ea95e2017-09-15 04:47:3190#endif // API_JSEPICECANDIDATE_H_