• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 *  Copyright 2015 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#import "RTCIceCandidate+Private.h"
12
13#include <memory>
14
15#import "base/RTCLogging.h"
16#import "helpers/NSString+StdString.h"
17
18@implementation RTC_OBJC_TYPE (RTCIceCandidate)
19
20@synthesize sdpMid = _sdpMid;
21@synthesize sdpMLineIndex = _sdpMLineIndex;
22@synthesize sdp = _sdp;
23@synthesize serverUrl = _serverUrl;
24
25- (instancetype)initWithSdp:(NSString *)sdp
26              sdpMLineIndex:(int)sdpMLineIndex
27                     sdpMid:(NSString *)sdpMid {
28  NSParameterAssert(sdp.length);
29  if (self = [super init]) {
30    _sdpMid = [sdpMid copy];
31    _sdpMLineIndex = sdpMLineIndex;
32    _sdp = [sdp copy];
33  }
34  return self;
35}
36
37- (NSString *)description {
38  return [NSString stringWithFormat:@"RTC_OBJC_TYPE(RTCIceCandidate):\n%@\n%d\n%@\n%@",
39                                    _sdpMid,
40                                    _sdpMLineIndex,
41                                    _sdp,
42                                    _serverUrl];
43}
44
45#pragma mark - Private
46
47- (instancetype)initWithNativeCandidate:
48    (const webrtc::IceCandidateInterface *)candidate {
49  NSParameterAssert(candidate);
50  std::string sdp;
51  candidate->ToString(&sdp);
52
53  RTC_OBJC_TYPE(RTCIceCandidate) *rtcCandidate =
54      [self initWithSdp:[NSString stringForStdString:sdp]
55          sdpMLineIndex:candidate->sdp_mline_index()
56                 sdpMid:[NSString stringForStdString:candidate->sdp_mid()]];
57  rtcCandidate->_serverUrl = [NSString stringForStdString:candidate->server_url()];
58  return rtcCandidate;
59}
60
61- (std::unique_ptr<webrtc::IceCandidateInterface>)nativeCandidate {
62  webrtc::SdpParseError error;
63
64  webrtc::IceCandidateInterface *candidate = webrtc::CreateIceCandidate(
65      _sdpMid.stdString, _sdpMLineIndex, _sdp.stdString, &error);
66
67  if (!candidate) {
68    RTCLog(@"Failed to create ICE candidate: %s\nline: %s",
69           error.description.c_str(),
70           error.line.c_str());
71  }
72
73  return std::unique_ptr<webrtc::IceCandidateInterface>(candidate);
74}
75
76@end
77