Commit a6ac6ea8 authored by Mygod's avatar Mygod

Revert re2j

parent b7520896
...@@ -65,7 +65,6 @@ dependencies { ...@@ -65,7 +65,6 @@ dependencies {
api 'com.google.code.gson:gson:2.8.6' api 'com.google.code.gson:gson:2.8.6'
api 'com.google.firebase:firebase-analytics:17.2.1' api 'com.google.firebase:firebase-analytics:17.2.1'
api 'com.google.firebase:firebase-config:19.0.4' api 'com.google.firebase:firebase-config:19.0.4'
api 'com.google.re2j:re2j:1.3'
api 'dnsjava:dnsjava:2.1.9' api 'dnsjava:dnsjava:2.1.9'
api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
api "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$coroutinesVersion" api "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$coroutinesVersion"
......
...@@ -21,39 +21,29 @@ ...@@ -21,39 +21,29 @@
package com.github.shadowsocks.acl package com.github.shadowsocks.acl
import com.github.shadowsocks.net.Subnet import com.github.shadowsocks.net.Subnet
import com.google.re2j.Pattern
import java.net.Inet4Address import java.net.Inet4Address
import java.net.Inet6Address import java.net.Inet6Address
class AclMatcher(id: String) { class AclMatcher(id: String) {
private val subnetsIpv4: List<Subnet.Immutable> private val subnetsIpv4: List<Subnet.Immutable>
private val subnetsIpv6: List<Subnet.Immutable> private val subnetsIpv6: List<Subnet.Immutable>
private val bypassDomains: Pattern? private val bypassDomains = mutableListOf<Regex>()
private val proxyDomains: Pattern? private val proxyDomains = mutableListOf<Regex>()
private val bypass: Boolean private val bypass: Boolean
init { init {
val bypassBuilder = StringBuilder() val (bypass, subnets) = Acl.parse(Acl.getFile(id).bufferedReader(), { bypassDomains.add(it.toRegex()) },
val proxyBuilder = StringBuilder() { proxyDomains.add(it.toRegex()) })
val (bypass, subnets) = Acl.parse(Acl.getFile(id).bufferedReader(), {
if (bypassBuilder.isNotEmpty()) bypassBuilder.append('|')
bypassBuilder.append(it)
}, {
if (proxyBuilder.isNotEmpty()) proxyBuilder.append('|')
proxyBuilder.append(it)
})
subnetsIpv4 = subnets.filter { it.address is Inet4Address }.map { it.toImmutable() } subnetsIpv4 = subnets.filter { it.address is Inet4Address }.map { it.toImmutable() }
subnetsIpv6 = subnets.filter { it.address is Inet6Address }.map { it.toImmutable() } subnetsIpv6 = subnets.filter { it.address is Inet6Address }.map { it.toImmutable() }
bypassDomains = if (bypassBuilder.isEmpty()) null else Pattern.compile(bypassBuilder.toString())
proxyDomains = if (proxyBuilder.isEmpty()) null else Pattern.compile(proxyBuilder.toString())
this.bypass = bypass this.bypass = bypass
} }
fun shouldBypassIpv4(ip: ByteArray) = bypass xor subnetsIpv4.any { it.matches(ip) } fun shouldBypassIpv4(ip: ByteArray) = bypass xor subnetsIpv4.any { it.matches(ip) }
fun shouldBypassIpv6(ip: ByteArray) = bypass xor subnetsIpv6.any { it.matches(ip) } fun shouldBypassIpv6(ip: ByteArray) = bypass xor subnetsIpv6.any { it.matches(ip) }
fun shouldBypass(host: String): Boolean? { fun shouldBypass(host: String): Boolean? {
if (bypassDomains?.matches(host) == true) return true if (bypassDomains.any { it.matches(host) }) return true
if (proxyDomains?.matches(host) == false) return false if (proxyDomains.any { it.matches(host) }) return false
return null return null
} }
} }
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