diff --git a/cw_core/lib/utils/proxy_socket/insecure.dart b/cw_core/lib/utils/proxy_socket/insecure.dart index 3ced63137..6c0927409 100644 --- a/cw_core/lib/utils/proxy_socket/insecure.dart +++ b/cw_core/lib/utils/proxy_socket/insecure.dart @@ -1,4 +1,5 @@ +import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/proxy_socket/abstract.dart'; import 'dart:async'; import 'dart:typed_data'; @@ -9,16 +10,30 @@ class ProxySocketInsecure implements ProxySocket { ProxySocketInsecure(this.socket); + bool _isClosed = false; + ProxyAddress get address => ProxyAddress(host: socket.remoteAddress.host, port: socket.remotePort); @override - Future close() => socket.close(); + Future close() { + _isClosed = true; + return socket.close(); + } @override - void destroy() => socket.destroy(); + void destroy() { + _isClosed = true; + socket.destroy(); + } @override - void write(String data) => socket.write(data); + void write(String data) { + if (_isClosed) { + printV("ProxySocketInsecure: write: socket is closed"); + return; + } + socket.write(data); + } @override StreamSubscription> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) { diff --git a/cw_core/lib/utils/proxy_socket/secure.dart b/cw_core/lib/utils/proxy_socket/secure.dart index 6ff287251..450753bb2 100644 --- a/cw_core/lib/utils/proxy_socket/secure.dart +++ b/cw_core/lib/utils/proxy_socket/secure.dart @@ -2,23 +2,38 @@ import 'dart:async'; import 'dart:io'; import 'dart:typed_data'; +import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/proxy_socket/abstract.dart'; class ProxySocketSecure implements ProxySocket { final SecureSocket socket; + bool _isClosed = false; + ProxySocketSecure(this.socket); ProxyAddress get address => ProxyAddress(host: socket.remoteAddress.host, port: socket.remotePort); @override - Future close() => socket.close(); + Future close() { + _isClosed = true; + return socket.close(); + } @override - void destroy() => socket.destroy(); + void destroy() { + _isClosed = true; + socket.destroy(); + } @override - void write(String data) => socket.write(data); + void write(String data) { + if (_isClosed) { + printV("ProxySocketSecure: write: socket is closed"); + return; + } + socket.write(data); + } @override StreamSubscription> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) { diff --git a/cw_core/lib/utils/proxy_socket/socks.dart b/cw_core/lib/utils/proxy_socket/socks.dart index 081e89c8d..5a8845a93 100644 --- a/cw_core/lib/utils/proxy_socket/socks.dart +++ b/cw_core/lib/utils/proxy_socket/socks.dart @@ -1,25 +1,35 @@ import 'dart:async'; import 'dart:typed_data'; +import 'package:cw_core/utils/print_verbose.dart'; import 'package:cw_core/utils/proxy_socket/abstract.dart'; import 'package:socks_socket/socks_socket.dart'; class ProxySocketSocks implements ProxySocket { final SOCKSSocket socket; - + bool _isClosed = false; ProxySocketSocks(this.socket); @override ProxyAddress get address => ProxyAddress(host: socket.proxyHost, port: socket.proxyPort); @override - Future close() => socket.close(); + Future close() { + _isClosed = true; + return socket.close(); + } @override void destroy() => close(); @override - void write(String data) => socket.write(data); + void write(String data) { + if (_isClosed) { + printV("ProxySocketSocks: write: socket is closed"); + return; + } + socket.write(data); + } @override StreamSubscription> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {