1 /*
2 * Copyright 2012 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
11 #include "api/jsep_ice_candidate.h"
12
13 #include <memory>
14
15 #include "pc/webrtc_sdp.h"
16
17 // This file contains JsepIceCandidate-related functions that are not
18 // included in api/jsep_ice_candidate.cc. Some of these link to SDP
19 // parsing/serializing functions, which some users may not want.
20 // TODO(bugs.webrtc.org/12330): Merge the two .cc files somehow.
21
22 namespace webrtc {
23
CreateIceCandidate(const std::string & sdp_mid,int sdp_mline_index,const std::string & sdp,SdpParseError * error)24 IceCandidateInterface* CreateIceCandidate(const std::string& sdp_mid,
25 int sdp_mline_index,
26 const std::string& sdp,
27 SdpParseError* error) {
28 JsepIceCandidate* jsep_ice = new JsepIceCandidate(sdp_mid, sdp_mline_index);
29 if (!jsep_ice->Initialize(sdp, error)) {
30 delete jsep_ice;
31 return NULL;
32 }
33 return jsep_ice;
34 }
35
CreateIceCandidate(const std::string & sdp_mid,int sdp_mline_index,const cricket::Candidate & candidate)36 std::unique_ptr<IceCandidateInterface> CreateIceCandidate(
37 const std::string& sdp_mid,
38 int sdp_mline_index,
39 const cricket::Candidate& candidate) {
40 return std::make_unique<JsepIceCandidate>(sdp_mid, sdp_mline_index,
41 candidate);
42 }
43
JsepIceCandidate(const std::string & sdp_mid,int sdp_mline_index)44 JsepIceCandidate::JsepIceCandidate(const std::string& sdp_mid,
45 int sdp_mline_index)
46 : sdp_mid_(sdp_mid), sdp_mline_index_(sdp_mline_index) {}
47
JsepIceCandidate(const std::string & sdp_mid,int sdp_mline_index,const cricket::Candidate & candidate)48 JsepIceCandidate::JsepIceCandidate(const std::string& sdp_mid,
49 int sdp_mline_index,
50 const cricket::Candidate& candidate)
51 : sdp_mid_(sdp_mid),
52 sdp_mline_index_(sdp_mline_index),
53 candidate_(candidate) {}
54
~JsepIceCandidate()55 JsepIceCandidate::~JsepIceCandidate() {}
56
Clone() const57 JsepCandidateCollection JsepCandidateCollection::Clone() const {
58 JsepCandidateCollection new_collection;
59 for (const auto& candidate : candidates_) {
60 new_collection.candidates_.push_back(std::make_unique<JsepIceCandidate>(
61 candidate->sdp_mid(), candidate->sdp_mline_index(),
62 candidate->candidate()));
63 }
64 return new_collection;
65 }
66
Initialize(const std::string & sdp,SdpParseError * err)67 bool JsepIceCandidate::Initialize(const std::string& sdp, SdpParseError* err) {
68 return SdpDeserializeCandidate(sdp, this, err);
69 }
70
ToString(std::string * out) const71 bool JsepIceCandidate::ToString(std::string* out) const {
72 if (!out)
73 return false;
74 *out = SdpSerializeCandidate(*this);
75 return !out->empty();
76 }
77
78 } // namespace webrtc
79