mirror of
https://github.com/wgtunnel/android.git
synced 2026-06-02 08:33:40 +02:00
fix: tunnel performance bug
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.zaneschepke.wireguardautotunnel.core.tunnel
|
||||
|
||||
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
|
||||
import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
|
||||
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
|
||||
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
|
||||
import com.zaneschepke.wireguardautotunnel.domain.events.BackendCoreException
|
||||
@@ -12,6 +13,7 @@ import com.zaneschepke.wireguardautotunnel.domain.state.TunnelState
|
||||
import com.zaneschepke.wireguardautotunnel.domain.state.TunnelStatistics
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import kotlin.coroutines.cancellation.CancellationException
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.*
|
||||
@@ -21,8 +23,10 @@ import kotlinx.coroutines.sync.withLock
|
||||
import org.amnezia.awg.crypto.Key
|
||||
import timber.log.Timber
|
||||
|
||||
abstract class BaseTunnel(@ApplicationScope protected val applicationScope: CoroutineScope) :
|
||||
TunnelProvider {
|
||||
abstract class BaseTunnel(
|
||||
@ApplicationScope protected val applicationScope: CoroutineScope,
|
||||
@IoDispatcher protected val ioDispatcher: CoroutineDispatcher,
|
||||
) : TunnelProvider {
|
||||
|
||||
protected val errors = MutableSharedFlow<Pair<String, BackendCoreException>>()
|
||||
override val errorEvents = errors.asSharedFlow()
|
||||
@@ -105,7 +109,7 @@ abstract class BaseTunnel(@ApplicationScope protected val applicationScope: Coro
|
||||
updateTunnelStatus(tunnelConf.id, TunnelStatus.Starting)
|
||||
|
||||
val job =
|
||||
applicationScope.launch {
|
||||
applicationScope.launch(ioDispatcher) {
|
||||
try {
|
||||
tunnelStateFlow(tunnelConf).collect { status ->
|
||||
updateTunnelStatus(tunnelConf.id, status)
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.wireguard.android.backend.Backend
|
||||
import com.wireguard.android.backend.BackendException
|
||||
import com.wireguard.android.backend.Tunnel as WgTunnel
|
||||
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
|
||||
import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
|
||||
import com.zaneschepke.wireguardautotunnel.di.Kernel
|
||||
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
|
||||
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
|
||||
@@ -15,6 +16,7 @@ import com.zaneschepke.wireguardautotunnel.util.extensions.asTunnelState
|
||||
import com.zaneschepke.wireguardautotunnel.util.extensions.toBackendCoreException
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
@@ -28,8 +30,9 @@ class KernelTunnel
|
||||
@Inject
|
||||
constructor(
|
||||
@ApplicationScope applicationScope: CoroutineScope,
|
||||
@IoDispatcher ioDispatcher: CoroutineDispatcher,
|
||||
@Kernel private val backend: Backend,
|
||||
) : BaseTunnel(applicationScope) {
|
||||
) : BaseTunnel(applicationScope, ioDispatcher) {
|
||||
|
||||
private val runtimeTunnels = ConcurrentHashMap<Int, WgTunnel>()
|
||||
|
||||
|
||||
+4
-1
@@ -2,6 +2,7 @@ package com.zaneschepke.wireguardautotunnel.core.tunnel
|
||||
|
||||
import com.zaneschepke.wireguardautotunnel.data.model.DnsProtocol
|
||||
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
|
||||
import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
|
||||
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
|
||||
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
|
||||
import com.zaneschepke.wireguardautotunnel.domain.events.BackendCoreException
|
||||
@@ -19,6 +20,7 @@ import java.io.IOException
|
||||
import java.util.*
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.channels.awaitClose
|
||||
@@ -41,10 +43,11 @@ class UserspaceTunnel
|
||||
@Inject
|
||||
constructor(
|
||||
@ApplicationScope applicationScope: CoroutineScope,
|
||||
@IoDispatcher ioDispatcher: CoroutineDispatcher,
|
||||
private val proxySettingsRepository: ProxySettingsRepository,
|
||||
private val settingsRepository: GeneralSettingRepository,
|
||||
private val backend: Backend,
|
||||
) : BaseTunnel(applicationScope) {
|
||||
) : BaseTunnel(applicationScope, ioDispatcher) {
|
||||
|
||||
private val runtimeTunnels = ConcurrentHashMap<Int, AwgTunnel>()
|
||||
|
||||
|
||||
@@ -85,9 +85,10 @@ class TunnelModule {
|
||||
@Kernel
|
||||
fun provideKernelProvider(
|
||||
@ApplicationScope applicationScope: CoroutineScope,
|
||||
@IoDispatcher ioDispatcher: CoroutineDispatcher,
|
||||
backend: com.wireguard.android.backend.Backend,
|
||||
): TunnelProvider {
|
||||
return KernelTunnel(applicationScope, backend)
|
||||
return KernelTunnel(applicationScope, ioDispatcher, backend)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@@ -98,9 +99,11 @@ class TunnelModule {
|
||||
proxySettingsRepository: ProxySettingsRepository,
|
||||
settingsRepository: GeneralSettingRepository,
|
||||
@Userspace backend: Backend,
|
||||
@IoDispatcher ioDispatcher: CoroutineDispatcher,
|
||||
): TunnelProvider {
|
||||
return UserspaceTunnel(
|
||||
applicationScope,
|
||||
ioDispatcher,
|
||||
proxySettingsRepository,
|
||||
settingsRepository,
|
||||
backend,
|
||||
@@ -115,9 +118,11 @@ class TunnelModule {
|
||||
settingsRepository: GeneralSettingRepository,
|
||||
proxySettingsRepository: ProxySettingsRepository,
|
||||
@ProxyUserspace backend: Backend,
|
||||
@IoDispatcher ioDispatcher: CoroutineDispatcher,
|
||||
): TunnelProvider {
|
||||
return UserspaceTunnel(
|
||||
applicationScope,
|
||||
ioDispatcher,
|
||||
proxySettingsRepository,
|
||||
settingsRepository,
|
||||
backend,
|
||||
|
||||
Reference in New Issue
Block a user