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 a55e92dc86..5b698ceb03 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 @@ -96,7 +96,7 @@ CWII_IPC_HLE_Device_net_kd_request::~CWII_IPC_HLE_Device_net_kd_request() bool CWII_IPC_HLE_Device_net_kd_request::Open(u32 _CommandAddress, u32 _Mode) { - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: Open"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: Open"); Memory::Write_U32(GetDeviceID(), _CommandAddress + 4); m_Active = true; return true; @@ -104,7 +104,7 @@ bool CWII_IPC_HLE_Device_net_kd_request::Open(u32 _CommandAddress, u32 _Mode) bool CWII_IPC_HLE_Device_net_kd_request::Close(u32 _CommandAddress, bool _bForce) { - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: Close"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: Close"); if (!_bForce) Memory::Write_U32(0, _CommandAddress + 4); m_Active = false; @@ -124,37 +124,37 @@ bool CWII_IPC_HLE_Device_net_kd_request::IOCtl(u32 _CommandAddress) { case IOCTL_NWC24_SUSPEND_SCHEDULAR: // NWC24iResumeForCloseLib from NWC24SuspendScheduler (Input: none, Output: 32 bytes) - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_SUSPEND_SCHEDULAR - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_SUSPEND_SCHEDULAR - NI"); break; case IOCTL_NWC24_EXEC_TRY_SUSPEND_SCHEDULAR: // NWC24iResumeForCloseLib - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_EXEC_TRY_SUSPEND_SCHEDULAR - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_EXEC_TRY_SUSPEND_SCHEDULAR - NI"); break; case IOCTL_NWC24_EXEC_RESUME_SCHEDULAR : // NWC24iResumeForCloseLib - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_EXEC_RESUME_SCHEDULAR - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_EXEC_RESUME_SCHEDULAR - NI"); break; case IOCTL_NWC24_STARTUP_SOCKET: // NWC24iStartupSocket Memory::Write_U32(0, BufferOut); Memory::Write_U32(0, BufferOut+4); ReturnValue = 0; - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_STARTUP_SOCKET - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_STARTUP_SOCKET - NI"); break; case IOCTL_NWC24_CLEANUP_SOCKET: Memory::Memset(BufferOut, 0, BufferOutSize); - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_CLEANUP_SOCKET - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_CLEANUP_SOCKET - NI"); break; case IOCTL_NWC24_LOCK_SOCKET: // WiiMenu - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_LOCK_SOCKET - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_LOCK_SOCKET - NI"); break; case IOCTL_NWC24_UNLOCK_SOCKET: - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_UNLOCK_SOCKET - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_UNLOCK_SOCKET - NI"); break; case IOCTL_NWC24_REQUEST_GENERATED_USER_ID: // (Input: none, Output: 32 bytes) - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_REQUEST_GENERATED_USER_ID"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_REQUEST_GENERATED_USER_ID"); //Memory::Write_U32(0xFFFFFFDC, BufferOut); //Memory::Write_U32(0x00050495, BufferOut + 4); //Memory::Write_U32(0x90CFBF35, BufferOut + 8); @@ -163,20 +163,20 @@ bool CWII_IPC_HLE_Device_net_kd_request::IOCtl(u32 _CommandAddress) break; case IOCTL_NWC24_GET_SCHEDULAR_STAT: - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_GET_SCHEDULAR_STAT - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_GET_SCHEDULAR_STAT - NI"); break; case IOCTL_NWC24_SAVE_MAIL_NOW: - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_SAVE_MAIL_NOW - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_SAVE_MAIL_NOW - NI"); break; case IOCTL_NWC24_REQUEST_SHUTDOWN: // if ya set the IOS version to a very high value this happens ... - INFO_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN - NI"); + WARN_LOG(WII_IPC_NET, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN - NI"); break; default: - INFO_LOG(WII_IPC_NET, "/dev/net/kd/request::IOCtl request 0x%x (BufferIn: (%08x, %i), BufferOut: (%08x, %i)", + WARN_LOG(WII_IPC_NET, "/dev/net/kd/request::IOCtl request 0x%x (BufferIn: (%08x, %i), BufferOut: (%08x, %i)", Parameter, BufferIn, BufferInSize, BufferOut, BufferOutSize); break; } @@ -196,10 +196,12 @@ CWII_IPC_HLE_Device_net_ncd_manage::CWII_IPC_HLE_Device_net_ncd_manage(u32 _Devi // store network configuration const std::string filename(File::GetUserPath(D_WIIUSER_IDX) + "shared2/sys/net/02/config.dat"); + isSet = false; + File::IOFile file(filename, "rb"); if (!file.ReadBytes(&m_Ifconfig, 1)) { - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: Failed to load /shared2/sys/net/02/config.dat, using dummy configuration"); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: Failed to load /shared2/sys/net/02/config.dat, using dummy configuration"); // wired connection on IP 192.168.1.1 using gateway 192.168.1.2 memset(&m_Ifconfig, 0, sizeof(m_Ifconfig)); @@ -257,6 +259,9 @@ CWII_IPC_HLE_Device_net_ncd_manage::CWII_IPC_HLE_Device_net_ncd_manage(u32 _Devi m_Ifconfig.connection[2].dns1[2] = 8; m_Ifconfig.connection[2].dns1[3] = 8; + + File::IOFile outConfig(filename, "wb"); + outConfig.WriteBytes(&m_Ifconfig, sizeof(m_Ifconfig)); } } @@ -266,7 +271,7 @@ CWII_IPC_HLE_Device_net_ncd_manage::~CWII_IPC_HLE_Device_net_ncd_manage() bool CWII_IPC_HLE_Device_net_ncd_manage::Open(u32 _CommandAddress, u32 _Mode) { - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: Open"); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: Open"); Memory::Write_U32(GetDeviceID(), _CommandAddress+4); m_Active = true; return true; @@ -274,7 +279,7 @@ bool CWII_IPC_HLE_Device_net_ncd_manage::Open(u32 _CommandAddress, u32 _Mode) bool CWII_IPC_HLE_Device_net_ncd_manage::Close(u32 _CommandAddress, bool _bForce) { - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: Close"); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: Close"); if (!_bForce) Memory::Write_U32(0, _CommandAddress + 4); m_Active = false; @@ -288,17 +293,19 @@ bool CWII_IPC_HLE_Device_net_ncd_manage::IOCtlV(u32 _CommandAddress) switch (CommandBuffer.Parameter) { + case IOCTLV_NCD_GETCONFIG: // 7004 out, 32 out + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_GETCONFIG"); + ReturnValue = -1; + break; case IOCTLV_NCD_READCONFIG: // 7004 Out, 32 Out. 2nd, 3rd - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_READCONFIG"); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_READCONFIG"); //break; - case IOCTLV_NCD_GETCONFIG: // 7004 out, 32 out // first out buffer gets filled with contents of /shared2/sys/net/02/config.dat // TODO: What's the second output buffer for? { - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_GETCONFIG"); - // fill output buffer, taking care of endianness + // fill output buffer, taking care of endianness, every day, every way u32 addr = CommandBuffer.PayloadBuffer.at(0).m_Address; u32 _BufferOut2 = CommandBuffer.PayloadBuffer.at(1).m_Address; @@ -337,12 +344,12 @@ bool CWII_IPC_HLE_Device_net_ncd_manage::IOCtlV(u32 _CommandAddress) status = 5; if (param1[4] == 0) status = 2;*/ - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_SETCONFIG"); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_SETCONFIG"); break; case IOCTLV_NCD_GETLINKSTATUS: // 32 Out. 5th { - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_GETLINKSTATUS"); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_GETLINKSTATUS"); Memory::Write_U32(0x00000000, CommandBuffer.PayloadBuffer[0].m_Address); Memory::Write_U32(status, CommandBuffer.PayloadBuffer[0].m_Address+4); break; @@ -350,14 +357,14 @@ bool CWII_IPC_HLE_Device_net_ncd_manage::IOCtlV(u32 _CommandAddress) case IOCTLV_NCD_GETWIRELESSMACADDRESS: // 32 Out, 6 Out. 1st { - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_GETWIRELESSMACADDRESS"); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE: IOCTLV_NCD_GETWIRELESSMACADDRESS"); Memory::Write_U32(0, CommandBuffer.PayloadBuffer.at(0).m_Address); Memory::WriteBigEData(default_address, CommandBuffer.PayloadBuffer.at(1).m_Address, 6); break; } default: - INFO_LOG(WII_IPC_NET, "NET_NCD_MANAGE IOCtlV: %#x", CommandBuffer.Parameter); + WARN_LOG(WII_IPC_NET, "NET_NCD_MANAGE IOCtlV: %#x", CommandBuffer.Parameter); break; } @@ -372,7 +379,7 @@ CWII_IPC_HLE_Device_net_ip_top::CWII_IPC_HLE_Device_net_ip_top(u32 _DeviceID, co { #ifdef _WIN32 int ret = WSAStartup(MAKEWORD(2,2), &InitData); - INFO_LOG(WII_IPC_NET, "WSAStartup: %d", ret); + WARN_LOG(WII_IPC_NET, "WSAStartup: %d", ret); #endif } @@ -385,7 +392,7 @@ CWII_IPC_HLE_Device_net_ip_top::~CWII_IPC_HLE_Device_net_ip_top() bool CWII_IPC_HLE_Device_net_ip_top::Open(u32 _CommandAddress, u32 _Mode) { - INFO_LOG(WII_IPC_NET, "NET_IP_TOP: Open"); + WARN_LOG(WII_IPC_NET, "NET_IP_TOP: Open"); Memory::Write_U32(GetDeviceID(), _CommandAddress+4); m_Active = true; return true; @@ -393,7 +400,7 @@ bool CWII_IPC_HLE_Device_net_ip_top::Open(u32 _CommandAddress, u32 _Mode) bool CWII_IPC_HLE_Device_net_ip_top::Close(u32 _CommandAddress, bool _bForce) { - INFO_LOG(WII_IPC_NET, "NET_IP_TOP: Close"); + WARN_LOG(WII_IPC_NET, "NET_IP_TOP: Close"); if (!_bForce) Memory::Write_U32(0, _CommandAddress + 4); m_Active = false; @@ -491,7 +498,7 @@ static int getNetErrorCode(int ret, std::string caller, bool isRW) return -1; } #else - INFO_LOG(WII_IPC_NET, "%s failed with error %d: %s, ret= %d\n", + WARN_LOG(WII_IPC_NET, "%s failed with error %d: %s, ret= %d\n", caller.c_str(), 0x1337, "hmm", ret); return ret; #endif @@ -553,7 +560,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, switch (_Command) { case IOCTL_SO_STARTUP: - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_STARTUP " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_STARTUP " "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", _BufferIn, BufferInSize, _BufferOut, BufferOutSize); break; @@ -582,7 +589,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, int ret = connect(Common::swap32(params.socket), (struct sockaddr *) &serverAddr, sizeof(serverAddr)); ret = getNetErrorCode(ret, "SO_CONNECT", false); - INFO_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request IOCTL_SO_CONNECT (%08x, %s:%d)", + WARN_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request IOCTL_SO_CONNECT (%08x, %s:%d)", Common::swap32(params.socket), inet_ntoa(serverAddr.sin_addr), Common::swap16(serverAddr.sin_port)); return ret; @@ -591,7 +598,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, case IOCTL_SO_SHUTDOWN: { - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_SHUTDOWN " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_SHUTDOWN " "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", _BufferIn, BufferInSize, _BufferOut, BufferOutSize); @@ -605,7 +612,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, case IOCTL_SO_CLOSE: { u32 sock = Memory::Read_U32(_BufferIn); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_CLOSE (%08x)", sock); + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_CLOSE (%08x)", sock); #ifdef _WIN32 u32 ret = closesocket(sock); @@ -623,7 +630,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, u32 TYPE = Memory::Read_U32(_BufferIn + 0x04); u32 PROT = Memory::Read_U32(_BufferIn + 0x08); u32 s = (u32)socket(AF, TYPE, PROT); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_SOCKET " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_SOCKET " "Socket: %08x (%d,%d,%d), BufferIn: (%08x, %i), BufferOut: (%08x, %i)", s, AF, TYPE, PROT, _BufferIn, BufferInSize, _BufferOut, BufferOutSize); return getNetErrorCode(s, "SO_SOCKET", false); @@ -641,9 +648,9 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, address.sin_port = addrPC.sin_port; int ret = bind(Common::swap32(addr->socket), (sockaddr*)&address, sizeof(address)); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_BIND (%s:%d) " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_BIND (%s:%d) = %d " "Socket: %08X, BufferIn: (%08x, %i), BufferOut: (%08x, %i)", - inet_ntoa(address.sin_addr), Common::swap16(address.sin_port), + inet_ntoa(address.sin_addr), Common::swap16(address.sin_port), ret, Common::swap32(addr->socket), _BufferIn, BufferInSize, _BufferOut, BufferOutSize); return getNetErrorCode(ret, "SO_BIND", false); @@ -652,7 +659,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, case IOCTL_SO_LISTEN: { - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_LISTEN " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_LISTEN " "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", _BufferIn, BufferInSize, _BufferOut, BufferOutSize); @@ -665,7 +672,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, case IOCTL_SO_ACCEPT: { - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_ACCEPT " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_ACCEPT " "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", _BufferIn, BufferInSize, _BufferOut, BufferOutSize); @@ -683,7 +690,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, u32 level = Memory::Read_U32(_BufferOut + 4); u32 optname = Memory::Read_U32(_BufferOut + 8); - INFO_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request IOCTL_SO_GETSOCKOPT(%08x, %08x, %08x)" + WARN_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request IOCTL_SO_GETSOCKOPT(%08x, %08x, %08x)" "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", sock, level, optname, _BufferIn, BufferInSize, _BufferOut, BufferOutSize); @@ -703,7 +710,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, if(optname == 0x1007){ s32 errorcode = Memory::Read_U32(_BufferOut + 0x10); - INFO_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request IOCTL_SO_GETSOCKOPT error code = %i", errorcode); + WARN_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request IOCTL_SO_GETSOCKOPT error code = %i", errorcode); } return ret; } @@ -721,7 +728,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, if (level == 6 && (optname == 0x2005 || optname == 0x2001)){ return 0; } - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_SETSOCKOPT(%08x, %08x, %08x, %08x) " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_SETSOCKOPT(%08x, %08x, %08x, %08x) " "BufferIn: (%08x, %i), BufferOut: (%08x, %i)" "%02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx %02hhx", S, level, optname, optlen, _BufferIn, BufferInSize, _BufferOut, BufferOutSize, optval[0], optval[1], optval[2], optval[3], optval[4], optval[5], optval[6], optval[7], optval[8], optval[9], optval[10], optval[11], optval[12], optval[13], optval[14], optval[15], optval[16], optval[17], optval[18], optval[19]); @@ -739,7 +746,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, u32 cmd = Memory::Read_U32(_BufferIn + 4); u32 arg = Memory::Read_U32(_BufferIn + 8); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_FCNTL(%08X, %08X) " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_FCNTL(%08X, %08X) " "Socket: %08x, BufferIn: (%08x, %i), BufferOut: (%08x, %i)", cmd, arg, sock, _BufferIn, BufferInSize, _BufferOut, BufferOutSize); @@ -749,19 +756,19 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, #define F_NONBLOCK 4 if (cmd == F_GETFL) { - INFO_LOG(WII_IPC_NET, "F_GETFL WTF?"); + WARN_LOG(WII_IPC_NET, "F_GETFL WTF?"); } else if (cmd == F_SETFL) { u_long iMode = 0; - if (arg & F_NONBLOCK) + //if (arg & F_NONBLOCK) iMode = 1; int ioctlret = ioctlsocket(sock, FIONBIO, &iMode); return getNetErrorCode(ioctlret, "SO_FCNTL", false); } else { - INFO_LOG(WII_IPC_NET, "UNKNOWN WTF?"); + WARN_LOG(WII_IPC_NET, "UNKNOWN WTF?"); } return 0; #else @@ -773,7 +780,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, { u32 sock = Memory::Read_U32(_BufferIn); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_GETSOCKNAME " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_GETSOCKNAME " "Socket: %08X, BufferIn: (%08x, %i), BufferOut: (%08x, %i)", sock, _BufferIn, BufferInSize, _BufferOut, BufferOutSize); @@ -789,23 +796,24 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, } case IOCTL_SO_GETHOSTID: - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_GETHOSTID " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_GETHOSTID " "(BufferIn: (%08x, %i), BufferOut: (%08x, %i)", _BufferIn, BufferInSize, _BufferOut, BufferOutSize); return 192 << 24 | 168 << 16 | 1 << 8 | 150; case IOCTL_SO_INETATON: { - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_INETATON " - "%s, BufferIn: (%08x, %i), BufferOut: (%08x, %i)", - (char*)Memory::GetPointer(_BufferIn), _BufferIn, BufferInSize, _BufferOut, BufferOutSize); struct hostent *remoteHost = gethostbyname((char*)Memory::GetPointer(_BufferIn)); - Memory::Write_U32(Common::swap32(*(u_long *)remoteHost->h_addr_list[0]), _BufferOut); + + Memory::Write_U32(Common::swap32(*(u32 *)remoteHost->h_addr_list[0]), _BufferOut); + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_INETATON = %d " + "%s, BufferIn: (%08x, %i), BufferOut: (%08x, %i), IP Found: %08X",remoteHost->h_addr_list[0] == 0 ? -1 : 0, + (char*)Memory::GetPointer(_BufferIn), _BufferIn, BufferInSize, _BufferOut, BufferOutSize, Common::swap32(*(u32 *)remoteHost->h_addr_list[0])); return remoteHost->h_addr_list[0] == 0 ? -1 : 0; } case IOCTL_SO_INETPTON: - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_INETPTON " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_INETPTON " "(Translating: %s)", Memory::GetPointer(_BufferIn)); return inet_pton((char*)Memory::GetPointer(_BufferIn), Memory::GetPointer(_BufferOut+4)); break; @@ -827,11 +835,11 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, ufds[i].fd = Memory::Read_U32(_BufferOut + 0xc*i); ufds[i].events = Memory::Read_U32(_BufferOut + 0xc*i + 4); ufds[i].revents = Memory::Read_U32(_BufferOut + 0xc*i + 8); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_POLL(%d) " - "Sock: %08x, Unknown: %08x, Events: %08x, " - "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", - i, ufds[i].fd, unknown, ufds[i].events, - _BufferIn, BufferInSize, _BufferOut, BufferOutSize); + //WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_POLL(%d) " + // "Sock: %08x, Unknown: %08x, Events: %08x, " + // "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", + // i, ufds[i].fd, unknown, ufds[i].events, + // _BufferIn, BufferInSize, _BufferOut, BufferOutSize); } int ret = poll(ufds, nfds, timeout); @@ -841,7 +849,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, { Memory::Write_U32(ufds[i].fd, _BufferOut + 0xc*i); Memory::Write_U32(ufds[i].events, _BufferOut + 0xc*i + 4); - Memory::Write_U32(ufds[i].revents, _BufferOut + 0xc*i + 8); + Memory::Write_U32(ufds[i].revents|0x10, _BufferOut + 0xc*i + 8); } free(ufds); return ret; @@ -856,7 +864,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, int i; struct hostent *remoteHost = gethostbyname((char*)Memory::GetPointer(_BufferIn)); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_GETHOSTBYNAME " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtl request IOCTL_SO_GETHOSTBYNAME " "Address: %s, BufferIn: (%08x, %i), BufferOut: (%08x, %i)", (char*)Memory::GetPointer(_BufferIn), _BufferIn, BufferInSize, _BufferOut, BufferOutSize); @@ -891,7 +899,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommand(u32 _Command, } default: - INFO_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request 0x%x " + WARN_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtl request 0x%x " "BufferIn: (%08x, %i), BufferOut: (%08x, %i)", _Command, _BufferIn, BufferInSize, _BufferOut, BufferOutSize); break; @@ -971,7 +979,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe param5 = Memory::Read_U32(_BufferOut+4); } - INFO_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtlV request IOCTLV_SO_GETINTERFACEOPT(%08X, %08X) " + WARN_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtlV request IOCTLV_SO_GETINTERFACEOPT(%08X, %08X) " "BufferIn: (%08x, %i), BufferIn2: (%08x, %i)", param, param2, _BufferIn, BufferInSize, _BufferIn2, BufferInSize2); @@ -1024,8 +1032,8 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe AdapterList->FirstDnsServerAddress && AdapterList->OperStatus == IfOperStatusUp) { - INFO_LOG(WII_IPC_NET, "Name of valid interface: %S", AdapterList->FriendlyName); - INFO_LOG(WII_IPC_NET, "DNS: %u.%u.%u.%u", + WARN_LOG(WII_IPC_NET, "Name of valid interface: %S", AdapterList->FriendlyName); + WARN_LOG(WII_IPC_NET, "DNS: %u.%u.%u.%u", (unsigned char)AdapterList->FirstDnsServerAddress->Address.lpSockaddr->sa_data[2], (unsigned char)AdapterList->FirstDnsServerAddress->Address.lpSockaddr->sa_data[3], (unsigned char)AdapterList->FirstDnsServerAddress->Address.lpSockaddr->sa_data[4], @@ -1092,23 +1100,28 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe }; struct sendto_params params; Memory::ReadBigEData((u8*)¶ms, _BufferIn2, BufferInSize2); - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_SENDTO " - "Socket: %08x, BufferIn: (%08x, %i), BufferIn2: (%08x, %i)", - Common::swap32(params.socket), _BufferIn, BufferInSize, _BufferIn2, BufferInSize2); - + char * data = (char*)Memory::GetPointer(_BufferIn); if (params.has_destaddr) { struct sockaddr_in* addr = (struct sockaddr_in*)¶ms.destaddr; u8 len = sizeof(sockaddr); //addr->sin_family & 0xFF; - addr->sin_family = addr->sin_family >> 8; - int ret = sendto(Common::swap32(params.socket), (char*)Memory::GetPointer(_BufferIn), + addr->sin_family = (addr->sin_family >> 8); + int ret = sendto(Common::swap32(params.socket), data, BufferInSize, Common::swap32(params.flags), (struct sockaddr*)addr, len); + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_SENDTO = %d" + "Socket: %08x, BufferIn: (%08x, %i), BufferIn2: (%08x, %i), %u.%u.%u.%u", ret, + Common::swap32(params.socket), _BufferIn, BufferInSize, _BufferIn2, BufferInSize2, addr->sin_addr.S_un.S_un_b.s_b1, addr->sin_addr.S_un.S_un_b.s_b2, addr->sin_addr.S_un.S_un_b.s_b3, addr->sin_addr.S_un.S_un_b.s_b4); + return getNetErrorCode(ret, "SO_SENDTO", true); } else { - int ret = send(Common::swap32(params.socket), (char*)Memory::GetPointer(_BufferIn), + int ret = send(Common::swap32(params.socket), data, BufferInSize, Common::swap32(params.flags)); + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_SEND = %d" + "Socket: %08x, BufferIn: (%08x, %i), BufferIn2: (%08x, %i)", ret, + Common::swap32(params.socket), _BufferIn, BufferInSize, _BufferIn2, BufferInSize2); + return getNetErrorCode(ret, "SO_SEND", true); } break; @@ -1118,14 +1131,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe { u32 sock = Memory::Read_U32(_BufferIn); u32 flags = Memory::Read_U32(_BufferIn + 4); - - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_RECVFROM " - "Socket: %08X, Flags: %08X, " - "BufferIn: (%08x, %i), BufferIn2: (%08x, %i), " - "BufferOut: (%08x, %i), BufferOut2: (%08x, %i)", - sock, flags, - _BufferIn, BufferInSize, _BufferIn2, BufferInSize2, - _BufferOut, BufferOutSize, _BufferOut2, BufferOutSize2); + char *buf = (char *)Memory::GetPointer(_BufferOut); int len = BufferOutSize; @@ -1137,6 +1143,8 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe fromlen = BufferOutSize2 >= sizeof(struct sockaddr) ? BufferOutSize2 : sizeof(struct sockaddr); } + + if (flags != 2) flags = 0; else @@ -1148,7 +1156,7 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe unsigned long totallen = 0; ioctlsocket(sock, FIONREAD, &totallen); return totallen; - }else + } #endif ret = recvfrom(sock, buf, len, flags, fromlen ? (struct sockaddr*) &addr : NULL, fromlen ? &fromlen : 0); @@ -1157,7 +1165,26 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe addr.sin_family = (addr.sin_family << 8) | (BufferOutSize2&0xFF); Memory::WriteBigEData((u8*)&addr, _BufferOut2, BufferOutSize2); } - return getNetErrorCode(ret, "SO_RECVFROM", true); + + if(fromlen){ + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_RECVFROM = %d " + "Socket: %08X, Flags: %08X, " + "BufferIn: (%08x, %i), BufferIn2: (%08x, %i), " + "BufferOut: (%08x, %i), BufferOut2: (%08x, %i)", + ret, sock, flags, + _BufferIn, BufferInSize, _BufferIn2, BufferInSize2, + _BufferOut, BufferOutSize, _BufferOut2, BufferOutSize2); + }else{ + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_RECV = %d " + "Socket: %08X, Flags: %08X, " + "BufferIn: (%08x, %i), BufferIn2: (%08x, %i), " + "BufferOut: (%08x, %i), BufferOut2: (%08x, %i)", + ret, sock, flags, + _BufferIn, BufferInSize, _BufferIn2, BufferInSize2, + _BufferOut, BufferOutSize, _BufferOut2, BufferOutSize2); + } + + return getNetErrorCode(ret, fromlen ? "SO_RECVFROM" : "SO_RECV", true); break; } @@ -1227,15 +1254,15 @@ u32 CWII_IPC_HLE_Device_net_ip_top::ExecuteCommandV(u32 _Parameter, SIOCtlVBuffe } } - INFO_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_GETADDRINFO " + WARN_LOG(WII_IPC_NET, "/dev/net/ip/top::IOCtlV request IOCTLV_SO_GETADDRINFO " "(BufferIn: (%08x, %i), BufferOut: (%08x, %i)", _BufferIn, BufferInSize, _BufferOut, BufferOutSize); - INFO_LOG(WII_IPC_NET, "IOCTLV_SO_GETADDRINFO: %s", Memory::GetPointer(_BufferIn)); + WARN_LOG(WII_IPC_NET, "IOCTLV_SO_GETADDRINFO: %s", Memory::GetPointer(_BufferIn)); return ret; } default: - INFO_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtlV request 0x%x (BufferIn: (%08x, %i), BufferIn2: (%08x, %i)", + WARN_LOG(WII_IPC_NET,"/dev/net/ip/top::IOCtlV request 0x%x (BufferIn: (%08x, %i), BufferIn2: (%08x, %i)", _Parameter, _BufferIn, BufferInSize, _BufferIn2, BufferInSize2); break; } diff --git a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.h b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.h index 739a3d7780..2e0c847bca 100644 --- a/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.h +++ b/Source/Core/Core/Src/IPC_HLE/WII_IPC_HLE_Device_net.h @@ -134,7 +134,7 @@ private: IOCTL_NWC24_EXEC_TRY_SUSPEND_SCHEDULAR = 0x02, IOCTL_NWC24_EXEC_RESUME_SCHEDULAR = 0x03, IOCTL_NWC24_KD_GET_TIME_TRIGGERS = 0x04, - IOCTL_NWC24_UNK_5 = 0x05, + IOCTL_NWC24_SET_SCHEDULE_SPAN = 0x05, IOCTL_NWC24_STARTUP_SOCKET = 0x06, IOCTL_NWC24_CLEANUP_SOCKET = 0x07, IOCTL_NWC24_LOCK_SOCKET = 0x08, @@ -333,7 +333,7 @@ private: IOCTLV_NCD_GETLINKSTATUS = 0x7, // NCDGetLinkStatus IOCTLV_NCD_GETWIRELESSMACADDRESS = 0x8, // NCDGetWirelessMacAddress }; - + bool isSet; network_config_t m_Ifconfig; }; diff --git a/Source/Core/Core/Src/IPC_HLE/fakepoll.h b/Source/Core/Core/Src/IPC_HLE/fakepoll.h index 25bf123567..cea3bb287f 100644 --- a/Source/Core/Core/Src/IPC_HLE/fakepoll.h +++ b/Source/Core/Core/Src/IPC_HLE/fakepoll.h @@ -31,15 +31,15 @@ typedef struct pollfd { int fd; /* file desc to poll */ - short events; /* events of interest on fd */ - short revents; /* events that occurred on fd */ + int events; /* events of interest on fd */ + int revents; /* events that occurred on fd */ } pollfd_t; #define EINVAL 22 // poll flags #define POLLIN 0x0001 #define POLLOUT 0x0008 -#define POLLERR 0x0040 +#define POLLERR 0x0020 // synonyms #define POLLNORM POLLIN @@ -50,8 +50,8 @@ typedef struct pollfd { #define POLLWRBAND POLLOUT // ignored -#define POLLHUP 0x0010 -#define POLLNVAL 0x0020 +#define POLLHUP 0x0040 +#define POLLNVAL 0x0080 inline int poll(struct pollfd *pollSet, int pollCount, int pollTimeout) {