mirror of
https://github.com/wgtunnel/android.git
synced 2026-07-03 14:07:49 +02:00
fix: add check if kernel supports WG (#993)
This commit is contained in:
@@ -2,6 +2,7 @@ package com.zaneschepke.wireguardautotunnel.core.tunnel
|
|||||||
|
|
||||||
import com.wireguard.android.backend.Backend
|
import com.wireguard.android.backend.Backend
|
||||||
import com.wireguard.android.backend.BackendException
|
import com.wireguard.android.backend.BackendException
|
||||||
|
import com.wireguard.android.backend.WgQuickBackend
|
||||||
import com.wireguard.android.backend.Tunnel as WgTunnel
|
import com.wireguard.android.backend.Tunnel as WgTunnel
|
||||||
import com.zaneschepke.wireguardautotunnel.R
|
import com.zaneschepke.wireguardautotunnel.R
|
||||||
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
|
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
|
||||||
@@ -9,6 +10,7 @@ import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
|
|||||||
import com.zaneschepke.wireguardautotunnel.di.Kernel
|
import com.zaneschepke.wireguardautotunnel.di.Kernel
|
||||||
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
|
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
|
||||||
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
|
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
|
||||||
|
import com.zaneschepke.wireguardautotunnel.domain.events.KernelWireguardNotSupported
|
||||||
import com.zaneschepke.wireguardautotunnel.domain.events.DnsFailure
|
import com.zaneschepke.wireguardautotunnel.domain.events.DnsFailure
|
||||||
import com.zaneschepke.wireguardautotunnel.domain.events.InvalidConfig
|
import com.zaneschepke.wireguardautotunnel.domain.events.InvalidConfig
|
||||||
import com.zaneschepke.wireguardautotunnel.domain.events.KernelTunnelName
|
import com.zaneschepke.wireguardautotunnel.domain.events.KernelTunnelName
|
||||||
@@ -55,6 +57,7 @@ constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun tunnelStateFlow(tunnelConfig: TunnelConfig): Flow<TunnelStatus> = callbackFlow {
|
override fun tunnelStateFlow(tunnelConfig: TunnelConfig): Flow<TunnelStatus> = callbackFlow {
|
||||||
|
if (!WgQuickBackend.hasKernelSupport()) close(KernelWireguardNotSupported())
|
||||||
validateWireGuardInterfaceName(tunnelConfig.name).onFailure { close(it) }
|
validateWireGuardInterfaceName(tunnelConfig.name).onFailure { close(it) }
|
||||||
|
|
||||||
val stateChannel = Channel<WgTunnel.State>()
|
val stateChannel = Channel<WgTunnel.State>()
|
||||||
|
|||||||
+4
@@ -40,3 +40,7 @@ class UnknownError : BackendCoreException() {
|
|||||||
class UapiUpdateFailed : BackendCoreException() {
|
class UapiUpdateFailed : BackendCoreException() {
|
||||||
override val stringRes = R.string.active_tunnel_update_failed
|
override val stringRes = R.string.active_tunnel_update_failed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class KernelWireguardNotSupported : BackendCoreException() {
|
||||||
|
override val stringRes = R.string.kernel_wireguard_unsupported
|
||||||
|
}
|
||||||
|
|||||||
+15
-1
@@ -3,7 +3,7 @@ package com.zaneschepke.wireguardautotunnel.viewmodel
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import com.zaneschepke.wireguardautotunnel.R
|
import com.wireguard.android.backend.WgQuickBackend
|
||||||
import com.zaneschepke.wireguardautotunnel.core.service.ServiceManager
|
import com.zaneschepke.wireguardautotunnel.core.service.ServiceManager
|
||||||
import com.zaneschepke.wireguardautotunnel.core.tunnel.TunnelManager
|
import com.zaneschepke.wireguardautotunnel.core.tunnel.TunnelManager
|
||||||
import com.zaneschepke.wireguardautotunnel.data.model.AppMode
|
import com.zaneschepke.wireguardautotunnel.data.model.AppMode
|
||||||
@@ -34,6 +34,7 @@ import kotlinx.coroutines.flow.map
|
|||||||
import org.amnezia.awg.config.BadConfigException
|
import org.amnezia.awg.config.BadConfigException
|
||||||
import org.orbitmvi.orbit.ContainerHost
|
import org.orbitmvi.orbit.ContainerHost
|
||||||
import org.orbitmvi.orbit.viewmodel.container
|
import org.orbitmvi.orbit.viewmodel.container
|
||||||
|
import timber.log.Timber
|
||||||
import xyz.teamgravity.pin_lock_compose.PinManager
|
import xyz.teamgravity.pin_lock_compose.PinManager
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
@@ -164,6 +165,19 @@ constructor(
|
|||||||
else StringValue.StringResource(R.string.root_accepted)
|
else StringValue.StringResource(R.string.root_accepted)
|
||||||
postSideEffect(GlobalSideEffect.Snackbar(message))
|
postSideEffect(GlobalSideEffect.Snackbar(message))
|
||||||
if (!accepted) return@intent
|
if (!accepted) return@intent
|
||||||
|
if (WgQuickBackend.hasKernelSupport())
|
||||||
|
Timber.i("Device supports kernel backend. WireGuard module is built in, switching to kernel backend.")
|
||||||
|
else {
|
||||||
|
Timber.e("Device does not support kernel backend!")
|
||||||
|
intent {
|
||||||
|
postSideEffect(
|
||||||
|
GlobalSideEffect.Snackbar(
|
||||||
|
StringValue.StringResource(R.string.kernel_wireguard_unsupported)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
return@intent
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
settingsRepository.upsert(state.settings.copy(appMode = appMode))
|
settingsRepository.upsert(state.settings.copy(appMode = appMode))
|
||||||
|
|||||||
@@ -324,5 +324,6 @@
|
|||||||
<string name="donation_closing">Moim marzeniem jest praca nad tym projektem na pełen etat.</string>
|
<string name="donation_closing">Moim marzeniem jest praca nad tym projektem na pełen etat.</string>
|
||||||
<string name="donation_signoff">Z wdzięcznością,</string>
|
<string name="donation_signoff">Z wdzięcznością,</string>
|
||||||
<string name="google_donation_message">Niestety, ze względu na politykę Google, linki do darowizn nie są dozwolone w wersji tej aplikacji dostępnej w Google Play. Aby dowiedzieć się, gdzie można przekazać darowiznę, odwiedź strony projektu.</string>
|
<string name="google_donation_message">Niestety, ze względu na politykę Google, linki do darowizn nie są dozwolone w wersji tej aplikacji dostępnej w Google Play. Aby dowiedzieć się, gdzie można przekazać darowiznę, odwiedź strony projektu.</string>
|
||||||
|
<string name="kernel_wireguard_unsupported">Kernel nie zawiera wsparcia dla WireGuard (brak modułu albo nie wbudowany w kernel)!</string>
|
||||||
<string name="delete_active_message">Nie można usunąć aktywnego tunelu.</string>
|
<string name="delete_active_message">Nie można usunąć aktywnego tunelu.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -377,6 +377,7 @@
|
|||||||
<string name="delete_active_message">Cannot delete active tunnel.</string>
|
<string name="delete_active_message">Cannot delete active tunnel.</string>
|
||||||
<string name="back">Back</string>
|
<string name="back">Back</string>
|
||||||
<string name="configuration">Configuration</string>
|
<string name="configuration">Configuration</string>
|
||||||
|
<string name="kernel_wireguard_unsupported">Kernel does not include WireGuard support (module missing or not built-in into kernel)!</string>
|
||||||
<string name="about">About</string>
|
<string name="about">About</string>
|
||||||
<string name="resources">Resources</string>
|
<string name="resources">Resources</string>
|
||||||
<string name="website">App website</string>
|
<string name="website">App website</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user