diff --git a/Source/Core/Common/Network.cpp b/Source/Core/Common/Network.cpp index a5d6eae1e7..aed767a85e 100644 --- a/Source/Core/Common/Network.cpp +++ b/Source/Core/Common/Network.cpp @@ -86,6 +86,21 @@ std::optional StringToMacAddress(std::string_view mac_string) return std::make_optional(mac); } +std::string BluetoothAddressToString(BluetoothAddress bdaddr) +{ + std::ranges::reverse(bdaddr); + return MacAddressToString(std::bit_cast(bdaddr)); +} + +std::optional StringToBluetoothAddress(std::string_view str) +{ + auto result = StringToMacAddress(str); + if (!result) + return std::nullopt; + std::ranges::reverse(*result); + return std::bit_cast(*result); +} + EthernetHeader::EthernetHeader() = default; EthernetHeader::EthernetHeader(u16 ether_type) : ethertype(htons(ether_type)) diff --git a/Source/Core/Common/Network.h b/Source/Core/Common/Network.h index 87f1f3a444..8f446d7a38 100644 --- a/Source/Core/Common/Network.h +++ b/Source/Core/Common/Network.h @@ -36,6 +36,12 @@ enum DHCPConst }; using MACAddress = std::array; + +// Note: Bluetooth address display order is reverse of the storage order. +struct BluetoothAddress : std::array +{ +}; + constexpr std::size_t IPV4_ADDR_LEN = 4; using IPAddress = std::array; constexpr IPAddress IP_ADDR_ANY = {0, 0, 0, 0}; @@ -259,8 +265,13 @@ struct NetworkErrorState }; MACAddress GenerateMacAddress(MACConsumer type); + std::string MacAddressToString(const MACAddress& mac); std::optional StringToMacAddress(std::string_view mac_string); + +std::string BluetoothAddressToString(BluetoothAddress bdaddr); +std::optional StringToBluetoothAddress(std::string_view str); + u16 ComputeNetworkChecksum(const void* data, u16 length, u32 initial_value = 0); u16 ComputeTCPNetworkChecksum(const IPAddress& from, const IPAddress& to, const void* data, u16 length, u8 protocol);