1 /*
2  * libjingle
3  * Copyright 2015 Google Inc.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  *  1. Redistributions of source code must retain the above copyright notice,
9  *     this list of conditions and the following disclaimer.
10  *  2. Redistributions in binary form must reproduce the above copyright notice,
11  *     this list of conditions and the following disclaimer in the documentation
12  *     and/or other materials provided with the distribution.
13  *  3. The name of the author may not be used to endorse or promote products
14  *     derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 // See talk/app/webrtc/peerconnectioninterface.h.
29 
30 #import <Foundation/Foundation.h>
31 
32 typedef NS_ENUM(NSInteger, RTCIceTransportsType) {
33   kRTCIceTransportsTypeNone,
34   kRTCIceTransportsTypeRelay,
35   kRTCIceTransportsTypeNoHost,
36   kRTCIceTransportsTypeAll,
37 };
38 
39 // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-08#section-4.1.1
40 typedef NS_ENUM(NSInteger, RTCBundlePolicy) {
41   kRTCBundlePolicyBalanced,
42   kRTCBundlePolicyMaxBundle,
43   kRTCBundlePolicyMaxCompat,
44 };
45 
46 // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-09#section-4.1.1
47 typedef NS_ENUM(NSInteger, RTCRtcpMuxPolicy) {
48   kRTCRtcpMuxPolicyNegotiate,
49   kRTCRtcpMuxPolicyRequire,
50 };
51 
52 typedef NS_ENUM(NSInteger, RTCTcpCandidatePolicy) {
53   kRTCTcpCandidatePolicyEnabled,
54   kRTCTcpCandidatePolicyDisabled,
55 };
56 
57 // Configuration object used for creating a peer connection.
58 @interface RTCConfiguration : NSObject
59 
60 @property(nonatomic, assign) RTCIceTransportsType iceTransportsType;
61 @property(nonatomic, copy) NSArray *iceServers;
62 @property(nonatomic, assign) RTCBundlePolicy bundlePolicy;
63 @property(nonatomic, assign) RTCRtcpMuxPolicy rtcpMuxPolicy;
64 @property(nonatomic, assign) RTCTcpCandidatePolicy tcpCandidatePolicy;
65 @property(nonatomic, assign) int audioJitterBufferMaxPackets;
66 @property(nonatomic, assign) int iceConnectionReceivingTimeout;
67 @property(nonatomic, assign) int iceBackupCandidatePairPingInterval;
68 
69 - (instancetype)initWithIceTransportsType:(RTCIceTransportsType)iceTransportsType
70                              bundlePolicy:(RTCBundlePolicy)bundlePolicy
71                             rtcpMuxPolicy:(RTCRtcpMuxPolicy)rtcpMuxPolicy
72                        tcpCandidatePolicy:(RTCTcpCandidatePolicy)tcpCandidatePolicy
73               audioJitterBufferMaxPackets:(int)audioJitterBufferMaxPackets
74             iceConnectionReceivingTimeout:(int)iceConnectionReceivingTimeout
75        iceBackupCandidatePairPingInterval:(int)iceBackupCandidatePairPingInterval;
76 
77 @end
78