From b92a6cdfac2bc4632252590a3cc87a20bb12af5a Mon Sep 17 00:00:00 2001 From: zarazaex69 Date: Fri, 10 Apr 2026 18:36:36 +0300 Subject: [PATCH] fix(speedtest): improve connection test with IP validation --- .../zarazaex/olc/handler/SpeedtestManager.kt | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/handler/SpeedtestManager.kt b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/handler/SpeedtestManager.kt index 93177253..97565c86 100644 --- a/V2rayNG/app/src/main/java/xyz/zarazaex/olc/handler/SpeedtestManager.kt +++ b/V2rayNG/app/src/main/java/xyz/zarazaex/olc/handler/SpeedtestManager.kt @@ -94,18 +94,23 @@ object SpeedtestManager { var result: String var elapsed = -1L - val conn = HttpUtil.createProxyConnection(SettingsManager.getDelayTestUrl(), port, 15000, 15000) ?: return Pair(elapsed, "") + val testUrl = "https://icanhazip.com" + val conn = HttpUtil.createProxyConnection(testUrl, port, 15000, 15000) ?: return Pair(elapsed, "") try { val start = SystemClock.elapsedRealtime() val code = conn.responseCode + + if (code != 200) { + throw IOException(context.getString(R.string.connection_test_error_status_code, code)) + } + + val responseBody = conn.inputStream.bufferedReader().readText().trim() elapsed = SystemClock.elapsedRealtime() - start - - result = when (code) { - 204 -> context.getString(R.string.connection_test_available, elapsed) - 200 if conn.contentLengthLong == 0L -> context.getString(R.string.connection_test_available, elapsed) - else -> throw IOException( - context.getString(R.string.connection_test_error_status_code, code) - ) + + if (xyz.zarazaex.olc.util.Utils.isPureIpAddress(responseBody)) { + result = context.getString(R.string.connection_test_available, elapsed) + } else { + throw IOException("Invalid IP response: $responseBody") } } catch (e: IOException) { Log.e(AppConfig.TAG, "Connection test IOException", e)