diff --git a/project/Build.scala b/project/Build.scala index dad4c31a..758d03b2 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -5,7 +5,8 @@ import org.scalasbt.androidplugin._ import org.scalasbt.androidplugin.AndroidKeys._ object App { - val version = "1.4.0" + val version = "1.4.1" + val versionCode = 23 } object General { @@ -13,7 +14,7 @@ object General { val settings = Defaults.defaultSettings ++ Seq ( name := "shadowsocks", version := App.version, - versionCode := 22, + versionCode := App.versionCode, scalaVersion := "2.9.2", compileOrder := CompileOrder.JavaThenScala, platformName in Android := "android-16", diff --git a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala index 7af960ee..f7df9e26 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowVpnService.scala @@ -244,6 +244,11 @@ class ShadowVpnService extends VpnService { def startVpn() { + val address = appHost.split('.') + val prefix1 = address(0) + val prefix2 = address.slice(0, 2).mkString(".") + val prefix3 = address.slice(0, 3).mkString(".") + val builder = new Builder() builder .setSession(getString(R.string.app_name)) @@ -256,19 +261,28 @@ class ShadowVpnService extends VpnService { builder.addRoute("0.0.0.0", 0) } else if (isGFWList) { val gfwList = getResources.getStringArray(R.array.gfw_list) - val address = appHost.split('.') - val prefix = address(0) + "." + address(1) gfwList.foreach(addr => - if (addr != prefix) { + if (addr != prefix2) { builder.addRoute(addr + ".0.0", 16) + } else { + for (i <- 0 to 255) { + val prefix = Array(addr, i.toString).mkString(".") + if (prefix != prefix3) builder.addRoute(prefix + ".0", 24) + } } ) builder.addRoute("8.8.0.0", 16) } else { - val prefix = appHost.split('.')(0).toInt for (i <- 1 to 254) { - if (i != prefix && i != 127 - && i != 172 && i != 192 && i != 10) builder.addRoute(i + ".0.0.0", 8) + if (i != 127 && i != 172 && i != 192 && i != 10 && i.toString != prefix1) { + builder.addRoute(i + ".0.0.0", 8) + } else if (i.toString == prefix1) { + for (j <- 0 to 255) { + val prefix = Array(i.toString, j.toString).mkString(".") + if (prefix != prefix2) builder.addRoute(prefix + ".0.0", 16) + } + } + builder.addRoute("8.8.0.0", 16) } }