control/controlclient: use "getprop net.hostname" for Android hostname

Updates #409
pull/418/head
Brad Fitzpatrick 5 years ago
parent 2b74236567
commit afb9c6a6ab

@ -18,7 +18,9 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"os/exec"
"reflect" "reflect"
"runtime"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
@ -159,7 +161,13 @@ func NewDirect(opts Options) (*Direct, error) {
} }
func NewHostinfo() *tailcfg.Hostinfo { func NewHostinfo() *tailcfg.Hostinfo {
hostname, _ := os.Hostname() var hostname string
if runtime.GOOS == "android" {
hostname = androidHostname()
}
if hostname == "" {
hostname, _ = os.Hostname()
}
return &tailcfg.Hostinfo{ return &tailcfg.Hostinfo{
IPNVersion: version.LONG, IPNVersion: version.LONG,
Hostname: hostname, Hostname: hostname,
@ -167,6 +175,20 @@ func NewHostinfo() *tailcfg.Hostinfo {
} }
} }
var androidHostnameOnce struct {
_ structs.Incomparable
sync.Once
v string
}
func androidHostname() string {
androidHostnameOnce.Do(func() {
out, _ := exec.Command("getprop", "net.hostname").Output()
androidHostnameOnce.v = strings.TrimSpace(string(out))
})
return androidHostnameOnce.v
}
// SetHostinfo clones the provided Hostinfo and remembers it for the // SetHostinfo clones the provided Hostinfo and remembers it for the
// next update. It reports whether the Hostinfo has changed. // next update. It reports whether the Hostinfo has changed.
func (c *Direct) SetHostinfo(hi *tailcfg.Hostinfo) bool { func (c *Direct) SetHostinfo(hi *tailcfg.Hostinfo) bool {

Loading…
Cancel
Save