From 04be60577a1a1df8bb27009e258dc90865d1547e Mon Sep 17 00:00:00 2001 From: Mygod Date: Sat, 27 Aug 2016 23:32:13 +0800 Subject: [PATCH] Revert "Revert "Fix #839 #838"" This reverts commit 264b177b38498bcd29692c50f161a877ccbfe1a6. --- src/main/res/xml/pref_all.xml | 1 - .../shadowsocks/ShadowsocksApplication.scala | 9 ++++++- .../shadowsocks/ShadowsocksNatService.scala | 2 +- .../shadowsocks/ShadowsocksSettings.scala | 9 ++++--- .../shadowsocks/ShadowsocksVpnService.scala | 2 +- .../github/shadowsocks/utils/Constants.scala | 2 ++ .../shadowsocks/utils/TcpFastOpen.scala | 24 ++++++------------- 7 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/main/res/xml/pref_all.xml b/src/main/res/xml/pref_all.xml index befdccf0..982f0a16 100644 --- a/src/main/res/xml/pref_all.xml +++ b/src/main/res/xml/pref_all.xml @@ -112,7 +112,6 @@ diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala index aa46429d..941f22ee 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala @@ -46,7 +46,7 @@ import android.app.Application import android.preference.PreferenceManager import android.support.v7.app.AppCompatDelegate import com.github.shadowsocks.database.{DBHelper, ProfileManager} -import com.github.shadowsocks.utils.{Key, Utils} +import com.github.shadowsocks.utils.{Key, Utils, TcpFastOpen} import com.google.android.gms.analytics.{GoogleAnalytics, HitBuilders, StandardExceptionParser} import com.google.android.gms.common.api.ResultCallback import com.google.android.gms.tagmanager.{ContainerHolder, TagManager} @@ -111,6 +111,13 @@ class ShadowsocksApplication extends Application { } } pending.setResultCallback(callback, 2, TimeUnit.SECONDS) + + // TFO + val tfo = settings.getBoolean(Key.tfo, false) + if (tfo && !TcpFastOpen.isEnabled) + { + TcpFastOpen.enabled(true) + } } def refreshContainerHolder { diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index b2d1b5c8..2b8fefaf 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -105,7 +105,7 @@ class ShadowsocksNatService extends BaseService { if (profile.auth) cmd += "-A" - if (TcpFastOpen.sendEnabled) cmd += "--fast-open" + if (TcpFastOpen.isEnabled) cmd += "--fast-open" if (profile.route != Route.ALL) { cmd += "--acl" diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index c113bd61..0d7d5d47 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -155,14 +155,17 @@ class ShadowsocksSettings extends PreferenceFragment with OnSharedPreferenceChan } switch.setChecked(BootReceiver.getEnabled(activity)) - val tfo = findPreference("tcp_fastopen").asInstanceOf[SwitchPreference] - tfo.setChecked(TcpFastOpen.sendEnabled) + if (getPreferenceManager.getSharedPreferences.getBoolean(Key.tfo, false) && !TcpFastOpen.isEnabled) { + TcpFastOpen.enabled(true) + } + val tfo = findPreference(Key.tfo).asInstanceOf[SwitchPreference] + tfo.setChecked(TcpFastOpen.isEnabled) tfo.setOnPreferenceChangeListener((_, v) => { val value = v.asInstanceOf[Boolean] val result = TcpFastOpen.enabled(value) if (result != null && result != "Success.") Snackbar.make(activity.findViewById(android.R.id.content), result, Snackbar.LENGTH_LONG).show() - value == TcpFastOpen.sendEnabled + value == TcpFastOpen.isEnabled }) if (!TcpFastOpen.supported) { tfo.setEnabled(false) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala index 65765bd9..26a6a9f4 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala @@ -266,7 +266,7 @@ class ShadowsocksVpnService extends VpnService with BaseService { cmd += (getApplicationInfo.dataDir + "/acl.list") } - if (TcpFastOpen.sendEnabled) cmd += "--fast-open" + if (TcpFastOpen.isEnabled) cmd += "--fast-open" if (BuildConfig.DEBUG) Log.d(TAG, cmd.mkString(" ")) diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/src/main/scala/com/github/shadowsocks/utils/Constants.scala index f3211440..3d53824d 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Constants.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Constants.scala @@ -171,6 +171,8 @@ object Key { val kcp = "kcp" val kcpPort = "kcpPort" val kcpcli = "kcpcli" + + val tfo = "tcp_fastopen" } object State { diff --git a/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala b/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala index 2a7b898f..926edee1 100644 --- a/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala +++ b/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala @@ -23,28 +23,18 @@ object TcpFastOpen { case _ => false } - def sendEnabled = { + def isEnabled = { val file = new File("/proc/sys/net/ipv4/tcp_fastopen") file.canRead && (Utils.readAllLines(file).toInt & 1) > 0 } - def enabled(value: Boolean) = - Shell.run("su", Array( + def enabled(value: Boolean): String = { + val res = Shell.run("su", Array( "if echo " + (if (value) 3 else 0) + " > /proc/sys/net/ipv4/tcp_fastopen; then", - " success=-1", - " if mount -o rw,remount /dev/block/platform/msm_sdcc.1/by-name/system /system; then", - if (value) " echo '#!/system/bin/sh\n" + - "echo 3 > /proc/sys/net/ipv4/tcp_fastopen' > /etc/init.d/tcp_fastopen && chmod 755 /etc/init.d/tcp_fastopen" - else "rm -f /etc/init.d/tcp_fastopen", - " success=$?", - " mount -o ro,remount /dev/block/platform/msm_sdcc.1/by-name/system /system", - " fi", - " if [ $success -eq 0 ]; then", - " echo Success.", - " else", - " echo Warning: Unable to create boot script.", - " fi", + " echo Success.", "else", " echo Failed.", - "fi"), null, true).asScala.mkString("\n") + "fi"), null, true) + if (res != null) res.asScala.mkString("\n") else null + } }