Commit Graph
15 Commits
Author SHA1 Message Date
Mygod 6dadff9736 Use underlying network only since Android P
Fixes #1706.
2018-03-29 19:31:29 -07:00
Mygod 74e2935f1e Actually use underlying network 2018-03-23 00:23:13 -07:00
Mygod 0af450008b Implement network capabilities reporting
This commit should fix the problem where VPN connection is viewed as metered connections on Android P DP1. However as I only have an emulator to test, I can't tell if it really works but it should.

An interesting observation is that the developer can call setUnderlyingNetworks(arrayOfNulls(1)) to make the VPN connection always unmetered. This is more of a quick hack instead of a real fix. Source: https://android.googlesource.com/platform/frameworks/base/+/adbf1d0/services/core/java/com/android/server/connectivity/Vpn.java#312

One may ask whether it's possible to fix this issue for Android 8.1. The short answer is not that I know of.
After some intensive source code reading, I found out that this is the commit that "breaks" whether VPN is metered for Android 8.1: https://android.googlesource.com/platform/frameworks/base/+/43d2a1700b6eb1d804924c6a1e5e0161a13a5348%5E%21/
The key is that isActiveNetworkMetered() used to return getActiveNetworkInfo().isMetered() and now it uses the more up-to-date API getActiveNetwork(). However, getActiveNetworkInfo() ignores VPN connections while getActiveNetwork() prefers VPN connection. And since NetworkCapabilities for VPN Network is always metered by default, this ultimately causes the bug. One might be able to get around this bug by somehow calling NetworkAgent.sendNetworkCapabilities in the correct context.

Fix #1666.
2018-03-22 23:40:15 -07:00
Mygod a755b669c8 Fix code style issues 2018-02-04 15:07:38 -08:00
Mygod 7a49ddc045 Fix #1612 2018-01-28 00:09:01 -08:00
Mygod ac96e6fc9c Min API 19 -> 21
Fix #1579.
2018-01-18 19:57:30 -08:00
Mygod f381ad6300 Fix crash when no profile is selected 2017-12-17 05:53:35 -08:00
Mygod 922eb8b202 Faster VPN connection and less wait
I just saved everyone ~0.9s every VPN connection.
2017-12-17 05:04:40 -08:00
Mygod 1010edc561 Speed up Acl.fromReader
It should run 9x faster than before now.

Past mistakes:

* InetAddress.parseNumericAddress throws TWO exceptions underthehood if the string passed is invalid. This caused a huge overhead;
* CharSequence.split in Kotlin is EXTREMELY SLOW.
2017-12-17 04:43:19 -08:00
Mygod d7a11eaa3b Implement direct boot awareness
To do direct boot, important files need to be moved to device storage (i.e. not as safe storage). The only thing sensitive is user credentials (server settings in each profile) and the config file passed to libss-*.so. In order to implement direct boot, at least the active profile has to be moved/copied to device storage.

This commit keeps profile information (and temporary data used by ProfileConfigFragment) and Shadowsocks config in credential storage and move everything else to device storage. In order to make direct boot work, active profile is also copied into device storage and Shadowsocks config file is created in device storage during direct boot. Cleanup of those information is also implemented.

Fixes #1457.

NB:

* `android:directBootAware` can't be used on application element. That seems to be used by system apps.
* Works fine with multi-user;
* Old GSM files are not migrated (see App.kt) to device storage.
2017-12-15 15:36:19 -08:00
Max Lv 5bc7200d21 Fix the exception when addAllowedApplication 2017-12-09 23:02:45 +08:00
Mygod 97e93552c6 Always proxy the app itself
No need to keep a confusing option. Fix #1484.
2017-12-08 17:37:11 -08:00
Mygod 334cd5ea1e Fix issues with keeping compatibility with old databases 2017-12-06 17:32:39 -08:00
Mygod e19e629487 Move catch blocks to child classes
This reverts commit 07a48bc20b and f870093c94.
2017-12-06 16:07:37 -08:00
Mygod 3e8b254118 Initial draft for porting this project to Gradle + Kotlin
This is one of my stupidest idea ever.
2017-12-03 10:20:57 -08:00