accept method
Accept connection.
TCP: If connect
is true
this function will open connection
to requested host.
Mustn't throw any errors.
Implementation
@override
Future<Socket?> accept({
bool? connect,
bool? allowIPv6,
}) async {
final Socket? target;
final _connect = connect ?? false;
final _allowIPv6 = allowIPv6 ?? false;
if (_connect) {
if(!_allowIPv6 && desiredAddress.type == InternetAddressType.IPv6) {
add([
0x05,
CommandReplyCode.unsupportedAddressType.byte,
]);
return null;
}
try {
target = await Socket.connect(
desiredAddress.type == InternetAddressType.unix
? ((await InternetAddress.lookup(desiredAddress.address))[0])
: desiredAddress,
desiredPort,
);
target.done.ignore();
} catch (error) {
print(error);
await reject(CommandReplyCode.connectionRefused);
return null;
}
} else {
target = null;
}
add([
0x05, // Socks version
0x00, // Succeeded
0x00, // Reserved byte
0x01, // IPv4
0x00, 0x00, 0x00, 0x00, // address 0.0.0.0
0x00, 0x00, // port 0
]);
await flush();
return target;
}