blob: ab5fc4a9edeb317a1f6839171679d0b79e238f08 [file] [log] [blame]
Anders Carlsson7bca8ca2018-08-30 09:30:29 +02001/*
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 <Foundation/Foundation.h>
12
13#import "RTCMacros.h"
Sergey Silkin9c147dd2018-09-12 10:45:38 +000014
15typedef NS_ENUM(NSUInteger, RTCTlsCertPolicy) {
16 RTCTlsCertPolicySecure,
17 RTCTlsCertPolicyInsecureNoCheck
18};
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020019
20NS_ASSUME_NONNULL_BEGIN
21
Mirko Bonadeie8d57242018-09-17 10:22:56 +020022RTC_OBJC_EXPORT
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020023@interface RTCIceServer : NSObject
24
25/** URI(s) for this server represented as NSStrings. */
26@property(nonatomic, readonly) NSArray<NSString *> *urlStrings;
27
28/** Username to use if this RTCIceServer object is a TURN server. */
29@property(nonatomic, readonly, nullable) NSString *username;
30
31/** Credential to use if this RTCIceServer object is a TURN server. */
32@property(nonatomic, readonly, nullable) NSString *credential;
33
34/**
Sergey Silkin9c147dd2018-09-12 10:45:38 +000035 * TLS certificate policy to use if this RTCIceServer object is a TURN server.
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020036 */
37@property(nonatomic, readonly) RTCTlsCertPolicy tlsCertPolicy;
38
39/**
40 If the URIs in |urls| only contain IP addresses, this field can be used
41 to indicate the hostname, which may be necessary for TLS (using the SNI
42 extension). If |urls| itself contains the hostname, this isn't necessary.
43 */
44@property(nonatomic, readonly, nullable) NSString *hostname;
45
Sergey Silkin9c147dd2018-09-12 10:45:38 +000046/** List of protocols to be used in the TLS ALPN extension. */
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020047@property(nonatomic, readonly) NSArray<NSString *> *tlsAlpnProtocols;
48
49/**
50 List elliptic curves to be used in the TLS elliptic curves extension.
51 Only curve names supported by OpenSSL should be used (eg. "P-256","X25519").
52 */
53@property(nonatomic, readonly) NSArray<NSString *> *tlsEllipticCurves;
54
55- (nonnull instancetype)init NS_UNAVAILABLE;
56
57/** Convenience initializer for a server with no authentication (e.g. STUN). */
58- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings;
59
60/**
61 * Initialize an RTCIceServer with its associated URLs, optional username,
62 * optional credential, and credentialType.
63 */
64- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
65 username:(nullable NSString *)username
66 credential:(nullable NSString *)credential;
67
68/**
69 * Initialize an RTCIceServer with its associated URLs, optional username,
70 * optional credential, and TLS cert policy.
71 */
72- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
73 username:(nullable NSString *)username
74 credential:(nullable NSString *)credential
75 tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy;
76
77/**
78 * Initialize an RTCIceServer with its associated URLs, optional username,
79 * optional credential, TLS cert policy and hostname.
80 */
81- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
82 username:(nullable NSString *)username
83 credential:(nullable NSString *)credential
84 tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy
85 hostname:(nullable NSString *)hostname;
86
87/**
88 * Initialize an RTCIceServer with its associated URLs, optional username,
89 * optional credential, TLS cert policy, hostname and ALPN protocols.
90 */
91- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
92 username:(nullable NSString *)username
93 credential:(nullable NSString *)credential
94 tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy
95 hostname:(nullable NSString *)hostname
96 tlsAlpnProtocols:(NSArray<NSString *> *)tlsAlpnProtocols;
97
98/**
99 * Initialize an RTCIceServer with its associated URLs, optional username,
100 * optional credential, TLS cert policy, hostname, ALPN protocols and
101 * elliptic curves.
102 */
103- (instancetype)initWithURLStrings:(NSArray<NSString *> *)urlStrings
104 username:(nullable NSString *)username
105 credential:(nullable NSString *)credential
106 tlsCertPolicy:(RTCTlsCertPolicy)tlsCertPolicy
107 hostname:(nullable NSString *)hostname
108 tlsAlpnProtocols:(nullable NSArray<NSString *> *)tlsAlpnProtocols
Sergey Silkin9c147dd2018-09-12 10:45:38 +0000109 tlsEllipticCurves:(nullable NSArray<NSString *> *)tlsEllipticCurves
110 NS_DESIGNATED_INITIALIZER;
Anders Carlsson7bca8ca2018-08-30 09:30:29 +0200111
112@end
113
114NS_ASSUME_NONNULL_END