11 #import <Foundation/Foundation.h>
12 #import <dispatch/dispatch.h>
17 extern NSString *
const GCDAsyncUdpSocketException;
18 extern NSString *
const GCDAsyncUdpSocketErrorDomain;
20 extern NSString *
const GCDAsyncUdpSocketQueueName;
21 extern NSString *
const GCDAsyncUdpSocketThreadName;
23 enum GCDAsyncUdpSocketError
25 GCDAsyncUdpSocketNoError = 0,
26 GCDAsyncUdpSocketBadConfigError,
27 GCDAsyncUdpSocketBadParamError,
28 GCDAsyncUdpSocketSendTimeoutError,
29 GCDAsyncUdpSocketClosedError,
30 GCDAsyncUdpSocketOtherError,
32 typedef enum GCDAsyncUdpSocketError GCDAsyncUdpSocketError;
82 typedef BOOL (^GCDAsyncUdpSocketReceiveFilterBlock)(NSData *data, NSData *address,
id *context);
110 typedef BOOL (^GCDAsyncUdpSocketSendFilterBlock)(NSData *data, NSData *address,
long tag);
113 @interface GCDAsyncUdpSocket : NSObject
131 - (id)initWithSocketQueue:(dispatch_queue_t)sq;
132 - (id)initWithDelegate:(
id)aDelegate delegateQueue:(dispatch_queue_t)dq;
133 - (id)initWithDelegate:(
id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQueue:(dispatch_queue_t)sq;
135 #pragma mark Configuration
138 - (void)setDelegate:(
id)delegate;
139 - (void)synchronouslySetDelegate:(
id)delegate;
141 - (dispatch_queue_t)delegateQueue;
142 - (void)setDelegateQueue:(dispatch_queue_t)delegateQueue;
143 - (void)synchronouslySetDelegateQueue:(dispatch_queue_t)delegateQueue;
145 - (void)getDelegate:(
id *)delegatePtr delegateQueue:(dispatch_queue_t *)delegateQueuePtr;
146 - (void)setDelegate:(
id)delegate delegateQueue:(dispatch_queue_t)delegateQueue;
147 - (void)synchronouslySetDelegate:(
id)delegate delegateQueue:(dispatch_queue_t)delegateQueue;
167 - (BOOL)isIPv4Enabled;
168 - (void)setIPv4Enabled:(BOOL)flag;
170 - (BOOL)isIPv6Enabled;
171 - (void)setIPv6Enabled:(BOOL)flag;
173 - (BOOL)isIPv4Preferred;
174 - (BOOL)isIPv6Preferred;
175 - (BOOL)isIPVersionNeutral;
177 - (void)setPreferIPv4;
178 - (void)setPreferIPv6;
179 - (void)setIPVersionNeutral;
197 - (uint16_t)maxReceiveIPv4BufferSize;
198 - (void)setMaxReceiveIPv4BufferSize:(uint16_t)max;
200 - (uint32_t)maxReceiveIPv6BufferSize;
201 - (void)setMaxReceiveIPv6BufferSize:(uint32_t)max;
208 - (void)setUserData:(
id)arbitraryUserData;
210 #pragma mark Diagnostics
221 - (NSData *)localAddress;
222 - (NSString *)localHost;
223 - (uint16_t)localPort;
225 - (NSData *)localAddress_IPv4;
226 - (NSString *)localHost_IPv4;
227 - (uint16_t)localPort_IPv4;
229 - (NSData *)localAddress_IPv6;
230 - (NSString *)localHost_IPv6;
231 - (uint16_t)localPort_IPv6;
243 - (NSData *)connectedAddress;
244 - (NSString *)connectedHost;
245 - (uint16_t)connectedPort;
301 - (BOOL)bindToPort:(uint16_t)port error:(NSError **)errPtr;
323 - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError **)errPtr;
343 - (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr;
345 #pragma mark Connecting
370 - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)errPtr;
401 - (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr;
403 #pragma mark Multicast
412 - (BOOL)joinMulticastGroup:(NSString *)group error:(NSError **)errPtr;
422 - (BOOL)joinMulticastGroup:(NSString *)group onInterface:(NSString *)interface error:(NSError **)errPtr;
424 - (BOOL)leaveMulticastGroup:(NSString *)group error:(NSError **)errPtr;
425 - (BOOL)leaveMulticastGroup:(NSString *)group onInterface:(NSString *)interface error:(NSError **)errPtr;
427 #pragma mark Broadcast
438 - (BOOL)enableBroadcast:(BOOL)flag error:(NSError **)errPtr;
481 - (void)sendData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(
long)tag;
530 - (void)sendData:(NSData *)data
531 toHost:(NSString *)host
533 withTimeout:(NSTimeInterval)timeout
578 - (void)sendData:(NSData *)data toAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout tag:(
long)tag;
601 - (void)setSendFilter:(GCDAsyncUdpSocketSendFilterBlock)filterBlock withQueue:(dispatch_queue_t)filterQueue;
616 - (void)setSendFilter:(GCDAsyncUdpSocketSendFilterBlock)filterBlock
617 withQueue:(dispatch_queue_t)filterQueue
618 isAsynchronous:(BOOL)isAsynchronous;
620 #pragma mark Receiving
646 - (BOOL)receiveOnce:(NSError **)errPtr;
672 - (BOOL)beginReceiving:(NSError **)errPtr;
686 - (void)pauseReceiving;
733 - (void)setReceiveFilter:(GCDAsyncUdpSocketReceiveFilterBlock)filterBlock withQueue:(dispatch_queue_t)filterQueue;
748 - (void)setReceiveFilter:(GCDAsyncUdpSocketReceiveFilterBlock)filterBlock
749 withQueue:(dispatch_queue_t)filterQueue
750 isAsynchronous:(BOOL)isAsynchronous;
769 - (void)closeAfterSending;
771 #pragma mark Advanced
844 - (void)markSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreConfiguredTargetQueue;
845 - (void)unmarkSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreviouslyConfiguredTargetQueue;
875 - (void)performBlock:(dispatch_block_t)block;
901 - (CFReadStreamRef)readStream;
902 - (CFWriteStreamRef)writeStream;
929 #pragma mark Utilities
935 + (NSString *)hostFromAddress:(NSData *)address;
936 + (uint16_t)portFromAddress:(NSData *)address;
937 + (int)familyFromAddress:(NSData *)address;
939 + (BOOL)isIPv4Address:(NSData *)address;
940 + (BOOL)isIPv6Address:(NSData *)address;
942 + (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr fromAddress:(NSData *)address;
943 + (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr family:(
int *)afPtr fromAddress:(NSData *)address;
951 @protocol GCDAsyncUdpSocketDelegate
961 - (void)udpSocket:(GCDAsyncUdpSocket *)sock didConnectToAddress:(NSData *)address;
971 - (void)udpSocket:(GCDAsyncUdpSocket *)sock didNotConnect:(NSError *)error;
976 - (void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(
long)tag;
982 - (void)udpSocket:(GCDAsyncUdpSocket *)sock didNotSendDataWithTag:(
long)tag dueToError:(NSError *)error;
987 - (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data
988 fromAddress:(NSData *)address
989 withFilterContext:(
id)filterContext;
994 - (void)udpSocketDidClose:(GCDAsyncUdpSocket *)sock withError:(NSError *)error;