| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 1 | /* | 
| kjellander | b24317b | 2016-02-10 07:54:43 -0800 | [diff] [blame] | 2 | *  Copyright 2012 The WebRTC project authors. All Rights Reserved. | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 3 | * | 
| kjellander | b24317b | 2016-02-10 07:54:43 -0800 | [diff] [blame] | 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. | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 9 | */ | 
|  | 10 |  | 
| deadbeef | b10f32f | 2017-02-08 01:38:21 -0800 | [diff] [blame] | 11 | // TODO(deadbeef): Move this out of api/; it's an implementation detail and | 
|  | 12 | // shouldn't be used externally. | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 13 |  | 
| Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 14 | #ifndef API_JSEPICECANDIDATE_H_ | 
|  | 15 | #define API_JSEPICECANDIDATE_H_ | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 16 |  | 
|  | 17 | #include <string> | 
| oprypin | 803dc29 | 2017-02-01 01:55:59 -0800 | [diff] [blame] | 18 | #include <utility> | 
|  | 19 | #include <vector> | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 20 |  | 
| Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 21 | #include "api/jsep.h" | 
|  | 22 | #include "p2p/base/candidate.h" | 
|  | 23 | #include "rtc_base/constructormagic.h" | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 24 |  | 
|  | 25 | namespace webrtc { | 
|  | 26 |  | 
| deadbeef | b10f32f | 2017-02-08 01:38:21 -0800 | [diff] [blame] | 27 | // Implementation of IceCandidateInterface. | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 28 | class JsepIceCandidate : public IceCandidateInterface { | 
|  | 29 | public: | 
|  | 30 | JsepIceCandidate(const std::string& sdp_mid, int sdp_mline_index); | 
|  | 31 | JsepIceCandidate(const std::string& sdp_mid, int sdp_mline_index, | 
|  | 32 | const cricket::Candidate& candidate); | 
|  | 33 | ~JsepIceCandidate(); | 
| deadbeef | 8d60a94 | 2017-02-27 14:47:33 -0800 | [diff] [blame] | 34 | // |err| may be null. | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 35 | bool Initialize(const std::string& sdp, SdpParseError* err); | 
|  | 36 | void SetCandidate(const cricket::Candidate& candidate) { | 
|  | 37 | candidate_ = candidate; | 
|  | 38 | } | 
|  | 39 |  | 
|  | 40 | virtual std::string sdp_mid() const { return sdp_mid_; } | 
|  | 41 | virtual int sdp_mline_index() const { return sdp_mline_index_; } | 
|  | 42 | virtual const cricket::Candidate& candidate() const { | 
|  | 43 | return candidate_; | 
|  | 44 | } | 
|  | 45 |  | 
| zhihuang | d7e771d | 2017-02-16 11:29:39 -0800 | [diff] [blame] | 46 | virtual std::string server_url() const { return candidate_.url(); } | 
|  | 47 |  | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 48 | virtual bool ToString(std::string* out) const; | 
|  | 49 |  | 
|  | 50 | private: | 
|  | 51 | std::string sdp_mid_; | 
|  | 52 | int sdp_mline_index_; | 
|  | 53 | cricket::Candidate candidate_; | 
|  | 54 |  | 
| henrikg | 3c089d7 | 2015-09-16 05:37:44 -0700 | [diff] [blame] | 55 | RTC_DISALLOW_COPY_AND_ASSIGN(JsepIceCandidate); | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 56 | }; | 
|  | 57 |  | 
| deadbeef | b10f32f | 2017-02-08 01:38:21 -0800 | [diff] [blame] | 58 | // Implementation of IceCandidateCollection which stores JsepIceCandidates. | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 59 | class JsepCandidateCollection : public IceCandidateCollection { | 
|  | 60 | public: | 
| deadbeef | 9d3584c | 2016-02-16 17:54:10 -0800 | [diff] [blame] | 61 | JsepCandidateCollection() {} | 
|  | 62 | // Move constructor is defined so that a vector of JsepCandidateCollections | 
|  | 63 | // can be resized. | 
|  | 64 | JsepCandidateCollection(JsepCandidateCollection&& o) | 
|  | 65 | : candidates_(std::move(o.candidates_)) {} | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 66 | ~JsepCandidateCollection(); | 
|  | 67 | virtual size_t count() const { | 
|  | 68 | return candidates_.size(); | 
|  | 69 | } | 
|  | 70 | virtual bool HasCandidate(const IceCandidateInterface* candidate) const; | 
|  | 71 | // Adds and takes ownership of the JsepIceCandidate. | 
| deadbeef | b10f32f | 2017-02-08 01:38:21 -0800 | [diff] [blame] | 72 | // TODO(deadbeef): Make this use an std::unique_ptr<>, so ownership logic is | 
|  | 73 | // more clear. | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 74 | virtual void add(JsepIceCandidate* candidate) { | 
|  | 75 | candidates_.push_back(candidate); | 
|  | 76 | } | 
|  | 77 | virtual const IceCandidateInterface* at(size_t index) const { | 
|  | 78 | return candidates_[index]; | 
|  | 79 | } | 
| Honghai Zhang | 7fb69db | 2016-03-14 11:59:18 -0700 | [diff] [blame] | 80 | // Removes the candidate that has a matching address and protocol. | 
| deadbeef | b10f32f | 2017-02-08 01:38:21 -0800 | [diff] [blame] | 81 | // | 
| Honghai Zhang | 7fb69db | 2016-03-14 11:59:18 -0700 | [diff] [blame] | 82 | // Returns the number of candidates that were removed. | 
|  | 83 | size_t remove(const cricket::Candidate& candidate); | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 84 |  | 
|  | 85 | private: | 
|  | 86 | std::vector<JsepIceCandidate*> candidates_; | 
| deadbeef | 9d3584c | 2016-02-16 17:54:10 -0800 | [diff] [blame] | 87 |  | 
|  | 88 | RTC_DISALLOW_COPY_AND_ASSIGN(JsepCandidateCollection); | 
| henrike@webrtc.org | 28e2075 | 2013-07-10 00:45:36 +0000 | [diff] [blame] | 89 | }; | 
|  | 90 |  | 
|  | 91 | }  // namespace webrtc | 
|  | 92 |  | 
| Mirko Bonadei | 92ea95e | 2017-09-15 06:47:31 +0200 | [diff] [blame] | 93 | #endif  // API_JSEPICECANDIDATE_H_ |