Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 42 additions & 44 deletions WebDriverAgentLib/Vendor/CocoaAsyncSocket/GCDAsyncUdpSocket.m
Original file line number Diff line number Diff line change
Expand Up @@ -2883,7 +2883,7 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError

// Create the socket(s) if needed

if ((self->flags & kDidCreateSockets) == 0)
if ((self->flags & kDidCreateSockets) == 0)
{
if (![self createSocket4:useIPv4 socket6:useIPv6 error:&err])
{
Expand All @@ -2897,7 +2897,7 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError

if (useIPv4)
{
int status = bind(self->socket4FD, (const struct sockaddr *)[interface4 bytes], (socklen_t)[interface4 length]);
int status = bind(self->socket4FD, (const struct sockaddr *)[interface4 bytes], (socklen_t)[interface4 length]);
if (status == -1)
{
[self closeSockets];
Expand All @@ -2911,7 +2911,7 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError

if (useIPv6)
{
int status = bind(self->socket6FD, (const struct sockaddr *)[interface6 bytes], (socklen_t)[interface6 length]);
int status = bind(self->socket6FD, (const struct sockaddr *)[interface6 bytes], (socklen_t)[interface6 length]);
if (status == -1)
{
[self closeSockets];
Expand All @@ -2925,10 +2925,10 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError

// Update flags

self->flags |= kDidBind;
self->flags |= kDidBind;

if (!useIPv4) self->flags |= kIPv4Deactivated;
if (!useIPv6) self->flags |= kIPv6Deactivated;
if (!useIPv4) self->flags |= kIPv4Deactivated;
if (!useIPv6) self->flags |= kIPv6Deactivated;

result = YES;

Expand Down Expand Up @@ -3003,7 +3003,7 @@ - (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr

// Create the socket(s) if needed

if ((self->flags & kDidCreateSockets) == 0)
if ((self->flags & kDidCreateSockets) == 0)
{
if (![self createSocket4:useIPv4 socket6:useIPv6 error:&err])
{
Expand All @@ -3013,30 +3013,28 @@ - (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr

// Bind the socket(s)

if (useIPv4)
if (useIPv4 || useIPv6)
{
NSData *addressData = useIPv4 ? localAddr4 : localAddr6;
int socketFD = useIPv4 ? self->socket4FD : self->socket6FD;
NSString *protocol = useIPv4 ? @"IPv4" : @"IPv6";

LogVerbose(@"Binding socket to address(%@:%hu)",
[[self class] hostFromAddress:localAddr4],
[[self class] portFromAddress:localAddr4]);
[[self class] hostFromAddress:addressData],
[[self class] portFromAddress:addressData]);

int status = bind(self->socket4FD, (const struct sockaddr *)[localAddr4 bytes], (socklen_t)[localAddr4 length]);
if (status == -1)
const struct sockaddr *addr = (const struct sockaddr *)[addressData bytes];
if (addr == NULL)
{
[self closeSockets];

NSString *reason = @"Error in bind() function";
err = [self errnoErrorWithReason:reason];
NSString *reason = [NSString stringWithFormat:@"Invalid address data for %@ bind", protocol];
err = [self badParamError:reason];

return_from_block;
}
}
else
{
LogVerbose(@"Binding socket to address(%@:%hu)",
[[self class] hostFromAddress:localAddr6],
[[self class] portFromAddress:localAddr6]);

int status = bind(self->socket6FD, (const struct sockaddr *)[localAddr6 bytes], (socklen_t)[localAddr6 length]);
int status = bind(socketFD, addr, (socklen_t)[addressData length]);
if (status == -1)
{
[self closeSockets];
Expand All @@ -3050,10 +3048,10 @@ - (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr

// Update flags

self->flags |= kDidBind;
self->flags |= kDidBind;

if (!useIPv4) self->flags |= kIPv4Deactivated;
if (!useIPv6) self->flags |= kIPv6Deactivated;
if (!useIPv4) self->flags |= kIPv4Deactivated;
if (!useIPv6) self->flags |= kIPv6Deactivated;

result = YES;

Expand Down Expand Up @@ -3140,7 +3138,7 @@ - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)e

// Create the socket(s) if needed

if ((self->flags & kDidCreateSockets) == 0)
if ((self->flags & kDidCreateSockets) == 0)
{
if (![self createSockets:&err])
{
Expand Down Expand Up @@ -3173,9 +3171,9 @@ - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)e

// Updates flags, add connect packet to send queue, and pump send queue

self->flags |= kConnecting;
self->flags |= kConnecting;

[self->sendQueue addObject:packet];
[self->sendQueue addObject:packet];
[self maybeDequeueSend];

result = YES;
Expand Down Expand Up @@ -3221,7 +3219,7 @@ - (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr

// Create the socket(s) if needed

if ((self->flags & kDidCreateSockets) == 0)
if ((self->flags & kDidCreateSockets) == 0)
{
if (![self createSockets:&err])
{
Expand All @@ -3240,9 +3238,9 @@ - (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr

// Updates flags, add connect packet to send queue, and pump send queue

self->flags |= kConnecting;
self->flags |= kConnecting;

[self->sendQueue addObject:packet];
[self->sendQueue addObject:packet];
[self maybeDequeueSend];

result = YES;
Expand Down Expand Up @@ -3473,7 +3471,7 @@ - (BOOL)performMulticastRequest:(int)requestType

// Perform join

if ((self->socket4FD != SOCKET_NULL) && groupAddr4 && interfaceAddr4)
if ((self->socket4FD != SOCKET_NULL) && groupAddr4 && interfaceAddr4)
{
const struct sockaddr_in *nativeGroup = (const struct sockaddr_in *)[groupAddr4 bytes];
const struct sockaddr_in *nativeIface = (const struct sockaddr_in *)[interfaceAddr4 bytes];
Expand All @@ -3495,7 +3493,7 @@ - (BOOL)performMulticastRequest:(int)requestType

result = YES;
}
else if ((self->socket6FD != SOCKET_NULL) && groupAddr6 && interfaceAddr6)
else if ((self->socket6FD != SOCKET_NULL) && groupAddr6 && interfaceAddr6)
{
const struct sockaddr_in6 *nativeGroup = (const struct sockaddr_in6 *)[groupAddr6 bytes];

Expand Down Expand Up @@ -3549,7 +3547,7 @@ - (BOOL)sendIPv4MulticastOnInterface:(NSString*)interface error:(NSError **)errP
return_from_block;
}

if ((self->flags & kDidCreateSockets) == 0)
if ((self->flags & kDidCreateSockets) == 0)
{
if (![self createSockets:&err])
{
Expand Down Expand Up @@ -3582,7 +3580,7 @@ - (BOOL)sendIPv4MulticastOnInterface:(NSString*)interface error:(NSError **)errP
}
}

}};
}};

if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey))
block();
Expand Down Expand Up @@ -3637,9 +3635,9 @@ - (BOOL)sendIPv6MulticastOnInterface:(NSString*)interface error:(NSError **)errP
return_from_block;
}
result = YES;
}
}

}};
}};

if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey))
block();
Expand Down Expand Up @@ -3668,7 +3666,7 @@ - (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr
return_from_block;
}

if ((self->flags & kDidCreateSockets) == 0)
if ((self->flags & kDidCreateSockets) == 0)
{
if (![self createSockets:&err])
{
Expand All @@ -3677,9 +3675,9 @@ - (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr
}

int value = flag ? 1 : 0;
if (self->socket4FD != SOCKET_NULL)
if (self->socket4FD != SOCKET_NULL)
{
int error = setsockopt(self->socket4FD, SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof(value));
int error = setsockopt(self->socket4FD, SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof(value));

if (error)
{
Expand All @@ -3690,9 +3688,9 @@ - (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr
result = YES;
}

if (self->socket6FD != SOCKET_NULL)
if (self->socket6FD != SOCKET_NULL)
{
int error = setsockopt(self->socket6FD, SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof(value));
int error = setsockopt(self->socket6FD, SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof(value));

if (error)
{
Expand Down Expand Up @@ -3732,18 +3730,18 @@ - (BOOL)enableBroadcast:(BOOL)flag error:(NSError **)errPtr
return_from_block;
}

if ((self->flags & kDidCreateSockets) == 0)
if ((self->flags & kDidCreateSockets) == 0)
{
if (![self createSockets:&err])
{
return_from_block;
}
}

if (self->socket4FD != SOCKET_NULL)
if (self->socket4FD != SOCKET_NULL)
{
int value = flag ? 1 : 0;
int error = setsockopt(self->socket4FD, SOL_SOCKET, SO_BROADCAST, (const void *)&value, sizeof(value));
int error = setsockopt(self->socket4FD, SOL_SOCKET, SO_BROADCAST, (const void *)&value, sizeof(value));

if (error)
{
Expand Down
Loading