Add back reapplying rules

This commit is contained in:
Mygod
2018-01-13 22:51:47 +08:00
parent 606d5adc8f
commit 9486941fc6
8 changed files with 29 additions and 11 deletions

View File

@@ -11,6 +11,8 @@ import android.preference.PreferenceManager
class App : Application() { class App : Application() {
companion object { companion object {
const val ACTION_CLEAN_ROUTINGS = "be.mygod.vpnhotspot.CLEAN_ROUTINGS"
lateinit var app: App lateinit var app: App
} }

View File

@@ -140,6 +140,16 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, VpnListener.C
intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO), intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO),
intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP)) intent.getParcelableExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP))
} }
App.ACTION_CLEAN_ROUTINGS -> {
val routing = routing
try {
routing!!.started = false
if (status == Status.ACTIVE && !initRouting(upstream!!, routing.downstream, routing.hostAddress))
Toast.makeText(this@RepeaterService, R.string.noisy_su_failure, Toast.LENGTH_SHORT).show()
} catch (e: Exception) {
Toast.makeText(this@RepeaterService, e.message, Toast.LENGTH_SHORT).show()
}
}
} }
} }
private val onVpnUnavailable = Runnable { startFailure(getString(R.string.repeater_vpn_unavailable)) } private val onVpnUnavailable = Runnable { startFailure(getString(R.string.repeater_vpn_unavailable)) }
@@ -202,6 +212,8 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, VpnListener.C
unregisterReceiver() unregisterReceiver()
registerReceiver(receiver, intentFilter(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION, registerReceiver(receiver, intentFilter(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION,
WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION)) WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION))
LocalBroadcastManager.getInstance(this)
.registerReceiver(receiver, intentFilter(App.ACTION_CLEAN_ROUTINGS))
receiverRegistered = true receiverRegistered = true
upstream = ifname upstream = ifname
p2pManager.requestGroupInfo(channel, { p2pManager.requestGroupInfo(channel, {
@@ -319,6 +331,7 @@ class RepeaterService : Service(), WifiP2pManager.ChannelListener, VpnListener.C
private fun unregisterReceiver() { private fun unregisterReceiver() {
if (receiverRegistered) { if (receiverRegistered) {
unregisterReceiver(receiver) unregisterReceiver(receiver)
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
receiverRegistered = false receiverRegistered = false
} }
} }

View File

@@ -26,7 +26,6 @@ class Routing(private val upstream: String, val downstream: String, ownerAddress
private val startScript = LinkedList<String>() private val startScript = LinkedList<String>()
private val stopScript = LinkedList<String>() private val stopScript = LinkedList<String>()
var started = false var started = false
private set
fun ipForward(): Routing { fun ipForward(): Routing {
startScript.add("echo 1 >/proc/sys/net/ipv4/ip_forward") startScript.add("echo 1 >/proc/sys/net/ipv4/ip_forward")

View File

@@ -5,6 +5,7 @@ import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.support.customtabs.CustomTabsIntent import android.support.customtabs.CustomTabsIntent
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v4.content.LocalBroadcastManager
import android.widget.Toast import android.widget.Toast
import com.takisoft.fix.support.v7.preference.PreferenceFragmentCompatDividers import com.takisoft.fix.support.v7.preference.PreferenceFragmentCompatDividers
import java.io.IOException import java.io.IOException
@@ -18,6 +19,7 @@ class SettingsPreferenceFragment : PreferenceFragmentCompatDividers() {
addPreferencesFromResource(R.xml.pref_settings) addPreferencesFromResource(R.xml.pref_settings)
findPreference("service.clean").setOnPreferenceClickListener { findPreference("service.clean").setOnPreferenceClickListener {
Routing.clean() Routing.clean()
LocalBroadcastManager.getInstance(context!!).sendBroadcastSync(Intent(App.ACTION_CLEAN_ROUTINGS))
true true
} }
findPreference("misc.logcat").setOnPreferenceClickListener { findPreference("misc.logcat").setOnPreferenceClickListener {

View File

@@ -29,10 +29,15 @@ class TetheringService : Service(), VpnListener.Callback {
private var upstream: String? = null private var upstream: String? = null
private var receiverRegistered = false private var receiverRegistered = false
private val receiver = broadcastReceiver { _, intent -> private val receiver = broadcastReceiver { _, intent ->
val remove = routings.keys - NetUtils.getTetheredIfaces(intent.extras) when (intent.action) {
if (remove.isEmpty()) return@broadcastReceiver NetUtils.ACTION_TETHER_STATE_CHANGED -> {
val failed = remove.any { routings.remove(it)?.stop() == false } val remove = routings.keys - NetUtils.getTetheredIfaces(intent.extras)
if (failed) Toast.makeText(this, getText(R.string.noisy_su_failure), Toast.LENGTH_SHORT).show() if (remove.isEmpty()) return@broadcastReceiver
val failed = remove.any { routings.remove(it)?.stop() == false }
if (failed) Toast.makeText(this, getText(R.string.noisy_su_failure), Toast.LENGTH_SHORT).show()
}
App.ACTION_CLEAN_ROUTINGS -> for (iface in routings.keys) routings[iface] = null
}
updateRoutings() updateRoutings()
} }

View File

@@ -39,8 +39,7 @@
<string name="settings_service">服务</string> <string name="settings_service">服务</string>
<string name="settings_service_dns">下游 DNS 服务器:端口</string> <string name="settings_service_dns">下游 DNS 服务器:端口</string>
<string name="settings_service_clean">清理路由规则</string> <string name="settings_service_clean">清理/重新应用路由规则</string>
<string name="settings_service_clean_summary">请关闭所有服务后使用</string>
<string name="settings_misc">杂项</string> <string name="settings_misc">杂项</string>
<string name="settings_misc_logcat">导出日志</string> <string name="settings_misc_logcat">导出日志</string>
<string name="settings_misc_logcat_summary">这种非常有用哇</string> <string name="settings_misc_logcat_summary">这种非常有用哇</string>

View File

@@ -42,8 +42,7 @@
<string name="settings_service">Service</string> <string name="settings_service">Service</string>
<string name="settings_service_dns">Downstream DNS server:port</string> <string name="settings_service_dns">Downstream DNS server:port</string>
<string name="settings_service_clean">Clean routing rules</string> <string name="settings_service_clean">Clean/reapply routing rules</string>
<string name="settings_service_clean_summary">Only use after having shut down everything</string>
<string name="settings_misc">Misc</string> <string name="settings_misc">Misc</string>
<string name="settings_misc_logcat">Export logcat</string> <string name="settings_misc_logcat">Export logcat</string>
<string name="settings_misc_logcat_summary">Such useful very wow</string> <string name="settings_misc_logcat_summary">Such useful very wow</string>

View File

@@ -9,8 +9,7 @@
android:defaultValue="8.8.8.8:53"/> android:defaultValue="8.8.8.8:53"/>
<Preference <Preference
android:key="service.clean" android:key="service.clean"
android:title="@string/settings_service_clean" android:title="@string/settings_service_clean"/>
android:summary="@string/settings_service_clean_summary"/>
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:title="@string/settings_misc"> android:title="@string/settings_misc">