diff --git a/android/src/main/java/com/tailscale/ipn/App.java b/android/src/main/java/com/tailscale/ipn/App.java index e975976..7fe3338 100644 --- a/android/src/main/java/com/tailscale/ipn/App.java +++ b/android/src/main/java/com/tailscale/ipn/App.java @@ -11,6 +11,7 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.BroadcastReceiver; import android.net.ConnectivityManager; +import android.os.Build; import java.io.IOException; import java.io.File; @@ -77,5 +78,9 @@ public class App extends Application { ); } + String getHostname() { + return Build.MODEL; + } + private static native void onConnectivityChanged(boolean connected); } diff --git a/cmd/tailscale/main.go b/cmd/tailscale/main.go index ea53abd..928ca0a 100644 --- a/cmd/tailscale/main.go +++ b/cmd/tailscale/main.go @@ -141,7 +141,11 @@ func (a *App) runBackend(events <-chan UIEvent) error { alarmChan = timer.C } } + var prefs *ipn.Prefs err = b.Start(func(n ipn.Notify) { + if p := n.Prefs; p != nil { + prefs = p + } if s := n.State; s != nil { oldState := state.State state.State = *s @@ -179,6 +183,8 @@ func (a *App) runBackend(events <-chan UIEvent) error { if err != nil { return err } + prefs.Hostname = a.hostname() + b.backend.SetPrefs(prefs) for { select { case <-alarmChan: @@ -237,6 +243,23 @@ func (a *App) runBackend(events <-chan UIEvent) error { } } +// hostname builds a hostname from android.os.Build fields, in place of a +// useless os.Hostname(). +func (a *App) hostname() string { + var hostname string + err := jni.Do(a.jvm, func(env jni.Env) error { + cls := jni.GetObjectClass(env, a.appCtx) + getHostname := jni.GetMethodID(env, cls, "getHostname", "()Ljava/lang/String;") + n, err := jni.CallObjectMethod(env, a.appCtx, getHostname) + hostname = jni.GoString(env, jni.String(n)) + return err + }) + if err != nil { + panic(err) + } + return hostname +} + // updateNotification updates the foreground persistent status notification. func (a *App) updateNotification(service jni.Object, state ipn.State) error { var msg, title string diff --git a/go.mod b/go.mod index 4c8691e..9fbd0bb 100644 --- a/go.mod +++ b/go.mod @@ -8,5 +8,5 @@ require ( github.com/tailscale/wireguard-go v0.0.0-20200515231107-62868271d710 golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3 golang.org/x/sys v0.0.0-20200501052902-10377860bb8e - tailscale.com v0.98.1-0.20200528074203-30e5c1921435 + tailscale.com v0.98.1-0.20200602194027-364a8508b2a3 ) diff --git a/go.sum b/go.sum index 5648022..b55d283 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/tcnksm/go-httpstat v0.2.0/go.mod h1:s3JVJFtQxtBEBC9dwcdTTXS9xFnM3SXAZ github.com/toqueteos/webbrowser v1.2.0/go.mod h1:XWoZq4cyp9WeUeak7w7LXRUQf1F1ATJMir8RTqb4ayM= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -go4.org/mem v0.0.0-20200411205429-f77f31c81751 h1:sgGPu7KkyLjyOYOwKFHCtnfosdSuM5q2Gud23Y/+nzw= -go4.org/mem v0.0.0-20200411205429-f77f31c81751/go.mod h1:NEYvpHWemiG/E5UWfaN5QAIGZeT1sa0Z2UNk6oeMb/k= +go4.org/mem v0.0.0-20200601023850-d8ee1dfa5518 h1:AA3bSGklCgkrqIGnvL4894oa/2K9ltE0RejXh8CgyvA= +go4.org/mem v0.0.0-20200601023850-d8ee1dfa5518/go.mod h1:NEYvpHWemiG/E5UWfaN5QAIGZeT1sa0Z2UNk6oeMb/k= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -148,9 +148,9 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -inet.af/netaddr v0.0.0-20200430175045-5aaf2097c7fc h1:We3b/z+7i9LV4Ls0yWve5vYIlnAPSPeqxKVgZseRDBs= -inet.af/netaddr v0.0.0-20200430175045-5aaf2097c7fc/go.mod h1:qqYzz/2whtrbWJvt+DNWQyvekNN4ePQZcg2xc2/Yjww= +inet.af/netaddr v0.0.0-20200513162223-787f13e36cbe h1:WjJ6wZhXEWQA3FFSwOjG8tO2q1NDFSqrUwNcTvxwMEQ= +inet.af/netaddr v0.0.0-20200513162223-787f13e36cbe/go.mod h1:qqYzz/2whtrbWJvt+DNWQyvekNN4ePQZcg2xc2/Yjww= rsc.io/goversion v1.2.0 h1:SPn+NLTiAG7w30IRK/DKp1BjvpWabYgxlLp/+kx5J8w= rsc.io/goversion v1.2.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo= -tailscale.com v0.98.1-0.20200528074203-30e5c1921435 h1:Aosg7R6BEAr+pZlsDM+l/C5eqByuqlKI7DIWEUVjNB0= -tailscale.com v0.98.1-0.20200528074203-30e5c1921435/go.mod h1:qhqIOURjwBji/8sD4E3HmTou3eyp/2HfFuPLdjs7ge8= +tailscale.com v0.98.1-0.20200602194027-364a8508b2a3 h1:bNfw9eZYqqIV82TIYVYsE5IuetrLx3nugrAA6+u4bto= +tailscale.com v0.98.1-0.20200602194027-364a8508b2a3/go.mod h1:XQhcTfDAdZHL82OoizTIB/veZgYwGZwcF0XHtAu/Jmk=