summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2025-09-22 08:02:01 -0500
committerJordan Woyak <jordan.woyak@gmail.com>2025-10-04 14:51:17 -0500
commitb2fef6ee1fcd820f8bdeee6cc48aa2912d334f72 (patch)
treeaefad7b2c1a4feaea932f5b36fd405d163e124d3 /Source
parentb1e8de82a632f38424fd8acff36cf3db48e9802b (diff)
Common/Network: Add BluetoothAddress struct and string conversion functions.
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Common/Network.cpp15
-rw-r--r--Source/Core/Common/Network.h11
2 files changed, 26 insertions, 0 deletions
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<MACAddress> 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<MACAddress>(bdaddr));
+}
+
+std::optional<BluetoothAddress> StringToBluetoothAddress(std::string_view str)
+{
+ auto result = StringToMacAddress(str);
+ if (!result)
+ return std::nullopt;
+ std::ranges::reverse(*result);
+ return std::bit_cast<BluetoothAddress>(*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<u8, MAC_ADDRESS_SIZE>;
+
+// Note: Bluetooth address display order is reverse of the storage order.
+struct BluetoothAddress : std::array<u8, MAC_ADDRESS_SIZE>
+{
+};
+
constexpr std::size_t IPV4_ADDR_LEN = 4;
using IPAddress = std::array<u8, IPV4_ADDR_LEN>;
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<MACAddress> StringToMacAddress(std::string_view mac_string);
+
+std::string BluetoothAddressToString(BluetoothAddress bdaddr);
+std::optional<BluetoothAddress> 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);