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