From 0ee43f032fea28c2712b2411dbcf9b2237a3a8a5 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 16 Mar 2026 12:53:11 +0000 Subject: [PATCH] Use TorManager's socksPort when checking proxy liveness for built-in Tor Expose the actual SOCKS port assigned by kmp-tor as TorManager.socksPort (StateFlow, 0 when not running). isSocksProxyAlive now connects to that port instead of unconditionally returning isRunning, giving a real liveness check. Also clears _socksPort to 0 on stop. https://claude.ai/code/session_01JwcwxdYrDnr3QyHqTBz33a --- .../com/greenart7c3/nostrsigner/service/TorManager.kt | 5 +++++ .../main/java/com/greenart7c3/nostrsigner/Amber.kt | 11 ++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/src/free/java/com/greenart7c3/nostrsigner/service/TorManager.kt b/app/src/free/java/com/greenart7c3/nostrsigner/service/TorManager.kt index 3688829c..1999f4af 100644 --- a/app/src/free/java/com/greenart7c3/nostrsigner/service/TorManager.kt +++ b/app/src/free/java/com/greenart7c3/nostrsigner/service/TorManager.kt @@ -45,6 +45,9 @@ object TorManager { private val _isRunning = MutableStateFlow(false) val isRunning: StateFlow = _isRunning.asStateFlow() + private val _socksPort = MutableStateFlow(0) + val socksPort: StateFlow = _socksPort.asStateFlow() + fun init(context: Context) { if (appContext != null) return appContext = context.applicationContext @@ -122,6 +125,7 @@ object TorManager { try { val port = addr.port.value Log.i(TAG, "Built-in Tor SOCKS proxy on port $port") + _socksPort.value = port HttpClientManager.setDefaultProxyOnPort(port) _isRunning.value = true appContext?.let { showNotification(it.getString(R.string.builtin_tor_active)) } @@ -151,6 +155,7 @@ object TorManager { val runtime = torRuntime ?: return torRuntime = null _isRunning.value = false + _socksPort.value = 0 cancelNotification() try { runBlocking(Dispatchers.IO) { runtime.stopDaemonAsync() } diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt b/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt index 3d429652..798ca4d1 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/Amber.kt @@ -143,7 +143,16 @@ class Amber : fun isSocksProxyAlive(proxyHost: String, proxyPort: Int): Boolean { if (settings.torMode == TorMode.BUILTIN) { - return TorManager.isRunning.value + val port = TorManager.socksPort.value + if (port == 0) return false + return try { + val socket = Socket() + socket.connect(InetSocketAddress(proxyHost, port), 5000) + socket.close() + true + } catch (e: Exception) { + false + } } try { val socket = Socket()