From 06deb4bbcb8afb4062e3bd04fc9a20fb4f894c54 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 8 Feb 2016 15:44:10 +0800 Subject: [PATCH 1/2] Add option: bypass China only Fix #569. It could have worked without upgrading database by using an option called `bypass-china-only`. But I think we will get better readability this way. --- gfwlist/gen.py | 37 +------------------ src/main/res/values/arrays.xml | 2 + src/main/res/values/chnroute.xml | 15 +------- .../shadowsocks/ShadowsocksNatService.scala | 11 +++--- .../shadowsocks/ShadowsocksVpnService.scala | 10 +++-- .../shadowsocks/database/DBHelper.scala | 6 ++- .../github/shadowsocks/utils/Constants.scala | 1 + 7 files changed, 22 insertions(+), 60 deletions(-) diff --git a/gfwlist/gen.py b/gfwlist/gen.py index 81e40a1d..22ab9048 100644 --- a/gfwlist/gen.py +++ b/gfwlist/gen.py @@ -13,43 +13,8 @@ def main(): for line in sys.stdin: china_list_set.add(IPy.IP(line)) - # 添加内网地址 - internal_list = IPy.IPSet(map(IPy.IP, [ - "0.0.0.0/8", - "10.0.0.0/8", - "100.64.0.0/10", - "112.124.47.0/24", - "114.114.114.0/24", - "127.0.0.0/8", - "169.254.0.0/16", - "172.16.0.0/12", - "192.0.0.0/29", - "192.0.2.0/24", - "192.88.99.0/24", - "192.168.0.0/16", - "198.18.0.0/15", - "198.51.100.0/24", - "203.0.113.0/24", - "224.0.0.0/4", - "240.0.0.0/4", - ])) - china_list_set += internal_list - - all = china_list_set - - # 取反 - # all = IPy.IPSet([IPy.IP("0.0.0.0/0")]) - # 剔除所有孤立的C段 - # for ip in china_list_set: - # all.discard(ip) - - # filter = itertools.ifilter(lambda x: len(x) <= 65536, all) - # for ip in filter: - # all.discard(ip) - # all.add(IPy.IP(ip.strNormal(0)).make_net('255.255.0.0')) - # 输出结果 - for ip in all: + for ip in china_list_set: print '' + str(ip) + '' diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml index f179a98b..1cc842b8 100644 --- a/src/main/res/values/arrays.xml +++ b/src/main/res/values/arrays.xml @@ -45,6 +45,7 @@ All Bypass LAN + Bypass China Bypass LAN & China @@ -52,6 +53,7 @@ all bypass-lan bypass-china + bypass-lan-china diff --git a/src/main/res/values/chnroute.xml b/src/main/res/values/chnroute.xml index cc48abc6..a6d3a63d 100644 --- a/src/main/res/values/chnroute.xml +++ b/src/main/res/values/chnroute.xml @@ -1,7 +1,6 @@ - - 0.0.0.0/8 + 1.0.1.0/24 1.0.2.0/23 1.0.8.0/21 @@ -49,7 +48,6 @@ 1.192.0.0/13 1.202.0.0/15 1.204.0.0/14 - 10.0.0.0/8 14.0.0.0/21 14.0.12.0/22 14.1.0.0/22 @@ -771,7 +769,6 @@ 61.236.0.0/15 61.240.0.0/14 91.234.36.0/24 - 100.64.0.0/10 101.0.0.0/22 101.1.0.0/22 101.2.172.0/22 @@ -2270,7 +2267,6 @@ 125.215.0.0/18 125.216.0.0/13 125.254.128.0/17 - 127.0.0.0/8 137.59.88.0/22 139.9.0.0/16 139.129.0.0/16 @@ -2386,7 +2382,6 @@ 167.189.0.0/16 167.220.244.0/22 168.160.0.0/16 - 169.254.0.0/16 171.8.0.0/13 171.34.0.0/15 171.36.0.0/14 @@ -2395,7 +2390,6 @@ 171.104.0.0/13 171.112.0.0/12 171.208.0.0/12 - 172.16.0.0/12 175.0.0.0/12 175.16.0.0/13 175.24.0.0/14 @@ -2507,14 +2501,8 @@ 183.182.0.0/19 183.184.0.0/13 183.192.0.0/10 - 192.0.0.0/29 - 192.0.2.0/24 - 192.88.99.0/24 192.124.154.0/24 - 192.168.0.0/16 192.188.170.0/24 - 198.18.0.0/15 - 198.51.100.0/24 202.0.100.0/23 202.0.122.0/23 202.0.176.0/22 @@ -2910,7 +2898,6 @@ 203.0.90.0/23 203.0.96.0/23 203.0.104.0/21 - 203.0.113.0/24 203.0.114.0/23 203.0.122.0/24 203.0.128.0/24 diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index f9cfa85a..d60e33c7 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -44,7 +44,6 @@ import java.lang.Process import java.net.{Inet6Address, InetAddress} import java.util.Locale -import android.app.Service import android.content._ import android.content.pm.{PackageInfo, PackageManager} import android.net.{ConnectivityManager, Network} @@ -164,12 +163,14 @@ class ShadowsocksNatService extends BaseService { def startShadowsocksDaemon() { if (config.route != Route.ALL) { - val acl: Array[String] = config.route match { - case Route.BYPASS_LAN => getResources.getStringArray(R.array.private_route) - case Route.BYPASS_CHN => getResources.getStringArray(R.array.chn_route_full) + val acl: Array[Array[String]] = config.route match { + case Route.BYPASS_LAN => Array(getResources.getStringArray(R.array.private_route)) + case Route.BYPASS_CHN => Array(getResources.getStringArray(R.array.chn_route)) + case Route.BYPASS_LAN_CHN => + Array(getResources.getStringArray(R.array.private_route), getResources.getStringArray(R.array.chn_route)) } ConfigUtils.printToFile(new File(getApplicationInfo.dataDir + "/acl.list"))(p => { - acl.foreach(item => p.println(item)) + acl.flatten.foreach(p.println) }) } diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala index 382aab03..6d353c36 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala @@ -273,12 +273,14 @@ class ShadowsocksVpnService extends VpnService with BaseService { def startShadowsocksDaemon() { if (config.route != Route.ALL) { - val acl: Array[String] = config.route match { - case Route.BYPASS_LAN => getResources.getStringArray(R.array.private_route) - case Route.BYPASS_CHN => getResources.getStringArray(R.array.chn_route_full) + val acl: Array[Array[String]] = config.route match { + case Route.BYPASS_LAN => Array(getResources.getStringArray(R.array.private_route)) + case Route.BYPASS_CHN => Array(getResources.getStringArray(R.array.chn_route)) + case Route.BYPASS_LAN_CHN => + Array(getResources.getStringArray(R.array.private_route), getResources.getStringArray(R.array.chn_route)) } ConfigUtils.printToFile(new File(getApplicationInfo.dataDir + "/acl.list"))(p => { - acl.foreach(item => p.println(item)) + acl.flatten.foreach(p.println) }) } diff --git a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala index 7d6d5dbc..d513fe58 100644 --- a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala +++ b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala @@ -64,7 +64,7 @@ object DBHelper { } class DBHelper(val context: Context) - extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 15) { + extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 16) { import DBHelper._ lazy val profileDao: Dao[Profile, Int] = getDao(classOf[Profile]) @@ -121,6 +121,10 @@ class DBHelper(val context: Context) i += 1 } } + + if (oldVersion < 16) { + profileDao.executeRawNoArgs("UPDATE `profile` SET route = 'bypass-lan-china' WHERE route = 'bypass-china'") + } } } } diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/src/main/scala/com/github/shadowsocks/utils/Constants.scala index 3a27ca47..92e4f2ac 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Constants.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Constants.scala @@ -110,4 +110,5 @@ object Route { val ALL = "all" val BYPASS_LAN = "bypass-lan" val BYPASS_CHN = "bypass-china" + val BYPASS_LAN_CHN = "bypass-lan-china" } From 396b49dab6da86a84e2e2b69b9e2a9f4534e3257 Mon Sep 17 00:00:00 2001 From: Mygod Date: Mon, 8 Feb 2016 16:06:51 +0800 Subject: [PATCH 2/2] Fix broken links --- README.md | 2 +- src/main/assets/pages/about.html | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 1c4a8313..ec17f88e 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Help to translate shadowsocks: http://crowdin.net/project/shadowsocks/invite ### LICENSE -Copyright (C) 2015 Max Lv +Copyright (C) 2016 Max Lv This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/src/main/assets/pages/about.html b/src/main/assets/pages/about.html index b85900f5..f8aba155 100644 --- a/src/main/assets/pages/about.html +++ b/src/main/assets/pages/about.html @@ -274,7 +274,7 @@ img {

A Shadowsocks client for Android, written in Scala.

-

Copyright (C) 2014 Max Lv max.c.lv@gmail.com

+

Copyright (C) 2016 Max Lv max.c.lv@gmail.com

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or @@ -289,11 +289,11 @@ along with this program. If not, see http

Open Source Licenses