/* * 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 #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)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(candidate); } @end