diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java index 731b06d00..fa7c95537 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/logic/CharonVpnService.java @@ -269,7 +269,13 @@ public class CharonVpnService extends VpnService implements Runnable, VpnStateSe VpnProfile profile = loadProfile(uuid); if (profile != null) { - profile.setPassword(bundle.getString(VpnProfileDataSource.KEY_PASSWORD)); + String password = bundle.getString(VpnProfileDataSource.KEY_PASSWORD); + if (password != null) + { /* an unattended start (watchdog, pause end, FGS retry) carries no + * password: keep the one saved with the profile instead of + * wiping it, or the tunnel never comes back («password unavailable») */ + profile.setPassword(password); + } /* a backup port of F_Profile, for this attempt only */ int port = bundle.getInt(org.strongswan.android.logic.profiles.Resilience.KEY_PORT_OVERRIDE, 0); if (port > 0) diff --git a/src/frontends/android/docs/energy-plan.md b/src/frontends/android/docs/energy-plan.md index 3782c1196..84b665d68 100644 --- a/src/frontends/android/docs/energy-plan.md +++ b/src/frontends/android/docs/energy-plan.md @@ -174,3 +174,9 @@ - `UnderlyingNetworkTracker` и SSID для сценариев из кэша `NetworkMonitor` — нужен лог с реальных сетей. **Известное ограничение:** без «Будильников и напоминаний» keepalive в глубоком Doze остаётся под квотой; склейка заданий лишь освобождает слоты. + +**Найдено при smoke-тесте 2.19.0:** `CharonVpnService` при старте по `Intent` без пароля (watchdog, конец паузы, `FgsStartRetry`) затирал сохранённый в профиле пароль значением `null`; +туннель после смерти процесса не возвращался («Password unavailable»). Теперь пароль из `Intent` подставляется, только если он там есть. +Проверено на эмуляторе `shx36` (профиль на 192.0.2.1, туннель не поднимается, проверялась логика): `am crash` → watchdog поднимает сервис (~80 с, окно неточного +будильника); сценарий «Wi-Fi → включить» срабатывает по событию сети при выключенных правилах сетей (~10 с); будильник сценария по времени будит убитый процесс, +`ScenarioReceiver` ждёт сервис и возвращает прежнее состояние VPN. Без реального сервера не проверены keepalive/rekey, NAT-таймауты и энергопотребление.