From 655ef1eed661bc9c45f59a5635140e793fb3cdc9 Mon Sep 17 00:00:00 2001 From: Mygod Date: Sat, 27 Aug 2016 23:39:06 +0800 Subject: [PATCH] Refine TFO --- .../com/github/shadowsocks/ShadowsocksApplication.scala | 7 +------ .../com/github/shadowsocks/ShadowsocksNatService.scala | 2 +- .../scala/com/github/shadowsocks/ShadowsocksSettings.scala | 7 ++----- .../com/github/shadowsocks/ShadowsocksVpnService.scala | 2 +- .../scala/com/github/shadowsocks/utils/TcpFastOpen.scala | 6 +++--- 5 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala index 941f22ee..2017b511 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksApplication.scala @@ -112,12 +112,7 @@ 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) - } + TcpFastOpen.enabled(settings.getBoolean(Key.tfo, false)) } def refreshContainerHolder { diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index 2b8fefaf..b2d1b5c8 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.isEnabled) cmd += "--fast-open" + if (TcpFastOpen.sendEnabled) 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 0d7d5d47..e18db6e4 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -155,17 +155,14 @@ class ShadowsocksSettings extends PreferenceFragment with OnSharedPreferenceChan } switch.setChecked(BootReceiver.getEnabled(activity)) - if (getPreferenceManager.getSharedPreferences.getBoolean(Key.tfo, false) && !TcpFastOpen.isEnabled) { - TcpFastOpen.enabled(true) - } val tfo = findPreference(Key.tfo).asInstanceOf[SwitchPreference] - tfo.setChecked(TcpFastOpen.isEnabled) + tfo.setChecked(TcpFastOpen.sendEnabled) 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.isEnabled + value == TcpFastOpen.sendEnabled }) 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 26a6a9f4..65765bd9 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.isEnabled) cmd += "--fast-open" + if (TcpFastOpen.sendEnabled) cmd += "--fast-open" if (BuildConfig.DEBUG) Log.d(TAG, cmd.mkString(" ")) diff --git a/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala b/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala index 926edee1..ea4471da 100644 --- a/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala +++ b/src/main/scala/com/github/shadowsocks/utils/TcpFastOpen.scala @@ -23,12 +23,12 @@ object TcpFastOpen { case _ => false } - def isEnabled = { + def sendEnabled = { val file = new File("/proc/sys/net/ipv4/tcp_fastopen") file.canRead && (Utils.readAllLines(file).toInt & 1) > 0 } - def enabled(value: Boolean): String = { + def enabled(value: Boolean): String = if (sendEnabled != value) { val res = Shell.run("su", Array( "if echo " + (if (value) 3 else 0) + " > /proc/sys/net/ipv4/tcp_fastopen; then", " echo Success.", @@ -36,5 +36,5 @@ object TcpFastOpen { " echo Failed.", "fi"), null, true) if (res != null) res.asScala.mkString("\n") else null - } + } else null }