diff options
| author | Matthew Parlane <parlane@gmail.com> | 2014-03-07 07:09:12 +1300 |
|---|---|---|
| committer | Matthew Parlane <parlane@gmail.com> | 2014-03-07 21:40:59 +1300 |
| commit | 57f2eda130492b5e8bd4b80c995b8133d969b926 (patch) | |
| tree | 7350558d8bcad52604d3e658333d57dadccd087c /Source/Core/Common/Network.cpp | |
| parent | c7b8c75d383311a2b5abe12ce9ad535f40b6ebce (diff) | |
Fix MAC address reading on Windows.
Diffstat (limited to 'Source/Core/Common/Network.cpp')
| -rw-r--r-- | Source/Core/Common/Network.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/Source/Core/Common/Network.cpp b/Source/Core/Common/Network.cpp new file mode 100644 index 0000000000..6af6da7ffa --- /dev/null +++ b/Source/Core/Common/Network.cpp @@ -0,0 +1,70 @@ +// Copyright 2013 Dolphin Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include <cctype> +#include <ctime> + +#include "Common/Network.h" +#include "Common/StringUtil.h" + +void GenerateMacAddress(const MACConsumer type, u8* mac) +{ + memset(mac, 0, MAC_ADDRESS_SIZE); + + u8 const oui_bba[] = { 0x00, 0x09, 0xbf }; + u8 const oui_ios[] = { 0x00, 0x17, 0xab }; + + switch (type) + { + case BBA: + memcpy(mac, oui_bba, 3); + break; + case IOS: + memcpy(mac, oui_ios, 3); + break; + } + + srand((unsigned int)time(nullptr)); + + u8 id[3] = + { + (u8)rand(), + (u8)rand(), + (u8)rand() + }; + + memcpy(&mac[3], id, 3); +} + +std::string MacAddressToString(const u8* mac) +{ + return StringFromFormat("%02x:%02x:%02x:%02x:%02x:%02x", + mac[0], mac[1], mac[2], + mac[3], mac[4], mac[5]); +} + +bool StringToMacAddress(const std::string& mac_string, u8* mac) +{ + bool success = false; + if (!mac_string.empty()) + { + int x = 0; + memset(mac, 0, MAC_ADDRESS_SIZE); + + for (size_t i = 0; i < mac_string.size() && x < (MAC_ADDRESS_SIZE*2); ++i) + { + char c = tolower(mac_string.at(i)); + if (c >= '0' && c <= '9') + { + mac[x / 2] |= (c - '0') << ((x & 1) ? 0 : 4); ++x; + } + else if (c >= 'a' && c <= 'f') + { + mac[x / 2] |= (c - 'a' + 10) << ((x & 1) ? 0 : 4); ++x; + } + } + success = x / 2 == MAC_ADDRESS_SIZE; + } + return success; +} |
