diff --git a/README.md b/README.md index 13531a3a..2ab10d81 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,7 @@ API light grey list: * [`Landroid/net/wifi/p2p/WifiP2pManager;->requestPersistentGroupInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$PersistentGroupInfoListener;)V`](https://android.googlesource.com/platform/prebuilts/runtime/+/94fec32/appcompat/hiddenapi-light-greylist.txt#4412) * [`Landroid/net/wifi/p2p/WifiP2pManager;->setWifiP2pChannels(Landroid/net/wifi/p2p/WifiP2pManager$Channel;IILandroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V`](https://android.googlesource.com/platform/prebuilts/runtime/+/94fec32/appcompat/hiddenapi-light-greylist.txt#4416) * [`Landroid/net/wifi/p2p/WifiP2pManager;->startWps(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/WpsInfo;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V`](https://android.googlesource.com/platform/prebuilts/runtime/+/94fec32/appcompat/hiddenapi-light-greylist.txt#4417) +* [`Ljava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress;`](https://android.googlesource.com/platform/prebuilts/runtime/+/94fec32/appcompat/hiddenapi-light-greylist.txt#9800) Unlisted private API: diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/IpNeighbour.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/IpNeighbour.kt index 5b721ca5..05f512df 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/IpNeighbour.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/IpNeighbour.kt @@ -34,8 +34,8 @@ data class IpNeighbour(val ip: InetAddress, val dev: String, val lladdr: Long, v fun parse(line: String): List { return try { val match = parser.matchEntire(line)!! - val ip = parseNumericAddress(match.groupValues[2])!! // by regex, ip is non-empty - val dev = match.groupValues[3] // by regex, dev is non-empty as well + val ip = parseNumericAddress(match.groupValues[2]) // by regex, ip is non-empty + val dev = match.groupValues[3] // by regex, dev is non-empty as well var lladdr = checkLladdrNotLoopback(match.groupValues[5]) // use ARP as fallback if (lladdr.isEmpty()) lladdr = checkLladdrNotLoopback(arp() diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt index 677608e2..3d61b028 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/monitor/TrafficRecorder.kt @@ -75,7 +75,7 @@ object TrafficRecorder { val isReceive = columns[7] == ANYWHERE val isSend = columns[8] == ANYWHERE check(isReceive != isSend) // this check might fail when the user performed an upgrade from 1.x - val ip = parseNumericAddress(columns[if (isReceive) 8 else 7])!! + val ip = parseNumericAddress(columns[if (isReceive) 8 else 7]) val downstream = columns[if (isReceive) 6 else 5] val key = Pair(ip, downstream) val oldRecord = records[key] ?: continue@loop // assuming they're legacy old rules diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt b/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt index bf084bac..7362a22b 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt @@ -2,8 +2,6 @@ package be.mygod.vpnhotspot.util import android.content.* import android.os.Build -import android.system.Os -import android.system.OsConstants import android.text.Spannable import android.text.SpannableString import android.text.SpannableStringBuilder @@ -72,8 +70,12 @@ fun NetworkInterface.formatAddresses() = SpannableStringBuilder().apply { } }.trimEnd() -fun parseNumericAddress(address: String?): InetAddress? = - Os.inet_pton(OsConstants.AF_INET, address) ?: Os.inet_pton(OsConstants.AF_INET6, address) +private val parseNumericAddress by lazy { + InetAddress::class.java.getDeclaredMethod("parseNumericAddress", String::class.java).apply { + isAccessible = true + } +} +fun parseNumericAddress(address: String) = parseNumericAddress.invoke(null, address) as InetAddress fun Context.launchUrl(url: String) { if (app.hasTouch) try {