finished implementation

This commit is contained in:
Fabian Freund
2025-09-14 11:41:01 +02:00
parent ac0f3b5dcc
commit a8334ae684
30 changed files with 848 additions and 83 deletions
+55 -7
View File
@@ -35,16 +35,19 @@ Future<void> onStart(ServiceInstance service) async {
service.invoke('portUpdate', {'port': port});
});
Future<void> stopProxies() async {
for (final proxyType in startedProxyType) {
await IPtProxyController().stop(proxyType);
}
startedProxyType.clear();
}
Future<void> stopService() async {
timeout?.cancel();
timeout = null;
Tor.instance.stop();
for (final proxyType in startedProxyType) {
await IPtProxyController().stop(proxyType);
}
startedProxyType.clear();
await stopProxies();
service.invoke('portUpdate', {'port': -1});
@@ -84,12 +87,57 @@ Future<void> onStart(ServiceInstance service) async {
}
}
service.on("start").listen((event) async {
Future<void> reconfigureService(
ProxyType? proxyType,
String? bridgeLines,
) async {
if (Tor.instance.hasClient) {
await stopProxies();
if (proxyType != null) {
final port = await IPtProxyController().start(proxyType, "");
startedProxyType.add(proxyType);
switch (proxyType) {
case ProxyType.obfs4:
await Tor.instance.reconfigure(
obfs4Port: port,
bridgeLines: bridgeLines,
);
case ProxyType.meekLite:
throw UnimplementedError();
case ProxyType.webtunnel:
throw UnimplementedError();
case ProxyType.snowflake:
await Tor.instance.reconfigure(
snowflakePort: port,
bridgeLines: bridgeLines,
);
}
} else {
await Tor.instance.reconfigure();
}
}
}
service.on("startOrReconfigure").listen((event) async {
final proxyType = ProxyType.values.firstWhereOrNull(
(x) => x.name == event?['proxyType'],
);
await startService(proxyType, event?['bridgeLines'] as String?);
await reconfigureService(proxyType, event?['bridgeLines'] as String?);
if (!Tor.instance.hasClient) {
await startService(proxyType, event?['bridgeLines'] as String?);
}
});
service.on("reconfigure").listen((event) async {
final proxyType = ProxyType.values.firstWhereOrNull(
(x) => x.name == event?['proxyType'],
);
await reconfigureService(proxyType, event?['bridgeLines'] as String?);
});
service.on("heartbeat").listen((event) {