blob: 893bd0a336585709b3086a532619e3aee13c0048 [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
37
38@class RTCDataChannel;
tkchin8b577ed2016-04-19 10:04:41 -070039RTC_EXPORT
hjone373dc22016-01-22 14:04:27 -080040@protocol RTCDataChannelDelegate <NSObject>
41
42/** The data channel state changed. */
43- (void)dataChannelDidChangeState:(RTCDataChannel *)dataChannel;
44
45/** The data channel successfully received a data buffer. */
46- (void)dataChannel:(RTCDataChannel *)dataChannel
47 didReceiveMessageWithBuffer:(RTCDataBuffer *)buffer;
48
49@optional
hjone373dc22016-01-22 14:04:27 -080050/** The data channel's |bufferedAmount| changed. */
51- (void)dataChannel:(RTCDataChannel *)dataChannel
tkchin121ac122016-03-21 09:08:40 -070052 didChangeBufferedAmount:(uint64_t)amount;
hjone373dc22016-01-22 14:04:27 -080053
54@end
55
56
57/** Represents the state of the data channel. */
58typedef NS_ENUM(NSInteger, RTCDataChannelState) {
tkchin8b9ca952016-03-31 12:08:03 -070059 RTCDataChannelStateConnecting,
60 RTCDataChannelStateOpen,
61 RTCDataChannelStateClosing,
62 RTCDataChannelStateClosed,
hjone373dc22016-01-22 14:04:27 -080063};
64
tkchin8b577ed2016-04-19 10:04:41 -070065RTC_EXPORT
hjone373dc22016-01-22 14:04:27 -080066@interface RTCDataChannel : NSObject
67
68/**
69 * A label that can be used to distinguish this data channel from other data
70 * channel objects.
71 */
72@property(nonatomic, readonly) NSString *label;
73
tkchin8b9ca952016-03-31 12:08:03 -070074/** Whether the data channel can send messages in unreliable mode. */
75@property(nonatomic, readonly) BOOL isReliable DEPRECATED_ATTRIBUTE;
76
hjone373dc22016-01-22 14:04:27 -080077/** Returns whether this data channel is ordered or not. */
78@property(nonatomic, readonly) BOOL isOrdered;
79
tkchin8b9ca952016-03-31 12:08:03 -070080/** Deprecated. Use maxPacketLifeTime. */
81@property(nonatomic, readonly) NSUInteger maxRetransmitTime
82 DEPRECATED_ATTRIBUTE;
83
hjone373dc22016-01-22 14:04:27 -080084/**
85 * The length of the time window (in milliseconds) during which transmissions
86 * and retransmissions may occur in unreliable mode.
87 */
88@property(nonatomic, readonly) uint16_t maxPacketLifeTime;
89
90/**
91 * The maximum number of retransmissions that are attempted in unreliable mode.
92 */
93@property(nonatomic, readonly) uint16_t maxRetransmits;
94
95/**
96 * The name of the sub-protocol used with this data channel, if any. Otherwise
97 * this returns an empty string.
98 */
99@property(nonatomic, readonly) NSString *protocol;
100
101/**
102 * Returns whether this data channel was negotiated by the application or not.
103 */
104@property(nonatomic, readonly) BOOL isNegotiated;
105
tkchin8b9ca952016-03-31 12:08:03 -0700106/** Deprecated. Use channelId. */
107@property(nonatomic, readonly) NSInteger streamId DEPRECATED_ATTRIBUTE;
108
hjone373dc22016-01-22 14:04:27 -0800109/** The identifier for this data channel. */
hjona2f77982016-03-04 07:09:09 -0800110@property(nonatomic, readonly) int channelId;
hjone373dc22016-01-22 14:04:27 -0800111
112/** The state of the data channel. */
113@property(nonatomic, readonly) RTCDataChannelState readyState;
114
115/**
116 * The number of bytes of application data that have been queued using
117 * |sendData:| but that have not yet been transmitted to the network.
118 */
119@property(nonatomic, readonly) uint64_t bufferedAmount;
120
121/** The delegate for this data channel. */
122@property(nonatomic, weak) id<RTCDataChannelDelegate> delegate;
123
124- (instancetype)init NS_UNAVAILABLE;
125
126/** Closes the data channel. */
127- (void)close;
128
129/** Attempt to send |data| on this data channel's underlying data transport. */
130- (BOOL)sendData:(RTCDataBuffer *)data;
131
132@end
133
134NS_ASSUME_NONNULL_END