Fix for Just Dance 4

Some clean ups.
This commit is contained in:
Matthew Parlane 2013-08-27 22:44:54 +12:00
parent 8006c878f8
commit 4644a3bd16
5 changed files with 42 additions and 65 deletions

View File

@ -2,32 +2,6 @@
// Licensed under GPLv2
// Refer to the license.txt file included.
/*
The /dev/net/kd/request requests are part of what is called WiiConnect24,
it's used by for example SSBB, Mario Kart, Metroid Prime 3
0x01 SuspendScheduler (Input: none, Output: 32 bytes)
0x02 ExecTrySuspendScheduler (Input: 32 bytes, Output: 32 bytes) // Sounds like it will
check if it should suspend the updates scheduler or not. If I returned
(OutBuffer: 0, Ret: -1) to Metroid Prime 3 it got stuck in an endless loops of
requests, probably harmless but I changed it to (OutBuffer: 1, Ret: 0) to stop
the calls. However then it also calls 0x3 and then changes its error message
to a Wii Memory error message from just a general Error message.
0x03 ? (Input: none, Output: 32 bytes) // This is only called if 0x02
does not return -1
0x0f NWC24iRequestGenerateUserId (Input: none, Output: 32 bytes)
Requests are made in this order by these games
Mario Kart: 2, 1, f, 3
SSBB: 2, 3
For Mario Kart I had to return -1 from at least 2, f and 3 to convince it that the network
was unavailable and prevent if from looking for shared2/wc24 files (and do a PPCHalt when
it failed)
*/
#include "WII_IPC_HLE_Device_es.h"
#include "WII_IPC_HLE_Device_net.h"
#include "../ConfigManager.h"
@ -225,9 +199,7 @@ bool CWII_IPC_HLE_Device_net_kd_request::IOCtl(u32 _CommandAddress)
break;
}
// g_ReplyQueueLater.push(std::pair<u32, std::string>(_CommandAddress, GetDeviceName()));
Memory::Write_U32(ReturnValue, _CommandAddress + 4);
return true;
}
@ -1313,7 +1285,7 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtlV(u32 CommandAddress)
int ret = getaddrinfo(pNodeName, pServiceName, BufferInSize3 ? &hints : NULL, &result);
u32 addr = _BufferOut;
u32 sockoffset = addr + 0x460;
if (ret >= 0)
if (ret == 0)
{
while (result != NULL)
{
@ -1350,6 +1322,11 @@ bool CWII_IPC_HLE_Device_net_ip_top::IOCtlV(u32 CommandAddress)
result = result->ai_next;
}
}
else
{
// Host not found
ret = -305;
}
WARN_LOG(WII_IPC_NET, "IOCTLV_SO_GETADDRINFO "
"(BufferIn: (%08x, %i), BufferOut: (%08x, %i)",

View File

@ -1,19 +1,6 @@
// Copyright (C) 2003 Dolphin Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#include "FileUtil.h"
#include "WII_IPC_HLE_Device_net_ssl.h"

View File

@ -1,19 +1,6 @@
// Copyright (C) 2003 Dolphin Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official SVN repository and contact information can be found at
// http://code.google.com/p/dolphin-emu/
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#ifndef _WII_IPC_HLE_DEVICE_NET_SSL_H_
#define _WII_IPC_HLE_DEVICE_NET_SSL_H_

View File

@ -72,8 +72,14 @@ s32 WiiSockMan::getNetErrorCode(s32 ret, std::string caller, bool isRW)
return -SO_EALREADY;
case ERRORCODE(EACCES):
return -SO_EACCES;
case ERRORCODE(ECONNREFUSED):
return -SO_ECONNREFUSED;
case ERRORCODE(ENETUNREACH):
return -SO_ENETUNREACH;
case ERRORCODE(EHOSTUNREACH):
return -SO_EHOSTUNREACH;
case EITHER(WSAEWOULDBLOCK, EAGAIN):
if(isRW){
if (isRW){
return -SO_EAGAIN; // EAGAIN
}else{
return -SO_EINPROGRESS; // EINPROGRESS
@ -347,7 +353,7 @@ void WiiSocket::update(bool read, bool write, bool except)
#ifdef DEBUG_SSL
if (ret > 0)
{
File::IOFile("ssl_read.bin", "ab").WriteBytes(Memory::GetPointer(_BufferIn2), ret);
File::IOFile("ssl_read.bin", "ab").WriteBytes(Memory::GetPointer(BufferIn2), ret);
}
#endif
if (ret >= 0)
@ -448,7 +454,7 @@ void WiiSocket::update(bool read, bool write, bool except)
// recv/recvfrom only handles PEEK
flags &= SO_MSG_PEEK | SO_MSG_OOB;
#ifdef _WIN32
if(flags & MSG_PEEK){
if (flags & MSG_PEEK){
unsigned long totallen = 0;
ioctlsocket(sock, FIONREAD, &totallen);
ReturnValue = totallen;
@ -565,7 +571,7 @@ void WiiSockMan::Update()
}
s32 ret = select(nfds, &read_fds, &write_fds, &except_fds, &t);
if(ret >= 0)
if (ret >= 0)
{
for (auto it = WiiSockets.begin(); it != WiiSockets.end(); ++it)
{

View File

@ -139,6 +139,26 @@ enum {
SO_EXDEV
};
struct WiiInAddr
{
u32 addr;
};
struct WiiSockAddr
{
u8 len;
u8 family;
u8 data[6];
};
struct WiiSockAddrIn
{
u8 len;
u8 family;
u16 port;
WiiInAddr addr;
};
class WiiSocket
{
struct sockop{