diff --git a/UdpSocket.ios.js b/UdpSocket.ios.js index 3b28dd6..94ebe9c 100644 --- a/UdpSocket.ios.js +++ b/UdpSocket.ios.js @@ -205,7 +205,18 @@ UdpSocket.prototype.address = function() { } UdpSocket.prototype.setBroadcast = function(flag) { - // nothing yet + var self = this + + if (this._state !== STATE.BOUND) { + throw new Error('you must bind before setBroadcast()') + } + + Sockets.setBroadcast(this._id, flag, function(err) { + if (err) { + self._debug('failed to set broadcast', err) + return self.emit('error', err) + } + }); } UdpSocket.prototype.setTTL = function(ttl) { diff --git a/UdpSocketClient.h b/UdpSocketClient.h index aab0ac4..34562e2 100644 --- a/UdpSocketClient.h +++ b/UdpSocketClient.h @@ -82,4 +82,9 @@ typedef enum RCTUDPError RCTUDPError; */ - (void)close; +/** + * Enable broadcast + */ +- (BOOL)setBroadcast:(BOOL) flag error:(NSError **) error; + @end diff --git a/UdpSocketClient.m b/UdpSocketClient.m index cb5c9a1..19d86d9 100644 --- a/UdpSocketClient.m +++ b/UdpSocketClient.m @@ -126,6 +126,12 @@ remoteAddress:(NSString *)address [_udpSocket close]; } +- (BOOL) setBroadcast:(BOOL)flag + error:(NSError **)error +{ + return [_udpSocket enableBroadcast:flag error:error]; +} + - (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext diff --git a/UdpSockets.m b/UdpSockets.m index 812879a..facaf57 100644 --- a/UdpSockets.m +++ b/UdpSockets.m @@ -82,6 +82,21 @@ RCT_EXPORT_METHOD(close:(NSString*)cId if (callback) callback(@[]); } +RCT_EXPORT_METHOD(setBroadcast:(NSString*)cId + flag:(BOOL)flag + callback:(RCTResponseSenderBlock)callback) { + UdpSocketClient* client = [self findClient:cId callback:callback]; + if (!client) return; + + NSError *error = nil; + if (![client setBroadcast:flag error:&error]) + { + callback(@[error]); + return; + } + callback(@[[NSNull null]]); +} + - (void) onData:(UdpSocketClient*) client data:(NSData *)data host:(NSString *)host port:(uint16_t)port { NSString *clientID = [[_clients allKeysForObject:client] objectAtIndex:0];