From d337f0e2e4afed397fa9659efca624fb3cb5b6ac Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sun, 24 Jan 2016 17:21:03 +0800 Subject: [PATCH] Bump version --- src/main/AndroidManifest.xml | 4 +-- .../java/com/github/shadowsocks/System.java | 2 +- src/main/jni/badvpn | 2 +- src/main/jni/shadowsocks-libev | 2 +- src/main/jni/system.cpp | 8 +++-- src/main/res/values/strings.xml | 2 +- .../com/github/shadowsocks/Shadowsocks.scala | 20 ++++++------ .../shadowsocks/ShadowsocksApplication.scala | 1 + .../shadowsocks/ShadowsocksNatService.scala | 32 +++++++++---------- .../shadowsocks/ShadowsocksVpnService.scala | 31 ++++++++++-------- .../shadowsocks/ShadowsocksVpnThread.scala | 2 +- .../github/shadowsocks/utils/Constants.scala | 4 --- 12 files changed, 56 insertions(+), 54 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 7ea81bca..91db2d5f 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ + android:versionCode="129" + android:versionName="2.9.7"> diff --git a/src/main/java/com/github/shadowsocks/System.java b/src/main/java/com/github/shadowsocks/System.java index cc89e624..fd074b26 100755 --- a/src/main/java/com/github/shadowsocks/System.java +++ b/src/main/java/com/github/shadowsocks/System.java @@ -45,6 +45,6 @@ public class System { public static native int exec(String cmd); public static native String getABI(); - public static native int sendfd(int fd); + public static native int sendfd(int fd, String path); public static native void jniclose(int fd); } diff --git a/src/main/jni/badvpn b/src/main/jni/badvpn index f9a6a407..057ed9f3 160000 --- a/src/main/jni/badvpn +++ b/src/main/jni/badvpn @@ -1 +1 @@ -Subproject commit f9a6a40758bb769e986e5dc0cbe452c4b0d53d1e +Subproject commit 057ed9f36490a9dccd5e7337fabcb142dd3afc0d diff --git a/src/main/jni/shadowsocks-libev b/src/main/jni/shadowsocks-libev index 68eaf3b1..0d64f11f 160000 --- a/src/main/jni/shadowsocks-libev +++ b/src/main/jni/shadowsocks-libev @@ -1 +1 @@ -Subproject commit 68eaf3b12d385381130c046547163b81e1807ba4 +Subproject commit 0d64f11f47366a23397c96447ae1e22ead1781bb diff --git a/src/main/jni/system.cpp b/src/main/jni/system.cpp index 1252fb0a..dcad8aa3 100644 --- a/src/main/jni/system.cpp +++ b/src/main/jni/system.cpp @@ -64,9 +64,10 @@ void Java_com_github_shadowsocks_system_jniclose(JNIEnv *env, jobject thiz, jint close(fd); } -jint Java_com_github_shadowsocks_system_sendfd(JNIEnv *env, jobject thiz, jint tun_fd) { +jint Java_com_github_shadowsocks_system_sendfd(JNIEnv *env, jobject thiz, jint tun_fd, jstring path) { int fd; struct sockaddr_un addr; + const char *sock_str = env->GetStringUTFChars(path, 0); if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { LOGE("socket() failed: %s (socket fd = %d)\n", strerror(errno), fd); @@ -75,7 +76,7 @@ jint Java_com_github_shadowsocks_system_sendfd(JNIEnv *env, jobject thiz, jint t memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; - strncpy(addr.sun_path, "/data/data/com.github.shadowsocks/sock_path", sizeof(addr.sun_path)-1); + strncpy(addr.sun_path, sock_str, sizeof(addr.sun_path)-1); if (connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1) { LOGE("connect() failed: %s (fd = %d)\n", strerror(errno), fd); @@ -90,6 +91,7 @@ jint Java_com_github_shadowsocks_system_sendfd(JNIEnv *env, jobject thiz, jint t } close(fd); + env->ReleaseStringUTFChars(path, sock_str); return 0; } @@ -98,7 +100,7 @@ static const char *classPathName = "com/github/shadowsocks/System"; static JNINativeMethod method_table[] = { { "jniclose", "(I)V", (void*) Java_com_github_shadowsocks_system_jniclose }, - { "sendfd", "(I)I", + { "sendfd", "(ILjava/lang/String;)I", (void*) Java_com_github_shadowsocks_system_sendfd }, { "exec", "(Ljava/lang/String;)I", (void*) Java_com_github_shadowsocks_system_exec }, diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 89320c23..b9d67918 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -21,7 +21,7 @@ Check Connectivity Testing… - Success: %dms latency to Internet + Success: %dms latency Fail to detect internet connection: %s Internet Unavailable Error code: #%d diff --git a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala index 61e7f8a6..f1647abc 100644 --- a/src/main/scala/com/github/shadowsocks/Shadowsocks.scala +++ b/src/main/scala/com/github/shadowsocks/Shadowsocks.scala @@ -262,7 +262,7 @@ class Shadowsocks } else { in = assetManager.open(file) } - out = new FileOutputStream(Path.BASE + file) + out = new FileOutputStream(getApplicationInfo().dataDir + "/" + file) copyFile(in, out) in.close() in = null @@ -292,8 +292,8 @@ class Shadowsocks val cmd = new ArrayBuffer[String]() for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks")) { - cmd.append("chmod 666 %s%s-nat.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) - cmd.append("chmod 666 %s%s-vpn.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) + cmd.append("chmod 666 %s/%s-nat.pid".formatLocal(Locale.ENGLISH, getApplicationInfo().dataDir, task)) + cmd.append("chmod 666 %s/%s-vpn.pid".formatLocal(Locale.ENGLISH, getApplicationInfo().dataDir, task)) } if (ShadowsocksApplication.isVpnEnabled) { @@ -306,8 +306,8 @@ class Shadowsocks for (task <- Array("ss-local", "ss-tunnel", "pdnsd", "redsocks", "tun2socks")) { try { - val pid_nat = scala.io.Source.fromFile(Path.BASE + task + "-nat.pid").mkString.trim.toInt - val pid_vpn = scala.io.Source.fromFile(Path.BASE + task + "-vpn.pid").mkString.trim.toInt + val pid_nat = scala.io.Source.fromFile(getApplicationInfo().dataDir + "/" + task + "-nat.pid").mkString.trim.toInt + val pid_vpn = scala.io.Source.fromFile(getApplicationInfo().dataDir + "/" + task + "-vpn.pid").mkString.trim.toInt cmd.append("kill -9 %d".formatLocal(Locale.ENGLISH, pid_nat)) cmd.append("kill -9 %d".formatLocal(Locale.ENGLISH, pid_vpn)) Process.killProcess(pid_nat) @@ -315,10 +315,10 @@ class Shadowsocks } catch { case e: Throwable => // Ignore } - cmd.append("rm -f %s%s-nat.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) - cmd.append("rm -f %s%s-nat.conf".formatLocal(Locale.ENGLISH, Path.BASE, task)) - cmd.append("rm -f %s%s-vpn.pid".formatLocal(Locale.ENGLISH, Path.BASE, task)) - cmd.append("rm -f %s%s-vpn.conf".formatLocal(Locale.ENGLISH, Path.BASE, task)) + cmd.append("rm -f %s/%s-nat.pid".formatLocal(Locale.ENGLISH, getApplicationInfo().dataDir, task)) + cmd.append("rm -f %s/%s-nat.conf".formatLocal(Locale.ENGLISH, getApplicationInfo().dataDir, task)) + cmd.append("rm -f %s/%s-vpn.pid".formatLocal(Locale.ENGLISH, getApplicationInfo().dataDir, task)) + cmd.append("rm -f %s/%s-vpn.conf".formatLocal(Locale.ENGLISH, getApplicationInfo().dataDir, task)) } if (ShadowsocksApplication.isVpnEnabled) Console.runCommand(cmd.toArray) else { Console.runRootCommand(cmd.toArray) @@ -502,7 +502,7 @@ class Shadowsocks val ab = new ArrayBuffer[String] for (executable <- Shadowsocks.EXECUTABLES) { - ab.append("chmod 755 " + Path.BASE + executable) + ab.append("chmod 755 " + getApplicationInfo().dataDir + "/" + executable) } Console.runCommand(ab.toArray) } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala index 2c0a7225..5afb5937 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala @@ -60,6 +60,7 @@ object ShadowsocksApplication { lazy val tracker = GoogleAnalytics.getInstance(instance).newTracker(R.xml.tracker) lazy val settings = PreferenceManager.getDefaultSharedPreferences(instance) lazy val profileManager = new ProfileManager(settings, dbHelper) + lazy val dataDir = instance.getApplicationInfo().dataDir def isVpnEnabled = !settings.getBoolean(Key.isNAT, false) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index fa95bbe3..1cd14db3 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -168,7 +168,7 @@ class ShadowsocksNatService extends BaseService { case Route.BYPASS_LAN => getResources.getStringArray(R.array.private_route) case Route.BYPASS_CHN => getResources.getStringArray(R.array.chn_route_full) } - ConfigUtils.printToFile(new File(Path.BASE + "acl.list"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/acl.list"))(p => { acl.foreach(item => p.println(item)) }) } @@ -176,21 +176,21 @@ class ShadowsocksNatService extends BaseService { val conf = ConfigUtils .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, config.localPort, config.sitekey, config.encMethod, 600) - ConfigUtils.printToFile(new File(Path.BASE + "ss-local-nat.conf"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/ss-local-nat.conf"))(p => { p.println(conf) }) val cmd = new ArrayBuffer[String] - cmd += (Path.BASE + "ss-local" + cmd += (getApplicationInfo().dataDir + "/ss-local" , "-b" , "127.0.0.1" , "-t" , "600" - , "-c" , Path.BASE + "ss-local-nat.conf") + , "-c" , getApplicationInfo().dataDir + "/ss-local-nat.conf") if (config.isAuth) cmd += "-A" if (config.route != Route.ALL) { cmd += "--acl" - cmd += (Path.BASE + "acl.list") + cmd += (getApplicationInfo().dataDir + "/acl.list") } if (BuildConfig.DEBUG) Log.d(TAG, cmd.mkString(" ")) @@ -205,16 +205,16 @@ class ShadowsocksNatService extends BaseService { val conf = ConfigUtils .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, 8153, config.sitekey, config.encMethod, 10) - ConfigUtils.printToFile(new File(Path.BASE + "ss-tunnel-nat.conf"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/ss-tunnel-nat.conf"))(p => { p.println(conf) }) val cmd = new ArrayBuffer[String] - cmd += (Path.BASE + "ss-tunnel" + cmd += (getApplicationInfo().dataDir + "/ss-tunnel" , "-u" , "-t" , "10" , "-b" , "127.0.0.1" , "-L" , "8.8.8.8:53" - , "-c" , Path.BASE + "ss-tunnel-nat.conf") + , "-c" , getApplicationInfo().dataDir + "/ss-tunnel-nat.conf") cmd += ("-l" , "8153") @@ -231,17 +231,17 @@ class ShadowsocksNatService extends BaseService { val conf = ConfigUtils .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, 8163, config.sitekey, config.encMethod, 10) - ConfigUtils.printToFile(new File(Path.BASE + "ss-tunnel-nat.conf"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/ss-tunnel-nat.conf"))(p => { p.println(conf) }) val cmdBuf = new ArrayBuffer[String] - cmdBuf += (Path.BASE + "ss-tunnel" + cmdBuf += (getApplicationInfo().dataDir + "/ss-tunnel" , "-u" , "-t" , "10" , "-b" , "127.0.0.1" , "-l" , "8163" , "-L" , "8.8.8.8:53" - , "-c" , Path.BASE + "ss-tunnel-nat.conf") + , "-c" , getApplicationInfo().dataDir + "/ss-tunnel-nat.conf") if (config.isAuth) cmdBuf += "-A" @@ -266,10 +266,10 @@ class ShadowsocksNatService extends BaseService { 8163, "") } - ConfigUtils.printToFile(new File(Path.BASE + "pdnsd-nat.conf"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/pdnsd-nat.conf"))(p => { p.println(conf) }) - val cmd = Path.BASE + "pdnsd -c " + Path.BASE + "pdnsd-nat.conf" + val cmd = getApplicationInfo().dataDir + "/pdnsd -c " + getApplicationInfo().dataDir + "/pdnsd-nat.conf" if (BuildConfig.DEBUG) Log.d(TAG, cmd) @@ -293,9 +293,9 @@ class ShadowsocksNatService extends BaseService { def startRedsocksDaemon() { val conf = ConfigUtils.REDSOCKS.formatLocal(Locale.ENGLISH, config.localPort) - val cmd = Path.BASE + "redsocks -c %sredsocks-nat.conf" - .formatLocal(Locale.ENGLISH, Path.BASE, Path.BASE) - ConfigUtils.printToFile(new File(Path.BASE + "redsocks-nat.conf"))(p => { + val cmd = "%s/redsocks -c %s/redsocks-nat.conf" + .formatLocal(Locale.ENGLISH, getApplicationInfo().dataDir, getApplicationInfo().dataDir) + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/redsocks-nat.conf"))(p => { p.println(conf) }) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala index 9244559f..098b18bb 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala @@ -261,7 +261,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { var tries = 1 while (tries < 5) { Thread.sleep(1000 * tries) - if (System.sendfd(fd) != -1) { + if (System.sendfd(fd, getApplicationInfo().dataDir + "/sock_path") != -1) { return true } tries += 1 @@ -277,7 +277,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { case Route.BYPASS_LAN => getResources.getStringArray(R.array.private_route) case Route.BYPASS_CHN => getResources.getStringArray(R.array.chn_route_full) } - ConfigUtils.printToFile(new File(Path.BASE + "acl.list"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/acl.list"))(p => { acl.foreach(item => p.println(item)) }) } @@ -285,21 +285,22 @@ class ShadowsocksVpnService extends VpnService with BaseService { val conf = ConfigUtils .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, config.localPort, config.sitekey, config.encMethod, 600) - ConfigUtils.printToFile(new File(Path.BASE + "ss-local-vpn.conf"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/ss-local-vpn.conf"))(p => { p.println(conf) }) val cmd = new ArrayBuffer[String] - cmd += (Path.BASE + "ss-local", "-V", "-u" + cmd += (getApplicationInfo().dataDir + "/ss-local", "-V", "-u" , "-b", "127.0.0.1" , "-t", "600" - , "-c", Path.BASE + "ss-local-vpn.conf") + , "-P", ShadowsocksApplication.dataDir + , "-c", getApplicationInfo().dataDir + "/ss-local-vpn.conf") if (config.isAuth) cmd += "-A" if (config.route != Route.ALL) { cmd += "--acl" - cmd += (Path.BASE + "acl.list") + cmd += (getApplicationInfo().dataDir + "/acl.list") } if (BuildConfig.DEBUG) Log.d(TAG, cmd.mkString(" ")) @@ -314,18 +315,19 @@ class ShadowsocksVpnService extends VpnService with BaseService { val conf = ConfigUtils .SHADOWSOCKS.formatLocal(Locale.ENGLISH, config.proxy, config.remotePort, 8163, config.sitekey, config.encMethod, 10) - ConfigUtils.printToFile(new File(Path.BASE + "ss-tunnel-vpn.conf"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/ss-tunnel-vpn.conf"))(p => { p.println(conf) }) val cmd = new ArrayBuffer[String] - cmd += (Path.BASE + "ss-tunnel" + cmd += (getApplicationInfo().dataDir + "/ss-tunnel" , "-V" , "-u" , "-t", "10" , "-b", "127.0.0.1" , "-l", "8163" , "-L", "8.8.8.8:53" - , "-c", Path.BASE + "ss-tunnel-vpn.conf") + , "-P", ShadowsocksApplication.dataDir + , "-c", getApplicationInfo().dataDir + "/ss-tunnel-vpn.conf") if (config.isAuth) cmd += "-A" @@ -350,10 +352,10 @@ class ShadowsocksVpnService extends VpnService with BaseService { 8163, ipv6) } } - ConfigUtils.printToFile(new File(Path.BASE + "pdnsd-vpn.conf"))(p => { + ConfigUtils.printToFile(new File(getApplicationInfo().dataDir + "/pdnsd-vpn.conf"))(p => { p.println(conf) }) - val cmd = Path.BASE + "pdnsd -c " + Path.BASE + "pdnsd-vpn.conf" + val cmd = getApplicationInfo().dataDir + "/pdnsd -c " + getApplicationInfo().dataDir + "/pdnsd-vpn.conf" if (BuildConfig.DEBUG) Log.d(TAG, cmd) @@ -428,16 +430,17 @@ class ShadowsocksVpnService extends VpnService with BaseService { val fd = conn.getFd - var cmd = (Path.BASE + - "tun2socks --netif-ipaddr %s " + var cmd = (getApplicationInfo().dataDir + + "/tun2socks --netif-ipaddr %s " + "--netif-netmask 255.255.255.0 " + "--socks-server-addr 127.0.0.1:%d " + "--tunfd %d " + "--tunmtu %d " + + "--sock-path %s " + "--loglevel 3") .formatLocal(Locale.ENGLISH, PRIVATE_VLAN.formatLocal(Locale.ENGLISH, "2"), - config.localPort, fd, VPN_MTU) + config.localPort, fd, VPN_MTU, getApplicationInfo().dataDir + "/sock_path") if (config.isIpv6) cmd += " --netif-ip6addr " + PRIVATE_VLAN6.formatLocal(Locale.ENGLISH, "2") diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala index f3fbb3e2..54328e34 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnThread.scala @@ -53,7 +53,7 @@ class ShadowsocksVpnThread(vpnService: ShadowsocksVpnService) extends Thread { import ShadowsocksVpnThread._ val TAG = "ShadowsocksVpnService" - val PATH = "/data/data/com.github.shadowsocks/protect_path" + lazy val PATH = ShadowsocksApplication.dataDir + "/protect_path" @volatile var isRunning: Boolean = true @volatile var serverSocket: LocalServerSocket = null diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/src/main/scala/com/github/shadowsocks/utils/Constants.scala index 0521eb99..3a27ca47 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Constants.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Constants.scala @@ -55,10 +55,6 @@ object Msg { val VPN_ERROR = 6 } -object Path { - val BASE = "/data/data/com.github.shadowsocks/" -} - object Key { val profileId = "profileId" val profileName = "profileName"