diff --git a/app/src/main/java/syncthing/android/service/SyncthingThread.java b/app/src/main/java/syncthing/android/service/SyncthingThread.java index ec9ff74..a3881d8 100644 --- a/app/src/main/java/syncthing/android/service/SyncthingThread.java +++ b/app/src/main/java/syncthing/android/service/SyncthingThread.java @@ -76,6 +76,7 @@ void realRun(boolean generate) { try { ProcessBuilder b = new ProcessBuilder(); b.environment().put("HOME", Environment.getExternalStorageDirectory().getAbsolutePath()); + b.environment().put("GODEBUG", "netdns=2"); if (generate) { b.command(SyncthingUtils.getSyncthingBinaryPath(mService), "-home", SyncthingUtils.getConfigDirectory(mService).getAbsolutePath(), diff --git a/make-go.bash b/make-go.bash index 7eec995..70d8e70 100755 --- a/make-go.bash +++ b/make-go.bash @@ -73,6 +73,10 @@ mkdir -p "$GOROOT_FINAL" pushd golang/go/src +if [ $CGO_ENABLED -eq 0 ]; then + git am -3 ../../../patches/golang/netgohacks/* +fi + set +e ./clean.bash rm -r ../bin diff --git a/patches/golang/netgohacks/0001-dnsconfig-hack-for-android.patch b/patches/golang/netgohacks/0001-dnsconfig-hack-for-android.patch new file mode 100644 index 0000000..5d708a5 --- /dev/null +++ b/patches/golang/netgohacks/0001-dnsconfig-hack-for-android.patch @@ -0,0 +1,121 @@ +From 0e08490d04d73fd0e70b7a744b335a95ac17ea95 Mon Sep 17 00:00:00 2001 +From: Andrew Sutherland +Date: Fri, 16 Oct 2015 23:08:08 -0500 +Subject: [PATCH] dnsconfig hack for android + +--- + src/net/dnsconfig_unix.go | 86 ++++++----------------------------------------- + 1 file changed, 10 insertions(+), 76 deletions(-) + +diff --git a/src/net/dnsconfig_unix.go b/src/net/dnsconfig_unix.go +index 6073fdb..b0c612a 100644 +--- a/src/net/dnsconfig_unix.go ++++ b/src/net/dnsconfig_unix.go +@@ -8,6 +8,11 @@ + + package net + ++import ( ++ "os/exec" ++ "strings" ++) ++ + var defaultNS = []string{"127.0.0.1", "::1"} + + type dnsConfig struct { +@@ -31,87 +36,16 @@ func dnsReadConfig(filename string) *dnsConfig { + timeout: 5, + attempts: 2, + } +- file, err := open(filename) ++ //modified from https://gist.github.com/ernesto-jimenez/8042366 ++ out, err := exec.Command("/system/bin/getprop", "net.dns1").Output() + if err != nil { ++ println("Error looking up dns", err) + conf.servers = defaultNS + conf.err = err + return conf + } +- defer file.close() +- for line, ok := file.readLine(); ok; line, ok = file.readLine() { +- if len(line) > 0 && (line[0] == ';' || line[0] == '#') { +- // comment. +- continue +- } +- f := getFields(line) +- if len(f) < 1 { +- continue +- } +- switch f[0] { +- case "nameserver": // add one name server +- if len(f) > 1 && len(conf.servers) < 3 { // small, but the standard limit +- // One more check: make sure server name is +- // just an IP address. Otherwise we need DNS +- // to look it up. +- if parseIPv4(f[1]) != nil { +- conf.servers = append(conf.servers, f[1]) +- } else if ip, _ := parseIPv6(f[1], true); ip != nil { +- conf.servers = append(conf.servers, f[1]) +- } +- } +- +- case "domain": // set search path to just this domain +- if len(f) > 1 { +- conf.search = []string{f[1]} +- } +- +- case "search": // set search path to given servers +- conf.search = make([]string, len(f)-1) +- for i := 0; i < len(conf.search); i++ { +- conf.search[i] = f[i+1] +- } +- +- case "options": // magic options +- for _, s := range f[1:] { +- switch { +- case hasPrefix(s, "ndots:"): +- n, _, _ := dtoi(s, 6) +- if n < 1 { +- n = 1 +- } +- conf.ndots = n +- case hasPrefix(s, "timeout:"): +- n, _, _ := dtoi(s, 8) +- if n < 1 { +- n = 1 +- } +- conf.timeout = n +- case hasPrefix(s, "attempts:"): +- n, _, _ := dtoi(s, 9) +- if n < 1 { +- n = 1 +- } +- conf.attempts = n +- case s == "rotate": +- conf.rotate = true +- default: +- conf.unknownOpt = true +- } +- } +- +- case "lookup": +- // OpenBSD option: +- // http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man5/resolv.conf.5 +- // "the legal space-separated values are: bind, file, yp" +- conf.lookup = f[1:] +- +- default: +- conf.unknownOpt = true +- } +- } +- if len(conf.servers) == 0 { +- conf.servers = defaultNS +- } ++ println("dnsReadConfig(server=" + string(out) + ")") ++ conf.servers = []string{strings.Trim(string(out), "\n ")} + return conf + } + +-- +2.5.2 +