summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorrog <rdragoon@optonline.net>2012-11-14 14:28:38 -0500
committerrog <rdragoon@optonline.net>2012-11-14 14:28:38 -0500
commitf5a3379d712a1a71e5f196aa9d95e1deccec4c6c (patch)
treed00a08c8c2fdb5fe8e0c63892accb7e0764aefca /Source/Core
parent5ce7728b91400f0dbe63d89a67b3b2098ee6a596 (diff)
Add config option for mac address. Fixes issue 5694.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/ConfigManager.cpp2
-rw-r--r--Source/Core/Core/Src/ConfigManager.h1
-rw-r--r--Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp29
3 files changed, 30 insertions, 2 deletions
diff --git a/Source/Core/Core/Src/ConfigManager.cpp b/Source/Core/Core/Src/ConfigManager.cpp
index 0c4fa04566..dbb9bf52b6 100644
--- a/Source/Core/Core/Src/ConfigManager.cpp
+++ b/Source/Core/Core/Src/ConfigManager.cpp
@@ -155,6 +155,7 @@ void SConfig::SaveSettings()
ini.Set("General", "RecursiveGCMPaths", m_RecursiveISOFolder);
ini.Set("General", "NANDRoot", m_NANDPath);
+ ini.Set("General", "WirelessMac", m_WirelessMac);
// Interface
ini.Set("Interface", "ConfirmStop", m_LocalCoreStartupParameter.bConfirmStop);
@@ -282,6 +283,7 @@ void SConfig::LoadSettings()
m_NANDPath = File::GetUserPath(D_WIIROOT_IDX, m_NANDPath);
DiscIO::cUIDsys::AccessInstance().UpdateLocation();
DiscIO::CSharedContent::AccessInstance().UpdateLocation();
+ ini.Get("General", "WirelessMac", &m_WirelessMac);
}
{
diff --git a/Source/Core/Core/Src/ConfigManager.h b/Source/Core/Core/Src/ConfigManager.h
index 0c8f3f1af1..ae0dab119a 100644
--- a/Source/Core/Core/Src/ConfigManager.h
+++ b/Source/Core/Core/Src/ConfigManager.h
@@ -75,6 +75,7 @@ struct SConfig : NonCopyable
bool m_ListKorea;
bool m_ListTaiwan;
bool m_ListUnknown;
+ std::string m_WirelessMac;
SysConf* m_SYSCONF;
diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp
index 75db39b994..df058a470d 100644
--- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp
+++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.cpp
@@ -46,6 +46,7 @@ it failed)
#endif
#include "WII_IPC_HLE_Device_net.h"
+#include "../ConfigManager.h"
#include "FileUtil.h"
#include <stdio.h>
#include <string>
@@ -276,11 +277,36 @@ bool CWII_IPC_HLE_Device_net_ncd_manage::IOCtlV(u32 _CommandAddress)
// No idea why the fifth and sixth bytes are left untouched.
{
// hardcoded address as a fallback
- // TODO: Make this configurable? Different MAC addresses MIGHT be needed for requesting a user id or encrypting content with NWC24
const u8 default_address[] = { 0x00, 0x19, 0x1e, 0xfd, 0x71, 0x84 };
INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_GETWIRELESSMACADDRESS");
+ if (!SConfig::GetInstance().m_WirelessMac.empty())
+ {
+ int x = 0;
+ int tmpaddress[6];
+ for (int i = 0; i < SConfig::GetInstance().m_WirelessMac.length() && x < 6; i++)
+ {
+ if (SConfig::GetInstance().m_WirelessMac[i] == ':' || SConfig::GetInstance().m_WirelessMac[i] == '-')
+ continue;
+
+ std::stringstream ss;
+ ss << std::hex << SConfig::GetInstance().m_WirelessMac[i];
+ if (SConfig::GetInstance().m_WirelessMac[i+1] != ':' && SConfig::GetInstance().m_WirelessMac[i+1] != '-')
+ {
+ ss << std::hex << SConfig::GetInstance().m_WirelessMac[i+1];
+ i++;
+ }
+ ss >> tmpaddress[x];
+ x++;
+ }
+ u8 address[6];
+ for (int i = 0; i < 6;i++)
+ address[i] = tmpaddress[i];
+ Memory::WriteBigEData(address, CommandBuffer.PayloadBuffer.at(1).m_Address, 4);
+ break;
+ }
+
#if defined(__linux__)
const char *check_devices[3] = { "wlan0", "ath0", "eth0" };
int fd, ret;
@@ -324,7 +350,6 @@ bool CWII_IPC_HLE_Device_net_ncd_manage::IOCtlV(u32 _CommandAddress)
if (SUCCEEDED(ret)) Memory::WriteBigEData(adapter_info->Address, CommandBuffer.PayloadBuffer.at(1).m_Address, 4);
else Memory::WriteBigEData(default_address, CommandBuffer.PayloadBuffer.at(1).m_Address, 4);
-
delete[] adapter_info;
#else
Memory::WriteBigEData(default_address, CommandBuffer.PayloadBuffer.at(1).m_Address, 4);