Update API for Objective-C RTCIceServer
BUG= Review URL: https://codereview.webrtc.org/1499653003 Cr-Commit-Position: refs/heads/master@{#11000}
This commit is contained in:
27
webrtc/api/BUILD.gn
Normal file
27
webrtc/api/BUILD.gn
Normal file
@ -0,0 +1,27 @@
|
||||
# Copyright (c) 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("../build/webrtc.gni")
|
||||
|
||||
if (is_ios) {
|
||||
source_set("rtc_api_objc") {
|
||||
deps = [
|
||||
"//webrtc/base:rtc_base_objc",
|
||||
]
|
||||
cflags = [
|
||||
"-fobjc-arc",
|
||||
"-Wobjc-missing-property-synthesis",
|
||||
]
|
||||
sources = [
|
||||
"objc/RTCIceServer+Private.h",
|
||||
"objc/RTCIceServer.h",
|
||||
"objc/RTCIceServer.mm",
|
||||
"objc/WebRTC-Prefix.pch",
|
||||
]
|
||||
}
|
||||
}
|
||||
1
webrtc/api/OWNERS
Normal file
1
webrtc/api/OWNERS
Normal file
@ -0,0 +1 @@
|
||||
tkchin@webrtc.org
|
||||
34
webrtc/api/api.gyp
Normal file
34
webrtc/api/api.gyp
Normal file
@ -0,0 +1,34 @@
|
||||
# Copyright (c) 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.
|
||||
|
||||
{
|
||||
'includes': [ '../build/common.gypi', ],
|
||||
'conditions': [
|
||||
['OS=="ios"', {
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'rtc_api_objc',
|
||||
'type': 'static_library',
|
||||
'dependencies': [
|
||||
'<(webrtc_root)/base/base.gyp:rtc_base_objc',
|
||||
],
|
||||
'sources': [
|
||||
'objc/RTCIceServer+Private.h',
|
||||
'objc/RTCIceServer.h',
|
||||
'objc/RTCIceServer.mm',
|
||||
],
|
||||
'xcode_settings': {
|
||||
'CLANG_ENABLE_OBJC_ARC': 'YES',
|
||||
'CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS': 'YES',
|
||||
'GCC_PREFIX_HEADER': 'objc/WebRTC-Prefix.pch',
|
||||
},
|
||||
}
|
||||
],
|
||||
}], # OS=="ios"
|
||||
],
|
||||
}
|
||||
37
webrtc/api/api_tests.gyp
Normal file
37
webrtc/api/api_tests.gyp
Normal file
@ -0,0 +1,37 @@
|
||||
# Copyright (c) 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.
|
||||
|
||||
{
|
||||
'includes': [ '../build/common.gypi', ],
|
||||
'conditions': [
|
||||
['OS=="ios"', {
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'rtc_api_objc_test',
|
||||
'type': 'executable',
|
||||
'dependencies': [
|
||||
'<(webrtc_root)/api/api.gyp:rtc_api_objc',
|
||||
'<(webrtc_root)/base/base_tests.gyp:rtc_base_tests_utils',
|
||||
],
|
||||
'sources': [
|
||||
'objctests/RTCIceServerTest.mm'
|
||||
],
|
||||
'xcode_settings': {
|
||||
'CLANG_ENABLE_OBJC_ARC': 'YES',
|
||||
'CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS': 'YES',
|
||||
'GCC_PREFIX_HEADER': 'objc/WebRTC-Prefix.pch',
|
||||
# |-ObjC| flag needed to make sure category method implementations
|
||||
# are included:
|
||||
# https://developer.apple.com/library/mac/qa/qa1490/_index.html
|
||||
'OTHER_LDFLAGS': ['-ObjC'],
|
||||
},
|
||||
}
|
||||
],
|
||||
}], # OS=="ios"
|
||||
],
|
||||
}
|
||||
1
webrtc/api/objc/OWNERS
Normal file
1
webrtc/api/objc/OWNERS
Normal file
@ -0,0 +1 @@
|
||||
tkchin@webrtc.org
|
||||
3
webrtc/api/objc/README
Normal file
3
webrtc/api/objc/README
Normal file
@ -0,0 +1,3 @@
|
||||
This is a work-in-progress to update the Objective-C API according to the W3C
|
||||
specification. The Objective-C API located at talk/app/webrtc/objc is
|
||||
deprecated, but will remain for the time being.
|
||||
28
webrtc/api/objc/RTCIceServer+Private.h
Normal file
28
webrtc/api/objc/RTCIceServer+Private.h
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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 "RTCIceServer.h"
|
||||
|
||||
#include "talk/app/webrtc/peerconnectioninterface.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface RTCIceServer ()
|
||||
|
||||
/**
|
||||
* IceServer struct representation of this RTCIceServer object's data.
|
||||
* This is needed to pass to the underlying C++ APIs.
|
||||
*/
|
||||
@property(nonatomic, readonly)
|
||||
webrtc::PeerConnectionInterface::IceServer iceServer;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
42
webrtc/api/objc/RTCIceServer.h
Normal file
42
webrtc/api/objc/RTCIceServer.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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 <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface RTCIceServer : NSObject
|
||||
|
||||
/** URI(s) for this server represented as NSStrings. */
|
||||
@property(nonatomic, copy, readonly) NSArray<NSString *> *urlStrings;
|
||||
|
||||
/** Username to use if this RTCIceServer object is a TURN server. */
|
||||
@property(nonatomic, copy, readonly, nullable) NSString *username;
|
||||
|
||||
/** Credential to use if this RTCIceServer object is a TURN server. */
|
||||
@property(nonatomic, copy, readonly, nullable) NSString *credential;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
/** Convenience initializer for a server with no authentication (e.g. STUN). */
|
||||
- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings;
|
||||
|
||||
/**
|
||||
* Initialize an RTCIceServer with its associated URLs, optional username,
|
||||
* optional credential, and credentialType.
|
||||
*/
|
||||
- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
|
||||
username:(nullable NSString *)username
|
||||
credential:(nullable NSString *)credential
|
||||
NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
64
webrtc/api/objc/RTCIceServer.mm
Normal file
64
webrtc/api/objc/RTCIceServer.mm
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* 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 "RTCIceServer.h"
|
||||
|
||||
#import "webrtc/api/objc/RTCIceServer+Private.h"
|
||||
#import "webrtc/base/objc/NSString+StdString.h"
|
||||
|
||||
@implementation RTCIceServer
|
||||
|
||||
@synthesize urlStrings = _urlStrings;
|
||||
@synthesize username = _username;
|
||||
@synthesize credential = _credential;
|
||||
|
||||
- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings {
|
||||
NSParameterAssert(urlStrings.count);
|
||||
return [self initWithURLStrings:urlStrings
|
||||
username:nil
|
||||
credential:nil];
|
||||
}
|
||||
|
||||
- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
|
||||
username:(NSString *)username
|
||||
credential:(NSString *)credential {
|
||||
NSParameterAssert(urlStrings.count);
|
||||
if (self = [super init]) {
|
||||
_urlStrings = [[NSArray alloc] initWithArray:urlStrings copyItems:YES];
|
||||
_username = [username copy];
|
||||
_credential = [credential copy];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSString *)description {
|
||||
return [NSString stringWithFormat:@"RTCIceServer:\n%@\n%@\n%@",
|
||||
_urlStrings,
|
||||
_username,
|
||||
_credential];
|
||||
}
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (webrtc::PeerConnectionInterface::IceServer)iceServer {
|
||||
__block webrtc::PeerConnectionInterface::IceServer iceServer;
|
||||
|
||||
iceServer.username = [NSString stdStringForString:_username];
|
||||
iceServer.password = [NSString stdStringForString:_credential];
|
||||
|
||||
[_urlStrings enumerateObjectsUsingBlock:^(NSString *url,
|
||||
NSUInteger idx,
|
||||
BOOL *stop) {
|
||||
iceServer.urls.push_back(url.stdString);
|
||||
}];
|
||||
return iceServer;
|
||||
}
|
||||
|
||||
@end
|
||||
13
webrtc/api/objc/WebRTC-Prefix.pch
Normal file
13
webrtc/api/objc/WebRTC-Prefix.pch
Normal file
@ -0,0 +1,13 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#if !defined(__has_feature) || !__has_feature(objc_arc)
|
||||
#error "This file requires ARC support."
|
||||
#endif
|
||||
84
webrtc/api/objctests/RTCIceServerTest.mm
Normal file
84
webrtc/api/objctests/RTCIceServerTest.mm
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* 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 <Foundation/Foundation.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "webrtc/base/gunit.h"
|
||||
|
||||
#import "webrtc/api/objc/RTCIceServer.h"
|
||||
#import "webrtc/api/objc/RTCIceServer+Private.h"
|
||||
|
||||
@interface RTCIceServerTest : NSObject
|
||||
- (void)testOneURLServer;
|
||||
- (void)testTwoURLServer;
|
||||
- (void)testPasswordCredential;
|
||||
@end
|
||||
|
||||
@implementation RTCIceServerTest
|
||||
|
||||
- (void)testOneURLServer {
|
||||
RTCIceServer *server = [[RTCIceServer alloc] initWithURLStrings:@[
|
||||
@"stun:stun1.example.net" ]];
|
||||
|
||||
webrtc::PeerConnectionInterface::IceServer iceStruct = server.iceServer;
|
||||
EXPECT_EQ((size_t)1, iceStruct.urls.size());
|
||||
EXPECT_EQ("stun:stun1.example.net", iceStruct.urls.front());
|
||||
EXPECT_EQ("", iceStruct.username);
|
||||
EXPECT_EQ("", iceStruct.password);
|
||||
}
|
||||
|
||||
- (void)testTwoURLServer {
|
||||
RTCIceServer *server = [[RTCIceServer alloc] initWithURLStrings:@[
|
||||
@"turn1:turn1.example.net", @"turn2:turn2.example.net" ]];
|
||||
|
||||
webrtc::PeerConnectionInterface::IceServer iceStruct = server.iceServer;
|
||||
EXPECT_EQ((size_t)2, iceStruct.urls.size());
|
||||
EXPECT_EQ("turn1:turn1.example.net", iceStruct.urls.front());
|
||||
EXPECT_EQ("turn2:turn2.example.net", iceStruct.urls.back());
|
||||
EXPECT_EQ("", iceStruct.username);
|
||||
EXPECT_EQ("", iceStruct.password);
|
||||
}
|
||||
|
||||
- (void)testPasswordCredential {
|
||||
RTCIceServer *server = [[RTCIceServer alloc]
|
||||
initWithURLStrings:@[ @"turn1:turn1.example.net" ]
|
||||
username:@"username"
|
||||
credential:@"credential"];
|
||||
webrtc::PeerConnectionInterface::IceServer iceStruct = server.iceServer;
|
||||
EXPECT_EQ((size_t)1, iceStruct.urls.size());
|
||||
EXPECT_EQ("turn1:turn1.example.net", iceStruct.urls.front());
|
||||
EXPECT_EQ("username", iceStruct.username);
|
||||
EXPECT_EQ("credential", iceStruct.password);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
TEST(RTCIceServerTest, OneURLTest) {
|
||||
@autoreleasepool {
|
||||
RTCIceServerTest *test = [[RTCIceServerTest alloc] init];
|
||||
[test testOneURLServer];
|
||||
}
|
||||
}
|
||||
|
||||
TEST(RTCIceServerTest, TwoURLTest) {
|
||||
@autoreleasepool {
|
||||
RTCIceServerTest *test = [[RTCIceServerTest alloc] init];
|
||||
[test testTwoURLServer];
|
||||
}
|
||||
}
|
||||
|
||||
TEST(RTCIceServerTest, PasswordCredentialTest) {
|
||||
@autoreleasepool {
|
||||
RTCIceServerTest *test = [[RTCIceServerTest alloc] init];
|
||||
[test testPasswordCredential];
|
||||
}
|
||||
}
|
||||
@ -48,6 +48,7 @@ config("openssl_config") {
|
||||
|
||||
config("ios_config") {
|
||||
libs = [
|
||||
"AVFoundation.framework",
|
||||
"CFNetwork.framework",
|
||||
|
||||
#"Foundation.framework", # Already included in //build/config:default_libs.
|
||||
@ -618,6 +619,8 @@ if (is_ios) {
|
||||
public_configs = [ "..:common_inherited_config" ]
|
||||
|
||||
sources = [
|
||||
"objc/NSString+StdString.h",
|
||||
"objc/NSString+StdString.mm",
|
||||
"objc/RTCCameraPreviewView.h",
|
||||
"objc/RTCCameraPreviewView.m",
|
||||
"objc/RTCDispatcher.h",
|
||||
|
||||
@ -33,13 +33,28 @@
|
||||
'rtc_base',
|
||||
],
|
||||
'sources': [
|
||||
'objc/RTCCameraPreviewView.h',
|
||||
'objc/RTCCameraPreviewView.m',
|
||||
'objc/NSString+StdString.h',
|
||||
'objc/NSString+StdString.mm',
|
||||
'objc/RTCDispatcher.h',
|
||||
'objc/RTCDispatcher.m',
|
||||
'objc/RTCLogging.h',
|
||||
'objc/RTCLogging.mm',
|
||||
],
|
||||
'conditions': [
|
||||
['OS=="ios"', {
|
||||
'sources': [
|
||||
'objc/RTCCameraPreviewView.h',
|
||||
'objc/RTCCameraPreviewView.m',
|
||||
],
|
||||
'all_dependent_settings': {
|
||||
'xcode_settings': {
|
||||
'OTHER_LDFLAGS': [
|
||||
'-framework AVFoundation',
|
||||
],
|
||||
},
|
||||
},
|
||||
}],
|
||||
],
|
||||
'xcode_settings': {
|
||||
'CLANG_ENABLE_OBJC_ARC': 'YES',
|
||||
'CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS': 'YES',
|
||||
|
||||
25
webrtc/base/objc/NSString+StdString.h
Normal file
25
webrtc/base/objc/NSString+StdString.h
Normal file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* 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 <Foundation/Foundation.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface NSString (StdString)
|
||||
|
||||
@property(nonatomic, readonly) std::string stdString;
|
||||
|
||||
+ (std::string)stdStringForString:(NSString *)nsString;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
25
webrtc/base/objc/NSString+StdString.mm
Normal file
25
webrtc/base/objc/NSString+StdString.mm
Normal file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* 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 "NSString+StdString.h"
|
||||
|
||||
@implementation NSString (StdString)
|
||||
|
||||
- (std::string)stdString {
|
||||
return [NSString stdStringForString:self];
|
||||
}
|
||||
|
||||
+ (std::string)stdStringForString:(NSString *)nsString {
|
||||
NSData *charData = [nsString dataUsingEncoding:NSUTF8StringEncoding];
|
||||
return std::string(reinterpret_cast<const char *>(charData.bytes),
|
||||
charData.length);
|
||||
}
|
||||
|
||||
@end
|
||||
@ -32,6 +32,11 @@
|
||||
'<(DEPTH)/testing/android/native_test.gyp:native_test_native_code',
|
||||
],
|
||||
}],
|
||||
['OS=="ios"', {
|
||||
'dependencies': [
|
||||
'api/api_tests.gyp:rtc_api_objc_test',
|
||||
]
|
||||
}]
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user