summaryrefslogtreecommitdiffhomepage
path: root/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt')
-rw-r--r--ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt36
1 files changed, 33 insertions, 3 deletions
diff --git a/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt b/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt
index d21b942b..ef22f846 100644
--- a/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt
+++ b/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt
@@ -13,7 +13,11 @@ import com.wireguard.android.backend.Statistics
import com.wireguard.android.backend.Tunnel
import com.wireguard.android.databinding.Keyed
import com.wireguard.android.util.applicationScope
+import com.wireguard.android.viewmodel.ConfigDetail
import com.wireguard.config.Config
+import com.wireguard.config.InetEndpoint
+import com.wireguard.crypto.Key;
+import java.util.Optional;
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
@@ -59,6 +63,12 @@ class ObservableTunnel internal constructor(
if (state != Tunnel.State.UP) {
onStatisticsChanged(null)
onDhcpChanged(null)
+ onEndpointChange(null, null)
+ } else {
+ configDetail?.peers?.forEach {
+ var endpoint: InetEndpoint? = it.peer.endpoint.orElse(null)
+ it.endpoint = Optional.ofNullable(endpoint?.getResolved()?.get())
+ }
}
this.state = state
notifyPropertyChanged(BR.state)
@@ -72,6 +82,7 @@ class ObservableTunnel internal constructor(
this@ObservableTunnel.state
}
+ private var configDetail: ConfigDetail? = if (config != null) ConfigDetail(config) else null
@get:Bindable
var config = config
@@ -90,7 +101,11 @@ class ObservableTunnel internal constructor(
private set
suspend fun getConfigAsync(): Config = withContext(Dispatchers.Main.immediate) {
- config ?: manager.getTunnelConfig(this@ObservableTunnel)
+ config ?: manager.getTunnelConfig(this@ObservableTunnel).config!!
+ }
+
+ suspend fun getConfigDetailAsync(): ConfigDetail = withContext(Dispatchers.Main.immediate) {
+ configDetail ?: manager.getTunnelConfig(this@ObservableTunnel)
}
suspend fun setConfigAsync(config: Config): Config = withContext(Dispatchers.Main.immediate) {
@@ -102,10 +117,11 @@ class ObservableTunnel internal constructor(
}
}
- fun onConfigChanged(config: Config?): Config? {
+ fun onConfigChanged(config: Config?): ConfigDetail? {
this.config = config
+ this.configDetail = ConfigDetail(config)
notifyPropertyChanged(BR.config)
- return config
+ return configDetail
}
@@ -155,6 +171,20 @@ class ObservableTunnel internal constructor(
return dhcp
}
+ override fun onEndpointChange(publicKey: Key?, newEndpoint: InetEndpoint?) {
+ Log.i(TAG, "ObservableTunnel onEndpointChange " + newEndpoint)
+ configDetail?.peers?.forEach {
+ Log.i(TAG, "ObservableTunnel peer " + it + ", " + it.peer)
+ if (publicKey == null || it.peer.publicKey.equals(publicKey)) {
+ if (newEndpoint == null) {
+ it.endpoint = it.peer.endpoint
+ } else {
+ it.endpoint = newEndpoint.getResolved()
+ }
+ }
+ }
+ }
+
suspend fun deleteAsync() = manager.delete(this)