forward method
Apply default handler to connection.
TCP: Forward connection to requested host.
UDP: Forward connections to respective hosts.
Implementation
@override
Future<void> forward({
bool? allowIPv6,
}) async {
final client = await accept();
final remote = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0);
client.where((event) => event == RawSocketEvent.read).listen((event) {
final packet = client.receiveSocksPacket();
if (packet == null)
return;
// Filter packets if client provided ip address and port.
if (desiredAddress.address == '0.0.0.0' &&
(desiredAddress != packet.clientAddress ||
desiredPort != packet.clientPort))
return;
remote.send(packet.data, packet.remoteAddress, packet.remotePort);
});
remote.where((event) => event == RawSocketEvent.read).listen((event) {
final datagram = remote.receive();
if (datagram == null)
return;
final packet =
SocksUpdPacket.create(datagram.address, datagram.port, datagram.data);
client.send(packet.socksPacket, desiredAddress, desiredPort);
});
}