11#import <Foundation/Foundation.h>
12#import <dispatch/dispatch.h>
17extern NSString *
const GCDAsyncUdpSocketException;
18extern NSString *
const GCDAsyncUdpSocketErrorDomain;
20extern NSString *
const GCDAsyncUdpSocketQueueName;
21extern NSString *
const GCDAsyncUdpSocketThreadName;
23enum GCDAsyncUdpSocketError
25 GCDAsyncUdpSocketNoError = 0,
26 GCDAsyncUdpSocketBadConfigError,
27 GCDAsyncUdpSocketBadParamError,
28 GCDAsyncUdpSocketSendTimeoutError,
29 GCDAsyncUdpSocketClosedError,
30 GCDAsyncUdpSocketOtherError,
32typedef enum GCDAsyncUdpSocketError GCDAsyncUdpSocketError;
82typedef BOOL (^GCDAsyncUdpSocketReceiveFilterBlock)(NSData *data, NSData *address,
id *context);
110typedef 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;
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;