mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2024-11-15 05:47:56 -07:00
IOS/KD: Implement IOCTL_NWC24_REQUEST_SHUTDOWN
This commit is contained in:
parent
393ce529af
commit
1df1a9abe6
@ -274,8 +274,8 @@ IPCCommandResult NetIPTop::IOCtl(const IOCtlRequest& request)
|
|||||||
|
|
||||||
switch (request.request)
|
switch (request.request)
|
||||||
{
|
{
|
||||||
case IOCTL_SO_STARTUP:
|
case IOCTL_SO_INITINTERFACE:
|
||||||
return HandleStartUpRequest(request);
|
return HandleInitInterfaceRequest(request);
|
||||||
case IOCTL_SO_SOCKET:
|
case IOCTL_SO_SOCKET:
|
||||||
return HandleSocketRequest(request);
|
return HandleSocketRequest(request);
|
||||||
case IOCTL_SO_ICMPSOCKET:
|
case IOCTL_SO_ICMPSOCKET:
|
||||||
@ -349,7 +349,7 @@ void NetIPTop::Update()
|
|||||||
WiiSockMan::GetInstance().Update();
|
WiiSockMan::GetInstance().Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
IPCCommandResult NetIPTop::HandleStartUpRequest(const IOCtlRequest& request)
|
IPCCommandResult NetIPTop::HandleInitInterfaceRequest(const IOCtlRequest& request)
|
||||||
{
|
{
|
||||||
request.Log(GetDeviceName(), Common::Log::IOS_WC24);
|
request.Log(GetDeviceName(), Common::Log::IOS_WC24);
|
||||||
return GetDefaultReply(IPC_SUCCESS);
|
return GetDefaultReply(IPC_SUCCESS);
|
||||||
|
@ -36,18 +36,18 @@ enum NET_IOCTL
|
|||||||
IOCTL_SO_GETHOSTBYNAME,
|
IOCTL_SO_GETHOSTBYNAME,
|
||||||
IOCTL_SO_GETHOSTBYADDR,
|
IOCTL_SO_GETHOSTBYADDR,
|
||||||
IOCTLV_SO_GETNAMEINFO,
|
IOCTLV_SO_GETNAMEINFO,
|
||||||
IOCTL_SO_UNK14,
|
IOCTL_SO_GETLASTERROR,
|
||||||
IOCTL_SO_INETATON,
|
IOCTL_SO_INETATON,
|
||||||
IOCTL_SO_INETPTON,
|
IOCTL_SO_INETPTON,
|
||||||
IOCTL_SO_INETNTOP,
|
IOCTL_SO_INETNTOP,
|
||||||
IOCTLV_SO_GETADDRINFO,
|
IOCTLV_SO_GETADDRINFO,
|
||||||
IOCTL_SO_SOCKATMARK,
|
IOCTL_SO_SOCKATMARK,
|
||||||
IOCTLV_SO_UNK1A,
|
IOCTLV_SO_STARTUP,
|
||||||
IOCTLV_SO_UNK1B,
|
IOCTLV_SO_CLEANUP,
|
||||||
IOCTLV_SO_GETINTERFACEOPT,
|
IOCTLV_SO_GETINTERFACEOPT,
|
||||||
IOCTLV_SO_SETINTERFACEOPT,
|
IOCTLV_SO_SETINTERFACEOPT,
|
||||||
IOCTL_SO_SETINTERFACE,
|
IOCTL_SO_SETINTERFACE,
|
||||||
IOCTL_SO_STARTUP,
|
IOCTL_SO_INITINTERFACE,
|
||||||
IOCTL_SO_ICMPSOCKET = 0x30,
|
IOCTL_SO_ICMPSOCKET = 0x30,
|
||||||
IOCTLV_SO_ICMPPING,
|
IOCTLV_SO_ICMPPING,
|
||||||
IOCTL_SO_ICMPCANCEL,
|
IOCTL_SO_ICMPCANCEL,
|
||||||
@ -68,7 +68,7 @@ public:
|
|||||||
void Update() override;
|
void Update() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IPCCommandResult HandleStartUpRequest(const IOCtlRequest& request);
|
IPCCommandResult HandleInitInterfaceRequest(const IOCtlRequest& request);
|
||||||
IPCCommandResult HandleSocketRequest(const IOCtlRequest& request);
|
IPCCommandResult HandleSocketRequest(const IOCtlRequest& request);
|
||||||
IPCCommandResult HandleICMPSocketRequest(const IOCtlRequest& request);
|
IPCCommandResult HandleICMPSocketRequest(const IOCtlRequest& request);
|
||||||
IPCCommandResult HandleCloseRequest(const IOCtlRequest& request);
|
IPCCommandResult HandleCloseRequest(const IOCtlRequest& request);
|
||||||
|
@ -141,9 +141,29 @@ IPCCommandResult NetKDRequest::IOCtl(const IOCtlRequest& request)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case IOCTL_NWC24_REQUEST_SHUTDOWN:
|
case IOCTL_NWC24_REQUEST_SHUTDOWN:
|
||||||
// if ya set the IOS version to a very high value this happens ...
|
{
|
||||||
INFO_LOG(IOS_WC24, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN - NI");
|
if (request.buffer_in == 0 || request.buffer_in % 4 != 0 || request.buffer_in_size < 8 ||
|
||||||
|
request.buffer_out == 0 || request.buffer_out % 4 != 0 || request.buffer_out_size < 4)
|
||||||
|
{
|
||||||
|
return_value = IPC_EINVAL;
|
||||||
|
ERROR_LOG(IOS_WC24, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN = IPC_EINVAL");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
INFO_LOG(IOS_WC24, "NET_KD_REQ: IOCTL_NWC24_REQUEST_SHUTDOWN");
|
||||||
|
[[maybe_unused]] const u32 event = Memory::Read_U32(request.buffer_in);
|
||||||
|
// TODO: Advertise shutdown event
|
||||||
|
// TODO: Shutdown USB keyboard LEDs if event == 3
|
||||||
|
// TODO: IOCTLV_NCD_SETCONFIG
|
||||||
|
// TODO: DHCP related features
|
||||||
|
// SOGetInterfaceOpt(0xfffe,0x4003); // IP settings
|
||||||
|
// SOGetInterfaceOpt(0xfffe,0xc001); // DHCP lease time remaining?
|
||||||
|
// SOGetInterfaceOpt(0xfffe,0x1003); // Error
|
||||||
|
// Call /dev/net/ip/top 0x1b (SOCleanup), it closes all sockets
|
||||||
|
WiiSockMan::GetInstance().Clean();
|
||||||
|
return_value = IPC_SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
request.Log(GetDeviceName(), Common::Log::IOS_WC24);
|
request.Log(GetDeviceName(), Common::Log::IOS_WC24);
|
||||||
|
Loading…
Reference in New Issue
Block a user