blob: 8bde37239f0c480a94309c75a64ff1461837be7f [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 <AvailabilityMacros.h>
12#import <Foundation/Foundation.h>
13
14#import "RTCMacros.h"
15
16NS_ASSUME_NONNULL_BEGIN
17
18RTC_EXPORT
19@interface RTCDataBuffer : NSObject
20
21/** NSData representation of the underlying buffer. */
22@property(nonatomic, readonly) NSData *data;
23
24/** Indicates whether |data| contains UTF-8 or binary data. */
25@property(nonatomic, readonly) BOOL isBinary;
26
27- (instancetype)init NS_UNAVAILABLE;
28
29/**
30 * Initialize an RTCDataBuffer from NSData. |isBinary| indicates whether |data|
31 * contains UTF-8 or binary data.
32 */
33- (instancetype)initWithData:(NSData *)data isBinary:(BOOL)isBinary;
34
35@end
36
37@class RTCDataChannel;
38RTC_EXPORT
39@protocol RTCDataChannelDelegate <NSObject>
40
41/** The data channel state changed. */
42- (void)dataChannelDidChangeState:(RTCDataChannel *)dataChannel;
43
44/** The data channel successfully received a data buffer. */
45- (void)dataChannel:(RTCDataChannel *)dataChannel
46 didReceiveMessageWithBuffer:(RTCDataBuffer *)buffer;
47
48@optional
49/** The data channel's |bufferedAmount| changed. */
50- (void)dataChannel:(RTCDataChannel *)dataChannel didChangeBufferedAmount:(uint64_t)amount;
51
52@end
53
54/** Represents the state of the data channel. */
55typedef NS_ENUM(NSInteger, RTCDataChannelState) {
56 RTCDataChannelStateConnecting,
57 RTCDataChannelStateOpen,
58 RTCDataChannelStateClosing,
59 RTCDataChannelStateClosed,
60};
61
62RTC_EXPORT
63@interface RTCDataChannel : NSObject
64
65/**
66 * A label that can be used to distinguish this data channel from other data
67 * channel objects.
68 */
69@property(nonatomic, readonly) NSString *label;
70
71/** Whether the data channel can send messages in unreliable mode. */
72@property(nonatomic, readonly) BOOL isReliable DEPRECATED_ATTRIBUTE;
73
74/** Returns whether this data channel is ordered or not. */
75@property(nonatomic, readonly) BOOL isOrdered;
76
77/** Deprecated. Use maxPacketLifeTime. */
78@property(nonatomic, readonly) NSUInteger maxRetransmitTime DEPRECATED_ATTRIBUTE;
79
80/**
81 * The length of the time window (in milliseconds) during which transmissions
82 * and retransmissions may occur in unreliable mode.
83 */
84@property(nonatomic, readonly) uint16_t maxPacketLifeTime;
85
86/**
87 * The maximum number of retransmissions that are attempted in unreliable mode.
88 */
89@property(nonatomic, readonly) uint16_t maxRetransmits;
90
91/**
92 * The name of the sub-protocol used with this data channel, if any. Otherwise
93 * this returns an empty string.
94 */
95@property(nonatomic, readonly) NSString *protocol;
96
97/**
98 * Returns whether this data channel was negotiated by the application or not.
99 */
100@property(nonatomic, readonly) BOOL isNegotiated;
101
102/** Deprecated. Use channelId. */
103@property(nonatomic, readonly) NSInteger streamId DEPRECATED_ATTRIBUTE;
104
105/** The identifier for this data channel. */
106@property(nonatomic, readonly) int channelId;
107
108/** The state of the data channel. */
109@property(nonatomic, readonly) RTCDataChannelState readyState;
110
111/**
112 * The number of bytes of application data that have been queued using
113 * |sendData:| but that have not yet been transmitted to the network.
114 */
115@property(nonatomic, readonly) uint64_t bufferedAmount;
116
117/** The delegate for this data channel. */
118@property(nonatomic, weak) id<RTCDataChannelDelegate> delegate;
119
120- (instancetype)init NS_UNAVAILABLE;
121
122/** Closes the data channel. */
123- (void)close;
124
125/** Attempt to send |data| on this data channel's underlying data transport. */
126- (BOOL)sendData:(RTCDataBuffer *)data;
127
128@end
129
130NS_ASSUME_NONNULL_END