4
4
package com.tailscale.ipn.ui.localapi
5
5
6
6
import android.content.Context
7
+ import com.tailscale.ipn.App
7
8
import com.tailscale.ipn.ui.model.BugReportID
8
9
import com.tailscale.ipn.ui.model.Errors
9
10
import com.tailscale.ipn.ui.model.Ipn
@@ -13,7 +14,6 @@ import com.tailscale.ipn.ui.model.StableNodeID
13
14
import com.tailscale.ipn.ui.model.Tailcfg
14
15
import com.tailscale.ipn.ui.util.InputStreamAdapter
15
16
import com.tailscale.ipn.util.TSLog
16
- import com.tailscale.ipn.App
17
17
import kotlinx.coroutines.CoroutineScope
18
18
import kotlinx.coroutines.Dispatchers
19
19
import kotlinx.coroutines.launch
@@ -69,9 +69,7 @@ class Client(private val scope: CoroutineScope) {
69
69
private val TAG = Client ::class .simpleName
70
70
71
71
// Access libtailscale.Application lazily
72
- private val app: libtailscale.Application by lazy {
73
- App .get().getLibtailscaleApp()
74
- }
72
+ private val app: libtailscale.Application by lazy { App .get().getLibtailscaleApp() }
75
73
76
74
fun start (options : Ipn .Options , responseHandler : (Result <Unit >) -> Unit ) {
77
75
val body = Json .encodeToString(options).toByteArray()
@@ -102,6 +100,14 @@ class Client(private val scope: CoroutineScope) {
102
100
}
103
101
104
102
fun editPrefs (prefs : Ipn .MaskedPrefs , responseHandler : (Result <Ipn .Prefs >) -> Unit ) {
103
+ // Log the stack trace for debugging purposes for
104
+ // https://github.com/tailscale/tailscale/issues/14125
105
+ val stackTrace =
106
+ Thread .currentThread().stackTrace.joinToString(" \n " ) { element ->
107
+ " at ${element.className} .${element.methodName} (${element.fileName} :${element.lineNumber} )"
108
+ }
109
+ TSLog .v(" editPrefs" , " Called editPrefs with prefs: $prefs \n Stack trace:\n $stackTrace " )
110
+
105
111
val body = Json .encodeToString(prefs).toByteArray()
106
112
return patch(Endpoint .PREFS , body, responseHandler = responseHandler)
107
113
}
0 commit comments