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