Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Service is down intermittently #2667

Closed
3 of 14 tasks
Mygod opened this issue Jan 26, 2021 · 108 comments
Closed
3 of 14 tasks

Service is down intermittently #2667

Mygod opened this issue Jan 26, 2021 · 108 comments
Labels

Comments

@Mygod
Copy link
Contributor

Mygod commented Jan 26, 2021

Describe the bug

Sometimes the Internet fails entirely when Shadowsocks keeps running for a while. This is a new bug introduced around v5.1.7 until latest master.

To Reproduce
Steps to reproduce the behavior:

  1. Start Shadowsocks
  2. Wait until your Internet is dead
  3. Restart service and verify that it is back working again

Expected behavior
Shadowsocks should work 24/7.

Relevant logcat

ERROR dns udp 127.0.0.1:38945 query message parse error: dns class value unknown: 2287

This message is repeated 6 times over 4 seconds, around when the DNS goes down. Not sure if it is related though.

Smartphone (please complete the following information):

  • Android/Chrome OS version: Android 11
  • Device: Pixel 3a XL
  • Version: Reproducible from v5.2.1 (9a1c677) to 1394ab3
  • Last version that did not exhibit the issue: around v5.1.7

Configuration
Put an x inside the [ ] that applies.

  • IPv4 server address
  • IPv6 server address
  • Client IPv4 availability
  • Client IPv6 availability
  • Encrypt method: n/a
  • Route
    • All
    • Bypass LAN
    • Bypass China
    • Bypass LAN & China
    • GFW List
    • China List
    • Custom rules
  • IPv6 route
  • Apps VPN mode
    • Bypass mode
  • Remote DNS: 1.1.1.1
@Mygod Mygod added the bug label Jan 26, 2021
@madeye
Copy link
Contributor

madeye commented Jan 26, 2021

It looks related to

https://github.com/shadowsocks/shadowsocks-rust/blob/d41404cbf9241ae695f97d9b0a86bee479d9253f/crates/shadowsocks-service/src/local/dns/server.rs#L230

But I guess it's not the root cause.

Two questions:

  1. Would DNS go back online after 4 seconds?
  2. When the DNS is down, can we still visit https://1.1.1.1?

@Mygod
Copy link
Contributor Author

Mygod commented Jan 26, 2021

Looping @zonyitoo in on this.

  1. No.
  2. I haven't tried it yet but will update when this eventually happens again.

@zonyitoo
Copy link

Couldn't reproduce because I don't possess an Android device. :(

Anything I can help? Maybe start sslocal with -vvv and see what it was doing at that time.

@madeye
Copy link
Contributor

madeye commented Jan 26, 2021

@zonyitoo You can try this on a router with local DNS feature enabled. I guess it's something related to socket leaks.

@madeye
Copy link
Contributor

madeye commented Jan 26, 2021

@Mygod please try change 256 to 64 here:

@zonyitoo
Copy link

I tested with

while true; do dig @127.0.0.1 -p 5300 google.com; done

and runs sslocal with --protocol dns --udp-max-associations 64 for half an hour. Everything seems to works fine.

@zonyitoo
Copy link

BTW, --udp-max-associations doesn't have any effects in dns relay.

@madeye
Copy link
Contributor

madeye commented Jan 26, 2021

After testing for hours, I still cannot reproduce the problem locally.

There's no socket leaks observed, even with intensive VoIP usage. I'm watching the open FDs through ADB:

adb exec-out run-as com.github.shadowsocks ls -l /proc/$libsslocal.pid/fd | wc -l

@Mygod
Copy link
Contributor Author

Mygod commented Jan 26, 2021

For more context, I have been using it with VPN hotspot, which forwards other DNS packets via NAT. I will do more test later.

@Mygod
Copy link
Contributor Author

Mygod commented Jan 27, 2021

Just got a different error: ERROR received invalid UDP associate packet: b"G\x93\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03ssl\x07gstatic\x03com\x00\x00\x01\x00\x01"

@zonyitoo
Copy link

zonyitoo commented Jan 27, 2021

UDP packet didn't have a SOCKS5 header: https://github.com/shadowsocks/shadowsocks-rust/blob/master/crates/shadowsocks-service/src/local/socks/server/socks5/udprelay.rs#L110-L118

b"G\x93\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03ssl\x07gstatic\x03com\x00\x00\x01\x00\x01"

And it is obviously a plain DNS query.

@Mygod Mygod changed the title DNS is down intermittently Service is down intermittently Jan 28, 2021
@Mygod
Copy link
Contributor Author

Mygod commented Jan 28, 2021

Ok I ran libsslocal with -v (because -vvv logs every single UDP packets and makes the logger OOM) and sent the logs to @madeye. Some preliminary findings:

  1. When it is not working, existing TCP connections still work but initiating new TCP connection does not.
  2. Also seeing [shadowsocks_service::local::socks::server::socks5::tcprelay] CONNECT xxx and [shadowsocks_service::local::dns::server] DNS lookup xxx in log, despite nothing working.
  3. Number of fds is well under 1000, where as the limit is 32768.

@madeye
Copy link
Contributor

madeye commented Jan 28, 2021

It looks we need to check the VPNService protect() routine.

Seems sslocal is still receiving new connections, but keep failing to connect the remote shadowsocks server.

@Mygod
Copy link
Contributor Author

Mygod commented Jan 28, 2021

There is no significant network related logic change in Kotlin since my last update: v5.1.7...1394ab3

I am pretty sure that I was on v5.1.7 before, and it was able to run completely fine for a long period of time.

@madeye
Copy link
Contributor

madeye commented Jan 28, 2021

Yes, I mean the protect logic in sslocal.

@zonyitoo
Copy link

  1. Did you see any logs like DNS resolved {}:{} with customized ? If no, then the problem is in DNS resolver.
  2. protect() opens a new connection everytime when creating new sockets. How can it be broken?

@madeye
Copy link
Contributor

madeye commented Jan 28, 2021

Just to confirm, you cannot visit https://1.1.1.1 after the sslocal is down?

@Mygod
Copy link
Contributor Author

Mygod commented Jan 28, 2021

I have not tried 1.1.1.1 specifically but ssh into an IP directly does not work.

@Mygod
Copy link
Contributor Author

Mygod commented Jan 28, 2021

After testing for hours, I still cannot reproduce the problem locally.

Regarding this, it only happens randomly. Perhaps try to run it more?

@madeye
Copy link
Contributor

madeye commented Jan 29, 2021

@Mygod I usually switch profiles from time to time, maybe that's why I didn't observe connection down before.

Also, unlike tethering, workload from one phone is typically lower, making me harder to reproduce the issue.

@madeye
Copy link
Contributor

madeye commented Jan 29, 2021

One more question for @Mygod, do you observe busy CPU usage when the connection down?

@madeye
Copy link
Contributor

madeye commented Jan 29, 2021

Did you see any logs like DNS resolved {}:{} with customized ?

There are only CONNECT related items in @Mygod's logs, no DNS logs, as he is running in -v verbose mode.

@zonyitoo
Copy link

@Mygod
Copy link
Contributor Author

Mygod commented Jan 29, 2021

Ok I managed to reproduce it again and haven't restarted it yet. Let me know what you want to see asap. :)

@Mygod I usually switch profiles from time to time, maybe that's why I didn't observe connection down before.

Also, unlike tethering, workload from one phone is typically lower, making me harder to reproduce the issue.

Yes. It is best to set up a profile that you can consistently connect to, in order to reproduce this bug.

One more question for @Mygod, do you observe busy CPU usage when the connection down?

Yes.

   PID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ ARGS
  2036 u0_a201      20   0  14G 214M  95M S 14.6   5.9 343:36.61 com.android.systemui
 21267 u0_a248      20   0  10G  63M 5.0M S 12.3   1.7 147:51.48 libsslocal.so -v --stat-path /data/user_de/0/com.github.shadowsocks/no_backup/stat_main -c /data/user/0/com.github.shadowsocks/no_backup/shadowso+
  1597 system       18  -2  16G 348M 258M S 11.0   9.6 640:55.15 system_server
 27107 u0_a248      20   0  14G  51M  21M S  9.3   1.4  16:40.26 com.github.shadowsocks:bg
  7605 u0_a248      10 -10  13G 207M 147M S  7.0   5.7   0:24.07 com.github.shadowsocks

Did you see any logs like DNS resolved {}:{} with customized ?

There are only CONNECT related items in @Mygod's logs, no DNS logs, as he is running in -v verbose mode.

I also get logs like [shadowsocks_service::local::dns::server] DNS lookup A **.

zonyitoo added a commit to shadowsocks/shadowsocks-rust that referenced this issue Jan 29, 2021
@madeye
Copy link
Contributor

madeye commented Jan 29, 2021

@Mygod Is the traffic stat still updating?

@Mygod
Copy link
Contributor Author

Mygod commented Jan 29, 2021

Yes.

@Mygod Mygod reopened this Apr 25, 2021
@madeye
Copy link
Contributor

madeye commented Apr 25, 2021

Nope, I followed the same steps and everything works well.

@madeye
Copy link
Contributor

madeye commented Apr 26, 2021

BTW, any special on your WiFi? For example, does it block all the external DNS servers or require web authentication?

@Mygod
Copy link
Contributor Author

Mygod commented Apr 26, 2021

No it is a normal home WiFi. Doing this in reverse order does not seem to trigger the issue (i.e. if it starts with Wi-Fi network, then turning on/off data/Wi-Fi does not seem to cut off the connection at all).

@madeye
Copy link
Contributor

madeye commented Apr 26, 2021

It looks a bug of the Android system on some specific devices.

Let's wait for more reports if anyone else can reproduce this issue.

@Mygod
Copy link
Contributor Author

Mygod commented Apr 26, 2021

I am using latest Android 11 on Pixel 3A XL though. 😅

I've tried switching Network.bindSocket to VpnService.protect, and not calling VpnService.setUnderlyingNetworks but the issue persists. Another thing I've noticed is that once the service is started under data, turning data off and then on again does not cut off the connection (even though no packets can be sent to wlan0), even though the Network ID has changed.

@Mygod
Copy link
Contributor Author

Mygod commented Apr 27, 2021

Too lazy to debug further... Maybe another day. 🤣

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

Hmm just tried again and it seems working fine on Route on All but not working on Bypass LAN/China/Bypass LAN and China.

I have no idea man. It seems to occur randomly.

05-05 22:48:57.300 13583 13698 E libsslocal: 2021-05-05T22:48:57.294894850-04:00 DEBUG [13695:502342579448] [shadowsocks_service::local::dns::server] DNS lookup A shadowsocks.org.
05-05 22:48:57.304 13583 13698 E libsslocal: 2021-05-05T22:48:57.300897507-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::dns::client_cache] take cached DNS client for UnixStream("local_dns_path")
05-05 22:48:57.305 13583 13698 E libsslocal: 2021-05-05T22:48:57.302267194-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::dns::upstream] DNS lookup Message { header: Header { id: 50003, message_type: Query, op_code: Query, authoritative: false, truncation: false, recursion_desired: true, recursion_available: false, authentic_data: false, checking_disabled: false, response_code: 0, query_count: 0, answer_count: 0, name_server_count: 0, additional_count: 0 }, queries: [Query { name: Name { is_fqdn: true, label_data: [115, 104, 97, 100, 111, 119, 115, 111, 99, 107, 115, 111, 114, 103], label_ends: [11, 14] }, query_type: A, query_class: IN }], answers: [], name_servers: [], additionals: [], sig0: [], edns: None }
05-05 22:48:57.310 13583 13698 E libsslocal: 2021-05-05T22:48:57.305736205-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::dns::client_cache] creating connection to DNS server UnixStream("local_dns_path")
05-05 22:48:57.311 13583 13698 E libsslocal: 2021-05-05T22:48:57.308184382-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::dns::client_cache] creating connection to DNS server UdpRemote(dns.google:53)
05-05 22:48:57.314 13583 13698 E libsslocal: 2021-05-05T22:48:57.311664122-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::dns::upstream] DNS lookup Message { header: Header { id: 58298, message_type: Query, op_code: Query, authoritative: false, truncation: false, recursion_desired: true, recursion_available: false, authentic_data: false, checking_disabled: false, response_code: 0, query_count: 0, answer_count: 0, name_server_count: 0, additional_count: 0 }, queries: [Query { name: Name { is_fqdn: true, label_data: [115, 104, 97, 100, 111, 119, 115, 111, 99, 107, 115, 111, 114, 103], label_ends: [11, 14] }, query_type: A, query_class: IN }], answers: [], name_servers: [], additionals: [], sig0: [], edns: None }
05-05 22:48:57.323 13583 13698 E libsslocal: 2021-05-05T22:48:57.321430321-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::dns::client_cache] creating connection to DNS server UdpRemote(dns.google:53)
05-05 22:48:57.332 13583 13698 E libsslocal: 2021-05-05T22:48:57.329041884-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::dns::server] pick remote response (response): Err(Custom { kind: Other, error: ProtoError { kind: Io(Os { code: 101, kind: Other, message: "Network is unreachable" }) } })
05-05 22:49:00.713 13583 13698 E libsslocal: 2021-05-05T22:49:00.711130138-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 HandshakeRequest { methods: [0] } 
05-05 22:49:00.714 13583 13698 E libsslocal: 2021-05-05T22:49:00.713284357-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] reply handshake HandshakeResponse { chosen_method: 0 }
05-05 22:49:00.718 13583 13698 E libsslocal: 2021-05-05T22:49:00.715614982-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 TcpRequestHeader { command: TcpConnect, address: 104.16.132.229:443 }
05-05 22:49:00.718 13583 13698 E libsslocal: 2021-05-05T22:49:00.716139201-04:00 DEBUG [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] CONNECT 104.16.132.229:443
05-05 22:49:00.729 13583 13698 E libsslocal: 2021-05-05T22:49:00.726184306-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 HandshakeRequest { methods: [0] } 
05-05 22:49:00.730 13583 13698 E libsslocal: 2021-05-05T22:49:00.729202952-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] reply handshake HandshakeResponse { chosen_method: 0 }
05-05 22:49:00.732 13583 13698 E libsslocal: 2021-05-05T22:49:00.730421963-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 TcpRequestHeader { command: TcpConnect, address: 104.16.133.229:443 }
05-05 22:49:00.732 13583 13698 E libsslocal: 2021-05-05T22:49:00.730802484-04:00 DEBUG [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] CONNECT 104.16.133.229:443
05-05 22:49:01.873 13583 13698 E libsslocal: 2021-05-05T22:49:01.865109888-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 HandshakeRequest { methods: [0] } 
05-05 22:49:01.873 13583 13698 E libsslocal: 2021-05-05T22:49:01.869921399-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] reply handshake HandshakeResponse { chosen_method: 0 }
05-05 22:49:01.874 13583 13698 E libsslocal: 2021-05-05T22:49:01.871164785-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 TcpRequestHeader { command: TcpConnect, address: 104.16.132.229:443 }
05-05 22:49:01.874 13583 13698 E libsslocal: 2021-05-05T22:49:01.871558327-04:00 DEBUG [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] CONNECT 104.16.132.229:443
05-05 22:49:01.883 13583 13698 E libsslocal: 2021-05-05T22:49:01.882564473-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 HandshakeRequest { methods: [0] } 
05-05 22:49:01.883 13583 13698 E libsslocal: 2021-05-05T22:49:01.883070723-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] reply handshake HandshakeResponse { chosen_method: 0 }
05-05 22:49:01.884 13583 13698 E libsslocal: 2021-05-05T22:49:01.883937911-04:00 TRACE [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] socks5 TcpRequestHeader { command: TcpConnect, address: 104.16.133.229:443 }
05-05 22:49:01.884 13583 13698 E libsslocal: 2021-05-05T22:49:01.884257390-04:00 DEBUG [13695:502342579448] [shadowsocks_service::local::socks::server::socks5::tcprelay] CONNECT 104.16.133.229:443

Bypassed traffic still works properly.

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

@zonyitoo Any thoughts? Only proxied streams are getting errno 101, bypassed streams are working fine.

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

I think it might be an issue with server name being a domain name, i.e. some bugs in lookup_then.

@zonyitoo
Copy link

zonyitoo commented May 6, 2021

Err.. I remember that @madeye said shadowsocks-android starts sslocal with resolved IPs.

DNS queries triggered by lookup_then will be looped back to the UDP port because the fd that created by trust-dns is not protected.

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

Ok you are right.

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

On the other hand, once I change my server to IP, the issue seems to go away. 🤔

@madeye
Copy link
Contributor

madeye commented May 6, 2021

It depends. In the latest shadowsocks-android, the hostname is resolved to IP address in shadowsocks-android only if there's one plugin enabled:

if (profile.host.parseNumericAddress() == null && profile.plugin != null) {

So, it would be related to the local DNS resolver of shadowsocks-rust. For example, when the network changed, the UDP socket of the local resolver should be released, otherwise we would see the issue.

BTW, even this is the root cause, I still cannot reproduce it following #2667 (comment) on my device.

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

Wtf?

@madeye
Copy link
Contributor

madeye commented May 6, 2021

DNS queries triggered by lookup_then will be looped back to the UDP port because the fd that created by trust-dns is not protected.

I remember you fixed it before, it should be protected now?

@madeye
Copy link
Contributor

madeye commented May 6, 2021

#2301

@zonyitoo

This comment has been minimized.

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

I just added a log in LocalDnsWorker and my server domain name was never queried even once. I doubt if #2301 is implemented correctly.

The patch: insert this at line 33 Timber.d(Message(query).question?.name?.toString())

@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

@zonyitoo
Copy link

zonyitoo commented May 6, 2021

Does shadowsocks-android passed dns parameter with unix:// prefix?

https://github.com/shadowsocks/shadowsocks-rust/blob/master/crates/shadowsocks-service/src/config.rs#L1341-L1350

@madeye
Copy link
Contributor

madeye commented May 6, 2021

Does shadowsocks-android passed dns parameter with unix:// prefix?

Yes.

@zonyitoo
Copy link

zonyitoo commented May 6, 2021

Then it should work.

Please check if there are any logs like: trace!("DNS resolved {}:{} with customized", self.addr, self.port);

Or shadowsocks-android can double check if it receives any queries about remote servers' host.

@Mygod Mygod closed this as completed in 39f784a May 6, 2021
@Mygod
Copy link
Contributor Author

Mygod commented May 6, 2021

I know what 39f784a fixes. I don't know why it fixed this but it fixed this.

shadowsocksRb pushed a commit to shadowsocksRb/shadowsocksRb-android that referenced this issue Aug 1, 2021
shadowsocksRb pushed a commit to shadowsocksRb/shadowsocksRb-android that referenced this issue Aug 2, 2021
JackyAnn added a commit to JackyAnn/shadowsocks-android that referenced this issue Sep 22, 2022
* Allow user to keep data when uninstalling (shadowsocks#2506)

* Update README.md

* Update dependencies

* Add cargo clean task

* Enable LTO

* Speed up rebuild

* Update issue templates with labels

* Update dependencies

* Fix output name second attempt

* Update NDK

* Ensure cargoBuild is ran before mergeJniLibFolders

* Bump version

* Refine release build process

* Refine gradle files

* Add RUST_BACKTRACE

* Use rethrowAsSocketException

* Suppress write errors to protect_path

* Update shadowsocks-rust

* Bump version

* Improve accessibility

* Rename cipher plain to none

* Revert "Add RUST_BACKTRACE"

This reverts commit fdff88e.

ndk-stack should be used instead.

* Use cp.cloudflare.com for connectivity test

Credits: https://www.v2ex.com/t/656983#r_8748918

* Update dependencies

* Remote DNS setting is enabled unconditionally

* Show more information on conflicting plugins

Because one of you feckers just cannot learn to be decent.

* Add support for PTR queries

* Prevent querying PTR on custom Network

* Suppress network unspecified exceptions

* Handle IOException while reading

* Refine handling duplicate plugins

* Use any address as default DNS

* Suppress EACCES for ProtectWorker

* Clean up unused code

* Do not suppress IOException

* Disable UDP relay if plugin is enabled and no fallback

* Remove unnecessary isExperimental

* Update dependencies

* Fix unchecked cast

* Do not use WorkManager in device storage

* Remove unnecessary directBootAware overloading

* Suppress BadConfigurationProvider

* Disable RemoveWorkManagerInitializer lint for apps

* Update to Android 11 beta 1

* Request QUERY_ALL_PACKAGES for mobile

* Refine code style

* Fix ambiguous coroutineContext

* Downgrade coroutines

* Update dependencies

* Deprecate using Handler

* Fix shadowsocks#2546

* Only match exported plugins

* Update dependencies

* Update dependencies

* Migrate to ML kit for scanning QR code

Fixes shadowsocks#2548.

* Make scanner immersive

* Lock orientation to prevent camera recreation

* Fix missing Serializable declaration

* Add missing serialVersionUID

* Update dependencies

* Partially migrate to ActivityResultContracts

AlertDialogFragment will be migrated after the API goes stable.

* Add ActionBar to oss activity

* Add ActionBar to details activity

* Refine Scanner

* Bump version

* Update dependencies

* Suppress cancellation exceptions

* Skip processing if EOS is reached

* Refine PTR compat

* Fix shadowsocks#2557

* Fix shadowsocks#2562

* Update Android gradle

* Set VPN flag properly

Refine shadowsocks#2562.

* Drop support for Android Lollipop

* Update dependencies

* Remove UDP upstream DNS support. Fix shadowsocks#2564 shadowsocks#2518

* Update shadowsocks-rust

* Update dependencies

* Decouple main dependencies from plugin lib

* Simplify code

* Add missing type

* Update dependencies

* Deprecate old backup mechanism for Android 5-

* Update leanback theme to appcompat

* Use singleTask launchMode

* Fix build

* Bump version

* Update dependencies

* Update dependencies

* Bump plugin lib version to 2.0.0

* Add isV2 to PluginManager.InitResult

* Pass a value with the VPN option, if plugin version < 2.0

* Switch to __android_vpn

* Remove unnecessary parentheses

* Update shadowsocks-rust

* Bump version

* Clean up and bump version

* Revert camera-view back to alpha17

* Bump version

* Update dependencies

* Migrate away from deprecated APIs with core 1.3.0-alpha05

* Clean up code

* Refine code style

* Remove old ciphers. Fix shadowsocks#2621

* Enable single-threaded

* Update shadowsocks-rust to 1.8.23

* Use Parcelize for TrafficStats

* Fix platform insets on API 29-

* Fix shadowsocks#2623

* Update barcode-scanning

* Fix shadowsocks#2571

* Refine error message

* Refine shadowsocks#2571

* Limit open sockets to 256 in UDP association. Fix shadowsocks#2625

* Bump version

* Fix little problem of profile switching

* Update shadowsocks-rust to 1.9.0 (shadowsocks#2622)

* Fix shadowsocks#2638

* Bump version

* Switch to local UDP DNS resolver (shadowsocks#2635)

* Switch to the local UDP DNS resolver

* Update shadowsocks-rust

* Revert the rustup commands

* Fix shadowsocks#2642

* Fix the ByteBuffer allocation

* Update shadowsocks-rust

* Revert to local UDS resolver

Fix shadowsocks#2650

* Check deprecated ciphers (shadowsocks#2651)

* Bump version

* Fix shadowsocks#2301

* Bump version

* Remove the non-ietf chacha20 and salsa20 ciphers

* Fix shadowsocks#2665

* Update dependencies

* Fix deprecation of kotlin extensions

* Remove unused gcm work library for API 23+

* Use work-multiprocess

* Refine code style

* Update dependencies (shadowsocks#2672)

* Update dependencies

* Refine code style

* Bump gradle to 6.8.2

* Drop packet if out of buffer

* Refine error message

* Enlarge the buffer size of a UDP connection

* Bump version

* Ignore all exceptions whilst updating subscriptions

* Refine the JSON config file for ss-rust 1.10

* Refine the code style

* Update shadowsocks-rust to v1.10.3

* Fix shadowsocks#2679

* Update dependencies

Fixes shadowsocks#2699.

* Fix deprecation of adapterPosition

* Bump plugin to 2.0.1

* Migrate AlertDialogFragment to fragment result API

* Remove useless dependency update

* Migrate the rest to fragment result API

* Remove unused field

* Prevent crashing on shitty ROMs

* Add search tool for profiles (shadowsocks#2682)

* Suppress logging unsupported query type errors

* Ignore if connection was prematurely closed

* Use default udp_timeout=300 instead

Refine shadowsocks#2625.

* Mark underlyingNetwork as volatile

Attempts at addressing shadowsocks#2667.

* Fixed required targetFragments for preference

* Downgrade gradle plugin

* Update shadowsocks-rust and add back some ciphers

Fix shadowsocks#2705 and shadowsocks#2663.

* Update dependencies

* Check plugin properly

Fix shadowsocks#2667.

* Check crypto before init

* Make code style more Kotlin

* Update core and remove workaround

* Refine search to respect locale

* Double fixes touch target

* Resolve server name dynamically always (shadowsocks#2731)

Fixes shadowsocks#2722.

* Bump version

* Downgrade fragment to 1.3.2

Fixes shadowsocks#2733.

* Make plugin library depend on minimum version instead

* Enable Parallel GC

* Set useLegacyPackaging

* Update the maven publish plugin (shadowsocks#2734)

1. Remove the unnecessary custom URL
2. Replace jcenter with mavenCentral

* Handle illegal profiles properly

* Fix windows build failed shadowsocks#2666 shadowsocks#2711

* Allowed build under msys2 or cygwin

* Update dependencies

* Bring back semitransparent TV app via build variants (shadowsocks#2741)

This creates two variants for tv, freedom containing the original design, and google containing one matching Google's nonsense guideline. The former should be published on GitHub and elsewhere.

Revert "Revert "Revert "Revert "Revert "Make app fullscreen to match guidelines"""""

This reverts commit 0c67ac6.

* Fix typo

* Show full proxied apps mode to compensate for missing title

* Use MaterialAlertDialogBuilder

* Add progress indicator to ServiceButton

* Remove elevation from progress

* Only show progress for connecting

* Only show progress when connecting is taking too long

* Bump version

* Update dependencies

* Update sdk to S

* Use registerBestMatchingNetworkCallback

* Use OsConstants.ENONET

* Deal with new requirements

* Use main thread for default network callback on API 26+

* Remove unused code

* Fix duplicate authentication

* Update dependencies

* Bump version

* More stupid Android 6 bugs

* Update dependencies

* Downgrade leanback-preference

* Update to API 31

* Remove STORAGE permission on Android 10+

* Update dnsjava

* Ensure that redirects are always followed

Fixes shadowsocks#2786, shadowsocks#2791.

* Update dependencies

* Update to AGP 7.0.2

* Fix lint

* Update dependencies

* Fix shadowsocks#2803

* Remove extra file

* v5.2.6

* Revert "Show full proxied apps mode to compensate for missing title"

This reverts commit d21cf7b.

Fixes shadowsocks#2806.

* Add linkedin.com to gfwlist

* Fix Codacy badge

* Update dependencies

* Update .gitignore

ignore DS_Store

* Just to satisfy the obsessive-compulsive disorder :-)

* Update shadowsocks-rust

Update rust  dependency

* add new ciphers feature, and reorder cipher name

* Modify acl rules

* Update config.yml

try to fix up the rust build error

* enable armv8, neon feathures for hardware acceleration.

* Fix the missing springAnimator

* Update shadowsocks-rust to v1.15.0-alpha.5

* Bump version

* Update translations

Fixes shadowsocks#2867.

* Add German and Ukrainian translations

* Misc fixes

* Fix order

* Use system resolver

* Update dependencies

* Declare POST_NOTIFICATIONS

* Protect sensitive profile information when copied

* Add support for monochrome icons (not recommended)

* Declare supported languages

* Require authentication for closing service

* Support skipping animation in StatsBar

* Downgrade AGP

* Misc fixes

* Turn on fun switch

* Remove useless code

* Bump version

* Fix the compile error shadowsocks#2930 (shadowsocks#2935)

Make checking python version code compatible with windows and *nix

Redefine the python version detection code

Co-authored-by: Mygod <contact-github@mygod.be>
Co-authored-by: Mygod <contact-git@mygod.be>
Co-authored-by: Max Lv <max.c.lv@gmail.com>
Co-authored-by: cyber386 <62885475+cyber386@users.noreply.github.com>
Co-authored-by: Goooler <wangzongler@gmail.com>
Co-authored-by: SquallATF <squallatf@gmail.com>
Co-authored-by: dev4u <dev4u@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants