Fix byte orders in mac address
This commit is contained in:
@@ -21,18 +21,6 @@ value class MacAddressCompat(val addr: Long) {
|
|||||||
val ALL_ZEROS_ADDRESS = MacAddressCompat(0)
|
val ALL_ZEROS_ADDRESS = MacAddressCompat(0)
|
||||||
val ANY_ADDRESS = MacAddressCompat(2)
|
val ANY_ADDRESS = MacAddressCompat(2)
|
||||||
|
|
||||||
fun bytesToString(addr: ByteArray) = when (addr.size) {
|
|
||||||
ETHER_ADDR_LEN -> addr.joinToString(":") { "%02x".format(it) }
|
|
||||||
8 -> {
|
|
||||||
require(addr.take(2).all { it == 0.toByte() }) {
|
|
||||||
"Unrecognized padding " + addr.joinToString(":") { "%02x".format(it) }
|
|
||||||
}
|
|
||||||
addr.drop(2).joinToString(":") { "%02x".format(it) }
|
|
||||||
}
|
|
||||||
else -> throw IllegalArgumentException(addr.joinToString(":") { "%02x".format(it) } +
|
|
||||||
" was not a valid MAC address")
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a MacAddress from the given byte array representation.
|
* Creates a MacAddress from the given byte array representation.
|
||||||
* A valid byte array representation for a MacAddress is a non-null array of length 6.
|
* A valid byte array representation for a MacAddress is a non-null array of length 6.
|
||||||
@@ -41,13 +29,21 @@ value class MacAddressCompat(val addr: Long) {
|
|||||||
* @return the MacAddress corresponding to the given byte array representation.
|
* @return the MacAddress corresponding to the given byte array representation.
|
||||||
* @throws IllegalArgumentException if the given byte array is not a valid representation.
|
* @throws IllegalArgumentException if the given byte array is not a valid representation.
|
||||||
*/
|
*/
|
||||||
fun fromBytes(addr: ByteArray): MacAddressCompat {
|
fun fromBytes(addr: ByteArray) = ByteBuffer.allocate(Long.SIZE_BYTES).run {
|
||||||
require(addr.size == ETHER_ADDR_LEN) { addr.joinToString() + " was not a valid MAC address" }
|
order(ByteOrder.LITTLE_ENDIAN)
|
||||||
return ByteBuffer.allocate(Long.SIZE_BYTES).run {
|
put(when (addr.size) {
|
||||||
put(addr)
|
ETHER_ADDR_LEN -> addr
|
||||||
rewind()
|
8 -> {
|
||||||
MacAddressCompat(long)
|
require(addr.take(2).all { it == 0.toByte() }) {
|
||||||
}
|
"Unrecognized padding " + addr.joinToString(":") { "%02x".format(it) }
|
||||||
|
}
|
||||||
|
addr.drop(2).toByteArray()
|
||||||
|
}
|
||||||
|
else -> throw IllegalArgumentException(addr.joinToString(":") { "%02x".format(it) } +
|
||||||
|
" was not a valid MAC address")
|
||||||
|
})
|
||||||
|
rewind()
|
||||||
|
MacAddressCompat(long)
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Creates a MacAddress from the given String representation. A valid String representation
|
* Creates a MacAddress from the given String representation. A valid String representation
|
||||||
|
|||||||
@@ -91,12 +91,10 @@ fun makeMacSpan(mac: String) = if (app.hasTouch) SpannableString(mac).apply {
|
|||||||
|
|
||||||
fun NetworkInterface.formatAddresses(macOnly: Boolean = false) = SpannableStringBuilder().apply {
|
fun NetworkInterface.formatAddresses(macOnly: Boolean = false) = SpannableStringBuilder().apply {
|
||||||
try {
|
try {
|
||||||
val address = hardwareAddress
|
val address = hardwareAddress?.let(MacAddressCompat::fromBytes)
|
||||||
if (address != null && try {
|
if (address != null && address != MacAddressCompat.ANY_ADDRESS) appendLine(makeMacSpan(address.toString()))
|
||||||
MacAddressCompat.fromBytes(address) == MacAddressCompat.ANY_ADDRESS
|
} catch (e: IllegalArgumentException) {
|
||||||
} catch (_: IllegalArgumentException) { true }) {
|
Timber.w(e)
|
||||||
appendLine(makeMacSpan(MacAddressCompat.bytesToString(address)))
|
|
||||||
}
|
|
||||||
} catch (_: SocketException) { }
|
} catch (_: SocketException) { }
|
||||||
if (!macOnly) for (address in interfaceAddresses) {
|
if (!macOnly) for (address in interfaceAddresses) {
|
||||||
append(makeIpSpan(address.address))
|
append(makeIpSpan(address.address))
|
||||||
|
|||||||
Reference in New Issue
Block a user