diff --git a/README.md b/README.md index f93bfdc6..ea6a1679 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,6 @@ 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 8015d9b1..6136cf5e 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/IpNeighbour.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/IpNeighbour.kt @@ -33,8 +33,8 @@ data class IpNeighbour(val ip: InetAddress, val dev: String, val lladdr: String, 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 c965ad1f..b214bcc1 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 @@ -80,7 +80,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 f72b02d0..36a9dc5d 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/util/Utils.kt @@ -2,6 +2,8 @@ package be.mygod.vpnhotspot.util import android.content.* import android.os.Build +import android.system.Os +import android.system.OsConstants import android.view.View import android.widget.ImageView import androidx.annotation.DrawableRes @@ -52,12 +54,8 @@ fun NetworkInterface.formatAddresses() = })) .joinToString("\n") -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 parseNumericAddress(address: String?): InetAddress? = + Os.inet_pton(OsConstants.AF_INET, address) ?: Os.inet_pton(OsConstants.AF_INET6, address) fun Context.stopAndUnbind(connection: ServiceConnection) { connection.onServiceDisconnected(null)