fix: prevent writes to socket after closing (#2449)

This commit is contained in:
cyan
2025-08-12 16:23:39 +03:00
committed by GitHub
parent d24cb84e16
commit 1a173e7e1e
3 changed files with 49 additions and 9 deletions
+18 -3
View File
@@ -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<void> close() => socket.close();
Future<void> 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<List<int>> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
+18 -3
View File
@@ -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<void> close() => socket.close();
Future<void> 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<List<int>> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {
+13 -3
View File
@@ -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<void> close() => socket.close();
Future<void> 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<List<int>> listen(Function(Uint8List event) onData, {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true}) {