| /* | 
 |  *  Copyright 2015 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. | 
 |  */ | 
 |  | 
 | #import "RTCIceCandidate+Private.h" | 
 |  | 
 | #include <memory> | 
 |  | 
 | #import "base/RTCLogging.h" | 
 | #import "helpers/NSString+StdString.h" | 
 |  | 
 | @implementation RTC_OBJC_TYPE (RTCIceCandidate) | 
 |  | 
 | @synthesize sdpMid = _sdpMid; | 
 | @synthesize sdpMLineIndex = _sdpMLineIndex; | 
 | @synthesize sdp = _sdp; | 
 | @synthesize serverUrl = _serverUrl; | 
 |  | 
 | - (instancetype)initWithSdp:(NSString *)sdp | 
 |               sdpMLineIndex:(int)sdpMLineIndex | 
 |                      sdpMid:(NSString *)sdpMid { | 
 |   NSParameterAssert(sdp.length); | 
 |   if (self = [super init]) { | 
 |     _sdpMid = [sdpMid copy]; | 
 |     _sdpMLineIndex = sdpMLineIndex; | 
 |     _sdp = [sdp copy]; | 
 |   } | 
 |   return self; | 
 | } | 
 |  | 
 | - (NSString *)description { | 
 |   return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCIceCandidate):\n%@\n%d\n%@\n%@", | 
 |                                     _sdpMid, | 
 |                                     _sdpMLineIndex, | 
 |                                     _sdp, | 
 |                                     _serverUrl]; | 
 | } | 
 |  | 
 | #pragma mark - Private | 
 |  | 
 | - (instancetype)initWithNativeCandidate: | 
 |     (const webrtc::IceCandidateInterface *)candidate { | 
 |   NSParameterAssert(candidate); | 
 |   std::string sdp; | 
 |   candidate->ToString(&sdp); | 
 |  | 
 |   RTC_OBJC_TYPE(RTCIceCandidate) *rtcCandidate = | 
 |       [self initWithSdp:[NSString stringForStdString:sdp] | 
 |           sdpMLineIndex:candidate->sdp_mline_index() | 
 |                  sdpMid:[NSString stringForStdString:candidate->sdp_mid()]]; | 
 |   rtcCandidate->_serverUrl = [NSString stringForStdString:candidate->server_url()]; | 
 |   return rtcCandidate; | 
 | } | 
 |  | 
 | - (std::unique_ptr<webrtc::IceCandidateInterface>)nativeCandidate { | 
 |   webrtc::SdpParseError error; | 
 |  | 
 |   webrtc::IceCandidateInterface *candidate = webrtc::CreateIceCandidate( | 
 |       _sdpMid.stdString, _sdpMLineIndex, _sdp.stdString, &error); | 
 |  | 
 |   if (!candidate) { | 
 |     RTCLog(@"Failed to create ICE candidate: %s\nline: %s", | 
 |            error.description.c_str(), | 
 |            error.line.c_str()); | 
 |   } | 
 |  | 
 |   return std::unique_ptr<webrtc::IceCandidateInterface>(candidate); | 
 | } | 
 |  | 
 | @end |