dev
dart 51 lines 1.6 KB
Raw
1 import 'dart:async';
2 import 'dart:io';
3 import 'dart:typed_data';
4
5 import 'package:cw_core/utils/proxy_socket/insecure.dart';
6 import 'package:cw_core/utils/proxy_socket/secure.dart';
7 import 'package:cw_core/utils/proxy_socket/socks.dart';
8 import 'package:cw_core/utils/proxy_wrapper.dart';
9 import 'package:socks_socket/socks_socket.dart';
10
11 class ProxyAddress {
12 final String host;
13 final int port;
14
15 ProxyAddress({required this.host, required this.port});
16 }
17
18 abstract class ProxySocket {
19 static Future<ProxySocket> connect(bool sslEnabled, ProxyAddress address,
20 {Duration? connectionTimeout}) async {
21 if (CakeTor.instance!.started) {
22 var socksSocket = await SOCKSSocket.create(
23 proxyHost: InternetAddress.loopbackIPv4.address,
24 proxyPort: CakeTor.instance!.port,
25 sslEnabled: sslEnabled,
26 );
27 await socksSocket.connect();
28 await socksSocket.connectTo(address.host, address.port);
29 return ProxySocketSocks(socksSocket);
30 }
31 if (sslEnabled == false) {
32 return ProxySocketInsecure(
33 await Socket.connect(address.host, address.port, timeout: connectionTimeout));
34 } else {
35 return ProxySocketSecure(await SecureSocket.connect(
36 address.host,
37 address.port,
38 timeout: connectionTimeout,
39 onBadCertificate: (_) => true,
40 ));
41 }
42 }
43
44 Future<void> close();
45 void destroy();
46 void write(String data);
47 bool get isClosed;
48 StreamSubscription<List<int>> listen(Function(Uint8List event) onData,
49 {Function(Object error)? onError, Function()? onDone, bool cancelOnError = true});
50 ProxyAddress get address;
51 }