blob: 4859e04bdba9bfb48bf2b6f85a6107aaca7347f9 [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
tkchin8b9ca952016-03-31 12:08:03 -070011#import <AvailabilityMacros.h>
hjone373dc22016-01-22 14:04:27 -080012#import <Foundation/Foundation.h>
13
tkchin9eeb6242016-04-27 01:54:20 -070014#import <WebRTC/RTCMacros.h>
tkchin8b577ed2016-04-19 10:04:41 -070015
hjone373dc22016-01-22 14:04:27 -080016NS_ASSUME_NONNULL_BEGIN
17
tkchin8b577ed2016-04-19 10:04:41 -070018RTC_EXPORT
hjone373dc22016-01-22 14:04:27 -080019@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
hjone373dc22016-01-22 14:04:27 -080037@class RTCDataChannel;
tkchin8b577ed2016-04-19 10:04:41 -070038RTC_EXPORT
hjone373dc22016-01-22 14:04:27 -080039@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
hjone373dc22016-01-22 14:04:27 -080049/** The data channel's |bufferedAmount| changed. */
Yves Gerey665174f2018-06-19 15:03:05 +020050- (void)dataChannel:(RTCDataChannel *)dataChannel didChangeBufferedAmount:(uint64_t)amount;
hjone373dc22016-01-22 14:04:27 -080051
52@end
53
hjone373dc22016-01-22 14:04:27 -080054/** Represents the state of the data channel. */
55typedef NS_ENUM(NSInteger, RTCDataChannelState) {
tkchin8b9ca952016-03-31 12:08:03 -070056 RTCDataChannelStateConnecting,
57 RTCDataChannelStateOpen,
58 RTCDataChannelStateClosing,
59 RTCDataChannelStateClosed,
hjone373dc22016-01-22 14:04:27 -080060};
61
tkchin8b577ed2016-04-19 10:04:41 -070062RTC_EXPORT
hjone373dc22016-01-22 14:04:27 -080063@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
tkchin8b9ca952016-03-31 12:08:03 -070071/** Whether the data channel can send messages in unreliable mode. */
72@property(nonatomic, readonly) BOOL isReliable DEPRECATED_ATTRIBUTE;
73
hjone373dc22016-01-22 14:04:27 -080074/** Returns whether this data channel is ordered or not. */
75@property(nonatomic, readonly) BOOL isOrdered;
76
tkchin8b9ca952016-03-31 12:08:03 -070077/** Deprecated. Use maxPacketLifeTime. */
Yves Gerey665174f2018-06-19 15:03:05 +020078@property(nonatomic, readonly) NSUInteger maxRetransmitTime DEPRECATED_ATTRIBUTE;
tkchin8b9ca952016-03-31 12:08:03 -070079
hjone373dc22016-01-22 14:04:27 -080080/**
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
tkchin8b9ca952016-03-31 12:08:03 -0700102/** Deprecated. Use channelId. */
103@property(nonatomic, readonly) NSInteger streamId DEPRECATED_ATTRIBUTE;
104
hjone373dc22016-01-22 14:04:27 -0800105/** The identifier for this data channel. */
hjona2f77982016-03-04 07:09:09 -0800106@property(nonatomic, readonly) int channelId;
hjone373dc22016-01-22 14:04:27 -0800107
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