From f405395f972b6874d27efdb4fb4452c8f42713f4 Mon Sep 17 00:00:00 2001 From: Raul Tambre <raul.tambre@gmail.com> Date: Sun, 3 Aug 2014 09:30:45 +0300 Subject: [PATCH] Additions and improvements to cellNetCtl --- rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp | 93 ++++---- rpcs3/Emu/SysCalls/Modules/cellNetCtl.h | 258 ++++++++++++++++++++++ rpcs3/emucore.vcxproj | 1 + rpcs3/emucore.vcxproj.filters | 3 + 4 files changed, 300 insertions(+), 55 deletions(-) create mode 100644 rpcs3/Emu/SysCalls/Modules/cellNetCtl.h diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp index 9204105a34..12cab5b0df 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.cpp @@ -4,59 +4,12 @@ #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" +#include "cellNetCtl.h" + //void cellNetCtl_init(); //Module cellNetCtl(0x0014, cellNetCtl_init); Module *cellNetCtl; -// Error Codes -enum -{ - CELL_NET_CTL_ERROR_NOT_INITIALIZED = 0x80130101, - CELL_NET_CTL_ERROR_NOT_TERMINATED = 0x80130102, - CELL_NET_CTL_ERROR_HANDLER_MAX = 0x80130103, - CELL_NET_CTL_ERROR_ID_NOT_FOUND = 0x80130104, - CELL_NET_CTL_ERROR_INVALID_ID = 0x80130105, - CELL_NET_CTL_ERROR_INVALID_CODE = 0x80130106, - CELL_NET_CTL_ERROR_INVALID_ADDR = 0x80130107, - CELL_NET_CTL_ERROR_NOT_CONNECTED = 0x80130108, - CELL_NET_CTL_ERROR_NOT_AVAIL = 0x80130109, - CELL_NET_CTL_ERROR_INVALID_TYPE = 0x8013010a, - CELL_NET_CTL_ERROR_INVALID_SIZE = 0x8013010b, - CELL_NET_CTL_ERROR_NET_DISABLED = 0x80130181, - CELL_NET_CTL_ERROR_NET_NOT_CONNECTED = 0x80130182, - CELL_NET_CTL_ERROR_NP_NO_ACCOUNT = 0x80130183, - CELL_NET_CTL_ERROR_NP_RESERVED1 = 0x80130184, - CELL_NET_CTL_ERROR_NP_RESERVED2 = 0x80130185, - CELL_NET_CTL_ERROR_NET_CABLE_NOT_CONNECTED = 0x80130186, - CELL_NET_CTL_ERROR_DIALOG_CANCELED = 0x80130190, - CELL_NET_CTL_ERROR_DIALOG_ABORTED = 0x80130191, - - CELL_NET_CTL_ERROR_WLAN_DEAUTHED = 0x80130137, - CELL_NET_CTL_ERROR_WLAN_KEYINFO_EXCHNAGE_TIMEOUT = 0x8013013d, - CELL_NET_CTL_ERROR_WLAN_ASSOC_FAILED = 0x8013013e, - CELL_NET_CTL_ERROR_WLAN_AP_DISAPPEARED = 0x8013013f, - CELL_NET_CTL_ERROR_PPPOE_SESSION_INIT = 0x80130409, - CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADO = 0x8013040a, - CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADS = 0x8013040b, - CELL_NET_CTL_ERROR_PPPOE_SESSION_GET_PADT = 0x8013040d, - CELL_NET_CTL_ERROR_PPPOE_SESSION_SERVICE_NAME = 0x8013040f, - CELL_NET_CTL_ERROR_PPPOE_SESSION_AC_SYSTEM = 0x80130410, - CELL_NET_CTL_ERROR_PPPOE_SESSION_GENERIC = 0x80130411, - CELL_NET_CTL_ERROR_PPPOE_STATUS_AUTH = 0x80130412, - CELL_NET_CTL_ERROR_PPPOE_STATUS_NETWORK = 0x80130413, - CELL_NET_CTL_ERROR_PPPOE_STATUS_TERMINATE = 0x80130414, - CELL_NET_CTL_ERROR_DHCP_LEASE_TIME = 0x80130504, -}; - -// Network connection states -enum -{ - CELL_NET_CTL_STATE_Disconnected = 0, - CELL_NET_CTL_STATE_Connecting = 1, - CELL_NET_CTL_STATE_IPObtaining = 2, - CELL_NET_CTL_STATE_IPObtained = 3, -}; - int cellNetCtlInit() { UNIMPLEMENTED_FUNC(cellNetCtl); @@ -74,7 +27,10 @@ int cellNetCtlGetState(mem32_t state) cellNetCtl->Log("cellNetCtlGetState(state_addr=0x%x)", state.GetAddr()); if (!state.IsGood()) + { + cellNetCtl->Error("cellNetCtlGetState : CELL_NET_CTL_ERROR_INVALID_ADDR"); return CELL_NET_CTL_ERROR_INVALID_ADDR; + } state = CELL_NET_CTL_STATE_Disconnected; // TODO: Allow other states return CELL_OK; @@ -98,9 +54,16 @@ int cellNetCtlGetInfo() return CELL_OK; } -int cellNetCtlNetStartDialogLoadAsync() +int cellNetCtlNetStartDialogLoadAsync(mem_ptr_t<CellNetCtlNetStartDialogParam> param) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlNetStartDialogLoadAsync(param_addr=0x%x)", param.GetAddr()); + + if (!param.IsGood()) + { + cellNetCtl->Error("cellNetCtlNetStartDialogLoadAsync : CELL_NET_CTL_ERROR_INVALID_ADDR"); + return CELL_NET_CTL_ERROR_INVALID_ADDR; + } + return CELL_OK; } @@ -110,15 +73,35 @@ int cellNetCtlNetStartDialogAbortAsync() return CELL_OK; } -int cellNetCtlNetStartDialogUnloadAsync() +int cellNetCtlNetStartDialogUnloadAsync(mem_ptr_t<CellNetCtlNetStartDialogResult> result) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlNetStartDialogUnloadAsync(result_addr=0x%x)", result.GetAddr()); + + if (!result.IsGood()) + { + cellNetCtl->Error("cellNetCtlNetStartDialogLoadAsync : CELL_NET_CTL_ERROR_INVALID_ADDR"); + return CELL_NET_CTL_ERROR_INVALID_ADDR; + } + return CELL_OK; } -int cellNetCtlGetNatInfo() +int cellNetCtlGetNatInfo(mem_ptr_t<CellNetCtlNatInfo> natInfo) { - UNIMPLEMENTED_FUNC(cellNetCtl); + cellNetCtl->Todo("cellNetCtlGetNatInfo(natInfo_addr=0x%x)", natInfo.GetAddr()); + + if (!natInfo.IsGood()) + { + cellNetCtl->Error("cellNetCtlGetNatInfo : CELL_NET_CTL_ERROR_INVALID_ADDR"); + return CELL_NET_CTL_ERROR_INVALID_ADDR; + } + + if (natInfo->size == 0) + { + cellNetCtl->Error("cellNetCtlGetNatInfo : CELL_NET_CTL_ERROR_INVALID_SIZE"); + return CELL_NET_CTL_ERROR_INVALID_SIZE; + } + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h new file mode 100644 index 0000000000..6b3c5c7291 --- /dev/null +++ b/rpcs3/Emu/SysCalls/Modules/cellNetCtl.h @@ -0,0 +1,258 @@ +#pragma once + +// Error Codes +enum +{ + CELL_NET_CTL_ERROR_NOT_INITIALIZED = 0x80130101, + CELL_NET_CTL_ERROR_NOT_TERMINATED = 0x80130102, + CELL_NET_CTL_ERROR_HANDLER_MAX = 0x80130103, + CELL_NET_CTL_ERROR_ID_NOT_FOUND = 0x80130104, + CELL_NET_CTL_ERROR_INVALID_ID = 0x80130105, + CELL_NET_CTL_ERROR_INVALID_CODE = 0x80130106, + CELL_NET_CTL_ERROR_INVALID_ADDR = 0x80130107, + CELL_NET_CTL_ERROR_NOT_CONNECTED = 0x80130108, + CELL_NET_CTL_ERROR_NOT_AVAIL = 0x80130109, + CELL_NET_CTL_ERROR_INVALID_TYPE = 0x8013010a, + CELL_NET_CTL_ERROR_INVALID_SIZE = 0x8013010b, + CELL_NET_CTL_ERROR_NET_DISABLED = 0x80130181, + CELL_NET_CTL_ERROR_NET_NOT_CONNECTED = 0x80130182, + CELL_NET_CTL_ERROR_NP_NO_ACCOUNT = 0x80130183, + CELL_NET_CTL_ERROR_NP_RESERVED1 = 0x80130184, + CELL_NET_CTL_ERROR_NP_RESERVED2 = 0x80130185, + CELL_NET_CTL_ERROR_NET_CABLE_NOT_CONNECTED = 0x80130186, + CELL_NET_CTL_ERROR_DIALOG_CANCELED = 0x80130190, + CELL_NET_CTL_ERROR_DIALOG_ABORTED = 0x80130191, + + CELL_NET_CTL_ERROR_WLAN_DEAUTHED = 0x80130137, + CELL_NET_CTL_ERROR_WLAN_KEYINFO_EXCHNAGE_TIMEOUT = 0x8013013d, + CELL_NET_CTL_ERROR_WLAN_ASSOC_FAILED = 0x8013013e, + CELL_NET_CTL_ERROR_WLAN_AP_DISAPPEARED = 0x8013013f, + CELL_NET_CTL_ERROR_PPPOE_SESSION_INIT = 0x80130409, + CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADO = 0x8013040a, + CELL_NET_CTL_ERROR_PPPOE_SESSION_NO_PADS = 0x8013040b, + CELL_NET_CTL_ERROR_PPPOE_SESSION_GET_PADT = 0x8013040d, + CELL_NET_CTL_ERROR_PPPOE_SESSION_SERVICE_NAME = 0x8013040f, + CELL_NET_CTL_ERROR_PPPOE_SESSION_AC_SYSTEM = 0x80130410, + CELL_NET_CTL_ERROR_PPPOE_SESSION_GENERIC = 0x80130411, + CELL_NET_CTL_ERROR_PPPOE_STATUS_AUTH = 0x80130412, + CELL_NET_CTL_ERROR_PPPOE_STATUS_NETWORK = 0x80130413, + CELL_NET_CTL_ERROR_PPPOE_STATUS_TERMINATE = 0x80130414, + CELL_NET_CTL_ERROR_DHCP_LEASE_TIME = 0x80130504, +}; + +// Network connection states +enum +{ + CELL_NET_CTL_STATE_Disconnected = 0, + CELL_NET_CTL_STATE_Connecting = 1, + CELL_NET_CTL_STATE_IPObtaining = 2, + CELL_NET_CTL_STATE_IPObtained = 3, +}; + +// Transition connection states +enum +{ + CELL_NET_CTL_EVENT_CONNECT_REQ = 0, + CELL_NET_CTL_EVENT_ESTABLISH = 1, + CELL_NET_CTL_EVENT_GET_IP = 2, + CELL_NET_CTL_EVENT_DISCONNECT_REQ = 3, + CELL_NET_CTL_EVENT_ERROR = 4, + CELL_NET_CTL_EVENT_LINK_DISCONNECTED = 5, + CELL_NET_CTL_EVENT_AUTO_RETRY = 6, +}; + +// Network connection devices +enum +{ + CELL_NET_CTL_DEVICE_WIRED = 0, + CELL_NET_CTL_DEVICE_WIRELESS = 1, +}; + +// Cable connection types +enum +{ + CELL_NET_CTL_LINK_TYPE_AUTO = 0, + CELL_NET_CTL_LINK_TYPE_10BASE_HALF = 1, + CELL_NET_CTL_LINK_TYPE_10BASE_FULL = 2, + CELL_NET_CTL_LINK_TYPE_100BASE_HALF = 3, + CELL_NET_CTL_LINK_TYPE_100BASE_FULL = 4, + CELL_NET_CTL_LINK_TYPE_1000BASE_HALF = 5, + CELL_NET_CTL_LINK_TYPE_1000BASE_FULL = 6, +}; + +// Link connection states +enum +{ + CELL_NET_CTL_LINK_DISCONNECTED = 0, + CELL_NET_CTL_LINK_CONNECTED = 1, +}; + +// Wireless connection security measures +enum +{ + CELL_NET_CTL_WLAN_SECURITY_NOAUTH = 0, + CELL_NET_CTL_WLAN_SECURITY_WEP = 1, + CELL_NET_CTL_WLAN_SECURITY_WPAPSK_TKIP = 2, + CELL_NET_CTL_WLAN_SECURITY_WPAPSK_AES = 3, + CELL_NET_CTL_WLAN_SECURITY_UNSUPPORTED = 4, +}; + +// 802.1X settings +enum +{ + CELL_NET_CTL_8021X_NONE = 0, + CELL_NET_CTL_8021X_EAP_MD5 = 1, +}; + +// IP settings +enum +{ + CELL_NET_CTL_IP_DHCP = 0, + CELL_NET_CTL_IP_STATIC = 1, + CELL_NET_CTL_IP_PPPOE = 2, +}; + +// HTTP proxy settings +enum +{ + CELL_NET_CTL_HTTP_PROXY_OFF = 0, + CELL_NET_CTL_HTTP_PROXY_ON = 1, +}; + +// UPnP settings +enum +{ + CELL_NET_CTL_UPNP_ON = 0, + CELL_NET_CTL_UPNP_OFF = 1, +}; + +// Codes for information +enum +{ + CELL_NET_CTL_INFO_DEVICE = 1, + CELL_NET_CTL_INFO_ETHER_ADDR = 2, + CELL_NET_CTL_INFO_MTU = 3, + CELL_NET_CTL_INFO_LINK = 4, + CELL_NET_CTL_INFO_LINK_TYPE = 5, + CELL_NET_CTL_INFO_BSSID = 6, + CELL_NET_CTL_INFO_SSID = 7, + CELL_NET_CTL_INFO_WLAN_SECURITY = 8, + CELL_NET_CTL_INFO_8021X_TYPE = 9, + CELL_NET_CTL_INFO_8021X_AUTH_NAME = 10, + CELL_NET_CTL_INFO_RSSI = 11, + CELL_NET_CTL_INFO_CHANNEL = 12, + CELL_NET_CTL_INFO_IP_CONFIG = 13, + CELL_NET_CTL_INFO_DHCP_HOSTNAME = 14, + CELL_NET_CTL_INFO_PPPOE_AUTH_NAME = 15, + CELL_NET_CTL_INFO_IP_ADDRESS = 16, + CELL_NET_CTL_INFO_NETMASK = 17, + CELL_NET_CTL_INFO_DEFAULT_ROUTE = 18, + CELL_NET_CTL_INFO_PRIMARY_DNS = 19, + CELL_NET_CTL_INFO_SECONDARY_DNS = 20, + CELL_NET_CTL_INFO_HTTP_PROXY_CONFIG = 21, + CELL_NET_CTL_INFO_HTTP_PROXY_SERVER = 22, + CELL_NET_CTL_INFO_HTTP_PROXY_PORT = 23, + CELL_NET_CTL_INFO_UPNP_CONFIG = 24, +}; + +// Network start dialogs +enum +{ + CELL_NET_CTL_NETSTART_TYPE_NET = 0, + CELL_NET_CTL_NETSTART_TYPE_NP = 1, +}; + +// Network start dialog statuses +enum +{ + CELL_SYSUTIL_NET_CTL_NETSTART_LOADED = 0x0801, + CELL_SYSUTIL_NET_CTL_NETSTART_FINISHED = 0x0802, + CELL_SYSUTIL_NET_CTL_NETSTART_UNLOADED = 0x0803, +}; + +// UPnP NAT statuses +enum +{ + CELL_NET_CTL_NATINFO_UPNP_UNCHECKED = 0, + CELL_NET_CTL_NATINFO_UPNP_NO = 1, + CELL_NET_CTL_NATINFO_UPNP_USED = 2, +}; + +// STUN NAT statuses +enum +{ + CELL_NET_CTL_NATINFO_STUN_UNCHECKED = 0, + CELL_NET_CTL_NATINFO_STUN_FAILED = 1, + CELL_NET_CTL_NATINFO_STUN_OK = 2, +}; + +// NAT types +enum +{ + CELL_NET_CTL_NATINFO_NAT_TYPE_1 = 1, + CELL_NET_CTL_NATINFO_NAT_TYPE_2 = 2, + CELL_NET_CTL_NATINFO_NAT_TYPE_3 = 3, +}; + +struct CellNetCtlEtherAddr +{ + u8 data[6]; + u8 padding[2]; +}; + +struct CellNetCtlSSID +{ + u8 data[32]; + u8 term; + u8 padding[3]; +}; + +struct CellNetCtlInfo +{ + be_t<u32> device; + struct CellNetCtlEtherAddr ether_addr; + be_t<u32> mtu; + be_t<u32> link; + be_t<u32> link_type; + struct CellNetCtlEtherAddr bssid; + struct CellNetCtlSSID ssid; + be_t<u32> wlan_security; + be_t<u32> auth_8021x_type; + s8 auth_8021x_auth_name[128]; + u8 rssi; + u8 channel; + be_t<u32> ip_config; + s8 dhcp_hostname[256]; + s8 pppoe_auth_name[128]; + s8 ip_address[16]; + s8 netmask[16]; + s8 default_route[16]; + s8 primary_dns[16]; + s8 secondary_dns[16]; + be_t<u32> http_proxy_config; + s8 http_proxy_server[256]; + be_t<u16> http_proxy_port; + be_t<u32> upnp_config; +}; + +struct CellNetCtlNetStartDialogParam +{ + be_t<u32> size; + be_t<s32> type; + be_t<u32> cid; +}; + +struct CellNetCtlNetStartDialogResult +{ + be_t<u32> size; + be_t<s32> result; +}; + +struct CellNetCtlNatInfo +{ + be_t<u32> size; + be_t<s32> upnp_status; + be_t<s32> stun_status; + be_t<s32> nat_type; + struct in_addr mapped_addr; +}; \ No newline at end of file diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index 0465079533..12dca55fec 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -347,6 +347,7 @@ <ClInclude Include="Emu\SysCalls\Modules\cellGame.h" /> <ClInclude Include="Emu\SysCalls\Modules\cellGifDec.h" /> <ClInclude Include="Emu\SysCalls\Modules\cellJpgDec.h" /> + <ClInclude Include="Emu\SysCalls\Modules\cellNetCtl.h" /> <ClInclude Include="Emu\SysCalls\Modules\cellMsgDialog.h" /> <ClInclude Include="Emu\SysCalls\Modules\cellPamf.h" /> <ClInclude Include="Emu\SysCalls\Modules\cellPngDec.h" /> diff --git a/rpcs3/emucore.vcxproj.filters b/rpcs3/emucore.vcxproj.filters index 11ce9c141d..a6f671312e 100644 --- a/rpcs3/emucore.vcxproj.filters +++ b/rpcs3/emucore.vcxproj.filters @@ -649,6 +649,9 @@ <ClInclude Include="Emu\SysCalls\Modules\cellJpgDec.h"> <Filter>Emu\SysCalls\Modules</Filter> </ClInclude> + <ClInclude Include="Emu\SysCalls\Modules\cellNetCtl.h"> + <Filter>Emu\SysCalls\Modules</Filter> + </ClInclude> <ClInclude Include="Emu\SysCalls\Modules\cellPamf.h"> <Filter>Emu\SysCalls\Modules</Filter> </ClInclude>