Commit 54956940 authored by Mygod's avatar Mygod Committed by Max Lv

Add share over LAN

parent 31abffec
...@@ -256,7 +256,7 @@ object BaseService { ...@@ -256,7 +256,7 @@ object BaseService {
val cmd = buildAdditionalArguments(arrayListOf( val cmd = buildAdditionalArguments(arrayListOf(
File((this as Context).applicationInfo.nativeLibraryDir, Executable.SS_LOCAL).absolutePath, File((this as Context).applicationInfo.nativeLibraryDir, Executable.SS_LOCAL).absolutePath,
"-u", "-u",
"-b", "127.0.0.1", "-b", DataStore.listenAddress,
"-l", DataStore.portProxy.toString(), "-l", DataStore.portProxy.toString(),
"-t", "600", "-t", "600",
"-c", data.buildShadowsocksConfig().absolutePath)) "-c", data.buildShadowsocksConfig().absolutePath))
......
...@@ -53,7 +53,7 @@ object LocalDnsService { ...@@ -53,7 +53,7 @@ object LocalDnsService {
fun buildOvertureConfig(file: String) = file.also { fun buildOvertureConfig(file: String) = file.also {
File(Core.deviceStorage.filesDir, it).writeText(JSONObject().run { File(Core.deviceStorage.filesDir, it).writeText(JSONObject().run {
put("BindAddress", "127.0.0.1:" + DataStore.portLocalDns) put("BindAddress", "${DataStore.listenAddress}:${DataStore.portLocalDns}")
put("RedirectIPv6Record", true) put("RedirectIPv6Record", true)
put("DomainBase64Decode", false) put("DomainBase64Decode", false)
put("HostsFile", "hosts") put("HostsFile", "hosts")
......
...@@ -42,7 +42,7 @@ class TransproxyService : Service(), LocalDnsService.Interface { ...@@ -42,7 +42,7 @@ class TransproxyService : Service(), LocalDnsService.Interface {
private fun startDNSTunnel() { private fun startDNSTunnel() {
data.processes.start(listOf(File(applicationInfo.nativeLibraryDir, Executable.SS_TUNNEL).absolutePath, data.processes.start(listOf(File(applicationInfo.nativeLibraryDir, Executable.SS_TUNNEL).absolutePath,
"-t", "10", "-t", "10",
"-b", "127.0.0.1", "-b", DataStore.listenAddress,
"-u", "-u",
"-l", DataStore.portLocalDns.toString(), // ss-tunnel listens on the same port as overture "-l", DataStore.portLocalDns.toString(), // ss-tunnel listens on the same port as overture
"-L", data.profile!!.remoteDns.split(",").first().trim() + ":53", "-L", data.profile!!.remoteDns.split(",").first().trim() + ":53",
...@@ -58,7 +58,7 @@ class TransproxyService : Service(), LocalDnsService.Interface { ...@@ -58,7 +58,7 @@ class TransproxyService : Service(), LocalDnsService.Interface {
redirector = iptables; redirector = iptables;
} }
redsocks { redsocks {
local_ip = 127.0.0.1; local_ip = ${DataStore.listenAddress};
local_port = ${DataStore.portTransproxy}; local_port = ${DataStore.portTransproxy};
ip = 127.0.0.1; ip = 127.0.0.1;
port = ${DataStore.portProxy}; port = ${DataStore.portProxy};
......
...@@ -228,7 +228,7 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface { ...@@ -228,7 +228,7 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
val cmd = arrayListOf(File(applicationInfo.nativeLibraryDir, Executable.TUN2SOCKS).absolutePath, val cmd = arrayListOf(File(applicationInfo.nativeLibraryDir, Executable.TUN2SOCKS).absolutePath,
"--netif-ipaddr", PRIVATE_VLAN.format(Locale.ENGLISH, "2"), "--netif-ipaddr", PRIVATE_VLAN.format(Locale.ENGLISH, "2"),
"--netif-netmask", "255.255.255.0", "--netif-netmask", "255.255.255.0",
"--socks-server-addr", "127.0.0.1:${DataStore.portProxy}", "--socks-server-addr", "${DataStore.listenAddress}:${DataStore.portProxy}",
"--tunfd", fd.toString(), "--tunfd", fd.toString(),
"--tunmtu", VPN_MTU.toString(), "--tunmtu", VPN_MTU.toString(),
"--sock-path", "sock_path", "--sock-path", "sock_path",
......
...@@ -63,6 +63,7 @@ object DataStore : OnPreferenceDataStoreChangeListener { ...@@ -63,6 +63,7 @@ object DataStore : OnPreferenceDataStoreChangeListener {
val directBootAware: Boolean get() = Core.directBootSupported && canToggleLocked val directBootAware: Boolean get() = Core.directBootSupported && canToggleLocked
val tcpFastOpen: Boolean get() = TcpFastOpen.sendEnabled && DataStore.publicStore.getBoolean(Key.tfo, true) val tcpFastOpen: Boolean get() = TcpFastOpen.sendEnabled && DataStore.publicStore.getBoolean(Key.tfo, true)
val serviceMode get() = publicStore.getString(Key.serviceMode) ?: Key.modeVpn val serviceMode get() = publicStore.getString(Key.serviceMode) ?: Key.modeVpn
val listenAddress get() = if (publicStore.getBoolean(Key.shareOverLan, false)) "0.0.0.0" else "127.0.0.1"
var portProxy: Int var portProxy: Int
get() = getLocalPort(Key.portProxy, 1080) get() = getLocalPort(Key.portProxy, 1080)
set(value) = publicStore.putString(Key.portProxy, value.toString()) set(value) = publicStore.putString(Key.portProxy, value.toString())
......
...@@ -36,6 +36,7 @@ object Key { ...@@ -36,6 +36,7 @@ object Key {
const val modeProxy = "proxy" const val modeProxy = "proxy"
const val modeVpn = "vpn" const val modeVpn = "vpn"
const val modeTransproxy = "transproxy" const val modeTransproxy = "transproxy"
const val shareOverLan = "shareOverLan"
const val portProxy = "portProxy" const val portProxy = "portProxy"
const val portLocalDns = "portLocalDns" const val portLocalDns = "portLocalDns"
const val portTransproxy = "portTransproxy" const val portTransproxy = "portTransproxy"
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
<string name="service_mode_proxy">Proxy only</string> <string name="service_mode_proxy">Proxy only</string>
<string name="service_mode_vpn">VPN</string> <string name="service_mode_vpn">VPN</string>
<string name="service_mode_transproxy">Transproxy</string> <string name="service_mode_transproxy">Transproxy</string>
<string name="share_over_lan">Share over LAN</string>
<string name="port_proxy">SOCKS5 proxy port</string> <string name="port_proxy">SOCKS5 proxy port</string>
<string name="port_local_dns">Local DNS port</string> <string name="port_local_dns">Local DNS port</string>
<string name="port_transproxy">Transproxy port</string> <string name="port_transproxy">Transproxy port</string>
......
...@@ -57,7 +57,6 @@ dependencies { ...@@ -57,7 +57,6 @@ dependencies {
implementation project(':core') implementation project(':core')
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "androidx.leanback:leanback-preference:$androidxVersion" implementation "androidx.leanback:leanback-preference:$androidxVersion"
implementation 'com.github.bumptech.glide:glide:3.8.0'
} }
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
......
...@@ -61,6 +61,7 @@ class MainPreferenceFragment : LeanbackPreferenceFragment(), ShadowsocksConnecti ...@@ -61,6 +61,7 @@ class MainPreferenceFragment : LeanbackPreferenceFragment(), ShadowsocksConnecti
private lateinit var stats: Preference private lateinit var stats: Preference
private lateinit var controlImport: Preference private lateinit var controlImport: Preference
private lateinit var serviceMode: Preference private lateinit var serviceMode: Preference
private lateinit var shareOverLan: Preference
private lateinit var portProxy: Preference private lateinit var portProxy: Preference
private lateinit var portLocalDns: Preference private lateinit var portLocalDns: Preference
private lateinit var portTransproxy: Preference private lateinit var portTransproxy: Preference
...@@ -114,11 +115,13 @@ class MainPreferenceFragment : LeanbackPreferenceFragment(), ShadowsocksConnecti ...@@ -114,11 +115,13 @@ class MainPreferenceFragment : LeanbackPreferenceFragment(), ShadowsocksConnecti
if (state == BaseService.STOPPED) { if (state == BaseService.STOPPED) {
controlImport.isEnabled = true controlImport.isEnabled = true
serviceMode.isEnabled = true serviceMode.isEnabled = true
shareOverLan.isEnabled = true
portProxy.isEnabled = true portProxy.isEnabled = true
onServiceModeChange.onPreferenceChange(null, DataStore.serviceMode) onServiceModeChange.onPreferenceChange(null, DataStore.serviceMode)
} else { } else {
controlImport.isEnabled = false controlImport.isEnabled = false
serviceMode.isEnabled = false serviceMode.isEnabled = false
shareOverLan.isEnabled = false
portProxy.isEnabled = false portProxy.isEnabled = false
portLocalDns.isEnabled = false portLocalDns.isEnabled = false
portTransproxy.isEnabled = false portTransproxy.isEnabled = false
...@@ -168,6 +171,7 @@ class MainPreferenceFragment : LeanbackPreferenceFragment(), ShadowsocksConnecti ...@@ -168,6 +171,7 @@ class MainPreferenceFragment : LeanbackPreferenceFragment(), ShadowsocksConnecti
} }
serviceMode = findPreference(Key.serviceMode) serviceMode = findPreference(Key.serviceMode)
shareOverLan = findPreference(Key.shareOverLan)
portProxy = findPreference(Key.portProxy) portProxy = findPreference(Key.portProxy)
portLocalDns = findPreference(Key.portLocalDns) portLocalDns = findPreference(Key.portLocalDns)
portTransproxy = findPreference(Key.portTransproxy) portTransproxy = findPreference(Key.portTransproxy)
......
...@@ -40,6 +40,9 @@ ...@@ -40,6 +40,9 @@
android:defaultValue="vpn" android:defaultValue="vpn"
android:summary="%s" android:summary="%s"
android:title="@string/service_mode"/> android:title="@string/service_mode"/>
<SwitchPreference
android:key="shareOverLan"
android:title="@string/share_over_lan"/>
<com.takisoft.preferencex.AutoSummaryEditTextPreference <com.takisoft.preferencex.AutoSummaryEditTextPreference
android:key="portProxy" android:key="portProxy"
android:inputType="number" android:inputType="number"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment