Skip to content

Commit 5b71f0e

Browse files
committed
Get rid of -V flag
1 parent 36b46d6 commit 5b71f0e

File tree

8 files changed

+17
-80
lines changed

8 files changed

+17
-80
lines changed

core/src/main/java/com/github/shadowsocks/JniHelper.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ public static boolean waitForCompat(@NonNull Process process, long millis) throw
7070
private static native Integer getExitValue(Process process);
7171
private static native Object getExitValueMutex(Process process);
7272
public static native int sendFd(int fd, @NonNull String path);
73-
public static native void close(int fd);
7473
@Nullable
7574
public static native byte[] parseNumericAddress(@NonNull String str);
7675
}

core/src/main/jni/jni-helper.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,6 @@ JNIEXPORT jobject JNICALL
6868
return env->GetObjectField(process, ProcessImpl_exitValueMutex);
6969
}
7070

71-
JNIEXPORT void JNICALL Java_com_github_shadowsocks_JniHelper_close(JNIEnv *env, jobject thiz, jint fd) {
72-
close(fd);
73-
}
74-
7571
JNIEXPORT jint JNICALL
7672
Java_com_github_shadowsocks_JniHelper_sendFd(JNIEnv *env, jobject thiz, jint tun_fd, jstring path) {
7773
int fd;

mobile/src/main/java/com/github/shadowsocks/MainActivity.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
6464
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem
6565
import java.io.IOException
6666
import java.net.HttpURLConnection
67-
import java.net.InetSocketAddress
68-
import java.net.Proxy
6967
import java.net.URL
7068
import java.util.*
7169

@@ -166,10 +164,7 @@ class MainActivity : AppCompatActivity(), ShadowsocksConnection.Interface, Drawe
166164
Acl.CHINALIST -> "www.qualcomm.cn"
167165
else -> "www.google.com"
168166
}, "/generate_204")
169-
val conn = (if (BaseService.usingVpnMode) url.openConnection() else
170-
url.openConnection(Proxy(Proxy.Type.SOCKS,
171-
InetSocketAddress("127.0.0.1", DataStore.portProxy))))
172-
as HttpURLConnection
167+
val conn = (url.openConnection(DataStore.proxy)) as HttpURLConnection
173168
conn.setRequestProperty("Connection", "close")
174169
conn.instanceFollowRedirects = false
175170
conn.useCaches = false

mobile/src/main/java/com/github/shadowsocks/acl/AclSyncJob.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import android.util.Log
2424
import com.evernote.android.job.Job
2525
import com.evernote.android.job.JobCreator
2626
import com.evernote.android.job.JobRequest
27+
import com.github.shadowsocks.preference.DataStore
2728
import java.io.IOException
2829
import java.net.URL
2930
import java.util.concurrent.TimeUnit
@@ -54,8 +55,8 @@ class AclSyncJob(private val route: String) : Job() {
5455
}
5556

5657
override fun onRunJob(params: Params): Result = try {
57-
val acl = URL("https://shadowsocks.org/acl/android/v1/$route.acl").openStream().bufferedReader()
58-
.use { it.readText() }
58+
val acl = URL("https://shadowsocks.org/acl/android/v1/$route.acl").openConnection(DataStore.proxy)
59+
.getInputStream().bufferedReader().use { it.readText() }
5960
Acl.getFile(route).printWriter().use { it.write(acl) }
6061
Result.SUCCESS
6162
} catch (e: IOException) {

mobile/src/main/java/com/github/shadowsocks/bg/BaseService.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ object BaseService {
194194
val pluginCmd = arrayListOf(pluginPath)
195195
if (TcpFastOpen.sendEnabled) pluginCmd.add("--fast-open")
196196
config
197-
.put("plugin", Commandline.toString(service.buildAdditionalArguments(pluginCmd)))
197+
.put("plugin", pluginCmd)
198198
.put("plugin_opts", plugin.toString())
199199
}
200200
// sensitive Shadowsocks config is stored in
@@ -251,18 +251,16 @@ object BaseService {
251251
}
252252
}
253253

254-
fun buildAdditionalArguments(cmd: ArrayList<String>): ArrayList<String> = cmd
255-
256254
fun startNativeProcesses() {
257255
val data = data
258256
val profile = data.profile!!
259-
val cmd = buildAdditionalArguments(arrayListOf(
257+
val cmd = arrayListOf(
260258
File((this as Context).applicationInfo.nativeLibraryDir, Executable.SS_LOCAL).absolutePath,
261259
"-u",
262260
"-b", "127.0.0.1",
263261
"-l", DataStore.portProxy.toString(),
264262
"-t", "600",
265-
"-c", data.buildShadowsocksConfig().absolutePath))
263+
"-c", data.buildShadowsocksConfig().absolutePath)
266264

267265
val acl = data.aclFile
268266
if (acl != null) {

mobile/src/main/java/com/github/shadowsocks/bg/LocalDnsService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ object LocalDnsService {
9696
return file
9797
}
9898

99-
if (!profile.udpdns) overtureProcess = GuardedProcess(buildAdditionalArguments(arrayListOf(
99+
if (!profile.udpdns) overtureProcess = GuardedProcess(arrayListOf(
100100
File(app.applicationInfo.nativeLibraryDir, Executable.OVERTURE).absolutePath,
101101
"-c", buildOvertureConfig("overture.conf")
102-
))).start()
102+
)).start()
103103
}
104104

105105
override fun killProcesses() {

mobile/src/main/java/com/github/shadowsocks/bg/VpnService.kt

Lines changed: 4 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import android.content.Context
2626
import android.content.Intent
2727
import android.content.pm.PackageManager
2828
import android.net.*
29-
import android.os.Build
3029
import android.os.IBinder
3130
import android.os.ParcelFileDescriptor
3231
import android.support.v4.os.BuildCompat
@@ -41,9 +40,7 @@ import com.github.shadowsocks.preference.DataStore
4140
import com.github.shadowsocks.utils.Subnet
4241
import com.github.shadowsocks.utils.parseNumericAddress
4342
import java.io.File
44-
import java.io.FileDescriptor
4543
import java.io.IOException
46-
import java.lang.reflect.Method
4744
import java.util.*
4845
import android.net.VpnService as BaseVpnService
4946

@@ -53,8 +50,6 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
5350
private const val PRIVATE_VLAN = "26.26.26.%s"
5451
private const val PRIVATE_VLAN6 = "fdfe:dcba:9876::%s"
5552

56-
private val getInt: Method = FileDescriptor::class.java.getDeclaredMethod("getInt$")
57-
5853
/**
5954
* Unfortunately registerDefaultNetworkCallback is going to return VPN interface since Android P DP1:
6055
* https://android.googlesource.com/platform/frameworks/base/+/dda156ab0c5d66ad82bdcf76cda07cbc0a9c8a2e
@@ -71,39 +66,6 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
7166
.build()
7267
}
7368

74-
private inner class ProtectWorker : LocalSocketListener("ShadowsocksVpnThread") {
75-
override val socketFile: File = File(app.deviceContext.filesDir, "protect_path")
76-
77-
override fun accept(socket: LocalSocket) {
78-
var success = false
79-
try {
80-
socket.inputStream.read()
81-
val fd = socket.ancillaryFileDescriptors!!.single()!!
82-
val fdInt = getInt.invoke(fd) as Int
83-
try {
84-
val network = underlyingNetwork
85-
success = if (network != null && Build.VERSION.SDK_INT >= 23) {
86-
network.bindSocket(fd)
87-
true
88-
} else protect(fdInt)
89-
} catch (e: Exception) {
90-
Log.e(tag, "Error when protect socket", e)
91-
app.track(e)
92-
} finally {
93-
JniHelper.close(fdInt) // Trick to close file decriptor
94-
}
95-
} catch (e: Exception) {
96-
Log.e(tag, "Error when receiving ancillary fd", e)
97-
app.track(e)
98-
}
99-
try {
100-
socket.outputStream.write(if (success) 0 else 1)
101-
} catch (e: IOException) {
102-
Log.e(tag, "Error when returning result in protect", e)
103-
app.track(e)
104-
}
105-
}
106-
}
10769
class NullConnectionException : NullPointerException()
10870

10971
init {
@@ -115,27 +77,20 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
11577
ServiceNotification(this, profileName, "service-vpn")
11678

11779
private var conn: ParcelFileDescriptor? = null
118-
private var worker: ProtectWorker? = null
11980
private var tun2socksProcess: GuardedProcess? = null
120-
private var underlyingNetwork: Network? = null
121-
@TargetApi(28)
122-
set(value) {
123-
setUnderlyingNetworks(if (value == null) null else arrayOf(value))
124-
field = value
125-
}
12681

12782
private val connectivity by lazy { getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager }
12883
@TargetApi(28)
12984
private val defaultNetworkCallback = object : ConnectivityManager.NetworkCallback() {
13085
override fun onAvailable(network: Network) {
131-
underlyingNetwork = network
86+
setUnderlyingNetworks(arrayOf(network))
13287
}
13388
override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities?) {
13489
// it's a good idea to refresh capabilities
135-
underlyingNetwork = network
90+
setUnderlyingNetworks(arrayOf(network))
13691
}
13792
override fun onLost(network: Network) {
138-
underlyingNetwork = null
93+
setUnderlyingNetworks(null)
13994
}
14095
}
14196
private var listeningForDefaultNetwork = false
@@ -152,8 +107,6 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
152107
connectivity.unregisterNetworkCallback(defaultNetworkCallback)
153108
listeningForDefaultNetwork = false
154109
}
155-
worker?.stopThread()
156-
worker = null
157110
super.killProcesses()
158111
tun2socksProcess?.destroy()
159112
tun2socksProcess = null
@@ -172,21 +125,12 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
172125
}
173126

174127
override fun startNativeProcesses() {
175-
val worker = ProtectWorker()
176-
worker.start()
177-
this.worker = worker
178-
179128
super.startNativeProcesses()
180129

181130
val fd = startVpn()
182131
if (!sendFd(fd)) throw IOException("sendFd failed")
183132
}
184133

185-
override fun buildAdditionalArguments(cmd: ArrayList<String>): ArrayList<String> {
186-
cmd += "-V"
187-
return cmd
188-
}
189-
190134
private fun startVpn(): Int {
191135
val profile = data.profile!!
192136
val builder = Builder()
@@ -214,7 +158,7 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
214158
Log.e(tag, "Invalid package name", ex)
215159
}
216160
}
217-
if (!profile.bypass) builder.addAllowedApplication(me)
161+
if (profile.bypass) builder.addDisallowedApplication(me)
218162
}
219163

220164
when (profile.route) {

mobile/src/main/java/com/github/shadowsocks/preference/DataStore.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import com.github.shadowsocks.database.PublicDatabase
2727
import com.github.shadowsocks.utils.DirectBoot
2828
import com.github.shadowsocks.utils.Key
2929
import com.github.shadowsocks.utils.parsePort
30+
import java.net.InetSocketAddress
31+
import java.net.Proxy
3032

3133
object DataStore {
3234
val publicStore = OrmLitePreferenceDataStore(PublicDatabase.kvPairDao)
@@ -64,6 +66,8 @@ object DataStore {
6466
get() = getLocalPort(Key.portTransproxy, 8200)
6567
set(value) = publicStore.putString(Key.portTransproxy, value.toString())
6668

69+
val proxy get() = Proxy(Proxy.Type.SOCKS, InetSocketAddress("127.0.0.1", portProxy))
70+
6771
fun initGlobal() {
6872
// temporary workaround for support lib bug
6973
if (publicStore.getString(Key.serviceMode) == null) serviceMode = serviceMode

0 commit comments

Comments
 (0)