/* * Copyright 2012 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. */ // Implements the IceCandidateInterface. #ifndef WEBRTC_API_JSEPICECANDIDATE_H_ #define WEBRTC_API_JSEPICECANDIDATE_H_ #include #include "webrtc/api/jsep.h" #include "webrtc/base/constructormagic.h" #include "webrtc/p2p/base/candidate.h" namespace webrtc { class JsepIceCandidate : public IceCandidateInterface { public: JsepIceCandidate(const std::string& sdp_mid, int sdp_mline_index); JsepIceCandidate(const std::string& sdp_mid, int sdp_mline_index, const cricket::Candidate& candidate); ~JsepIceCandidate(); // |error| can be NULL if don't care about the failure reason. bool Initialize(const std::string& sdp, SdpParseError* err); void SetCandidate(const cricket::Candidate& candidate) { candidate_ = candidate; } virtual std::string sdp_mid() const { return sdp_mid_; } virtual int sdp_mline_index() const { return sdp_mline_index_; } virtual const cricket::Candidate& candidate() const { return candidate_; } virtual bool ToString(std::string* out) const; private: std::string sdp_mid_; int sdp_mline_index_; cricket::Candidate candidate_; RTC_DISALLOW_COPY_AND_ASSIGN(JsepIceCandidate); }; // Implementation of IceCandidateCollection. // This implementation stores JsepIceCandidates. class JsepCandidateCollection : public IceCandidateCollection { public: JsepCandidateCollection() {} // Move constructor is defined so that a vector of JsepCandidateCollections // can be resized. JsepCandidateCollection(JsepCandidateCollection&& o) : candidates_(std::move(o.candidates_)) {} ~JsepCandidateCollection(); virtual size_t count() const { return candidates_.size(); } virtual bool HasCandidate(const IceCandidateInterface* candidate) const; // Adds and takes ownership of the JsepIceCandidate. virtual void add(JsepIceCandidate* candidate) { candidates_.push_back(candidate); } virtual const IceCandidateInterface* at(size_t index) const { return candidates_[index]; } // Removes the candidate that has a matching address and protocol. // Returns the number of candidates that were removed. size_t remove(const cricket::Candidate& candidate); private: std::vector candidates_; RTC_DISALLOW_COPY_AND_ASSIGN(JsepCandidateCollection); }; } // namespace webrtc #endif // WEBRTC_API_JSEPICECANDIDATE_H_