From d963be0098552d56663455dc72520c55d8ef0831 Mon Sep 17 00:00:00 2001 From: Pavel <68122101+red-prig@users.noreply.github.com> Date: Mon, 21 Oct 2024 00:56:59 +0300 Subject: [PATCH] + --- fpPS4.lpi | 5 + gui/game_run.pas | 1 + src/old/ps4_libscenet.pas | 295 -------------------------------- src/ps4_libsceavsetting.pas | 2 +- src/ps4_libscenetctl.pas | 332 ++++++++++++++++++++++++++++++++++++ tools/readself/readself.lpr | 30 ++++ 6 files changed, 369 insertions(+), 296 deletions(-) create mode 100644 src/ps4_libscenetctl.pas diff --git a/fpPS4.lpi b/fpPS4.lpi index ecd32eab..13d0bca3 100644 --- a/fpPS4.lpi +++ b/fpPS4.lpi @@ -1471,6 +1471,11 @@ + + + + + diff --git a/gui/game_run.pas b/gui/game_run.pas index e1f4c22c..5602cc9f 100644 --- a/gui/game_run.pas +++ b/gui/game_run.pas @@ -79,6 +79,7 @@ uses ps4_libSceSaveData, ps4_libSceAudioOut, ps4_libSceAudioIn, + ps4_libSceNetCtl, //ps4_libSceDiscMap, //internal libs diff --git a/src/old/ps4_libscenet.pas b/src/old/ps4_libscenet.pas index 99709c87..b82d0bca 100644 --- a/src/old/ps4_libscenet.pas +++ b/src/old/ps4_libscenet.pas @@ -470,276 +470,6 @@ end; function ps4_sceNetBandwidthControlSetDefaultParam(param1:Pointer;param2:Integer):Integer; SysV_ABI_CDecl; begin Result:=0; -end; - -function ps4_sceNetCtlInit:Integer; SysV_ABI_CDecl; -begin - Result:=0; -end; - -procedure ps4_sceNetCtlTerm; SysV_ABI_CDecl; -begin - // -end; - -const - SCE_NET_CTL_ERROR_NOT_INITIALIZED =-2143215359; // 0x80412101 - SCE_NET_CTL_ERROR_CALLBACK_MAX =-2143215357; // 0x80412103 - SCE_NET_CTL_ERROR_ID_NOT_FOUND =-2143215356; // 0x80412104 - SCE_NET_CTL_ERROR_INVALID_ID =-2143215355; // 0x80412105 - SCE_NET_CTL_ERROR_INVALID_CODE =-2143215354; // 0x80412106 - SCE_NET_CTL_ERROR_INVALID_ADDR =-2143215353; // 0x80412107 - SCE_NET_CTL_ERROR_NOT_CONNECTED =-2143215352; // 0x80412108 - SCE_NET_CTL_ERROR_NOT_AVAIL =-2143215351; // 0x80412109 - SCE_NET_CTL_ERROR_NETWORK_DISABLED=-2143215347; // 0x8041210D - SCE_NET_CTL_ERROR_DISCONNECT_REQ =-2143215346; // 0x8041210E - SCE_NET_CTL_ERROR_INVALID_TYPE =-2143215345; // 0x8041210F - SCE_NET_CTL_ERROR_INVALID_SIZE =-2143215343; // 0x80412111 - SCE_NET_CTL_ERROR_ETHERNET_PLUGOUT=-2143215339; // 0x80412115 - SCE_NET_CTL_ERROR_WIFI_DEAUTHED =-2143215338; // 0x80412116 - SCE_NET_CTL_ERROR_WIFI_BEACON_LOST=-2143215337; // 0x80412117 - - // state - SCE_NET_CTL_STATE_DISCONNECTED=0; - SCE_NET_CTL_STATE_CONNECTING =1; - SCE_NET_CTL_STATE_IPOBTAINING =2; - SCE_NET_CTL_STATE_IPOBTAINED =3; - - // event type - SCE_NET_CTL_EVENT_TYPE_DISCONNECTED=1; - SCE_NET_CTL_EVENT_TYPE_DISCONNECT_REQ_FINISHED=2; - SCE_NET_CTL_EVENT_TYPE_IPOBTAINED=3; - - // info code - SCE_NET_CTL_INFO_DEVICE = 1; - SCE_NET_CTL_INFO_ETHER_ADDR = 2; - SCE_NET_CTL_INFO_MTU = 3; - SCE_NET_CTL_INFO_LINK = 4; - SCE_NET_CTL_INFO_BSSID = 5; - SCE_NET_CTL_INFO_SSID = 6; - SCE_NET_CTL_INFO_WIFI_SECURITY = 7; - SCE_NET_CTL_INFO_RSSI_DBM = 8; - SCE_NET_CTL_INFO_RSSI_PERCENTAGE = 9; - SCE_NET_CTL_INFO_CHANNEL =10; - SCE_NET_CTL_INFO_IP_CONFIG =11; - SCE_NET_CTL_INFO_DHCP_HOSTNAME =12; - SCE_NET_CTL_INFO_PPPOE_AUTH_NAME =13; - SCE_NET_CTL_INFO_IP_ADDRESS =14; - SCE_NET_CTL_INFO_NETMASK =15; - SCE_NET_CTL_INFO_DEFAULT_ROUTE =16; - SCE_NET_CTL_INFO_PRIMARY_DNS =17; - SCE_NET_CTL_INFO_SECONDARY_DNS =18; - SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG=19; - SCE_NET_CTL_INFO_HTTP_PROXY_SERVER=20; - SCE_NET_CTL_INFO_HTTP_PROXY_PORT =21; - SCE_NET_CTL_INFO_RESERVED1 =22; - SCE_NET_CTL_INFO_RESERVED2 =23; - -function ps4_sceNetCtlGetState(state:PInteger):Integer; SysV_ABI_CDecl; -begin - if (state=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); - state^:=SCE_NET_CTL_STATE_DISCONNECTED; - Result:=0; -end; - -type - SceNetCtlCallback=Procedure(eventType:Integer;arg:Pointer); SysV_ABI_CDecl; - -var - NetCtlCb:packed record - func:SceNetCtlCallback; - arg:Pointer; - end; - -function ps4_sceNetCtlRegisterCallback(func:SceNetCtlCallback;arg:Pointer;cid:PInteger):Integer; SysV_ABI_CDecl; -begin - NetCtlCb.func:=func; - NetCtlCb.arg :=arg; - if (cid<>nil) then cid^:=0; - Result:=0; -end; - -function ps4_sceNetCtlUnregisterCallback(cid:Integer):Integer; SysV_ABI_CDecl; -begin - Result:=0; -end; - -function ps4_sceNetCtlCheckCallback():Integer; SysV_ABI_CDecl; -begin - if (NetCtlCb.func<>nil) then - begin - //NetCtlCb.func(SCE_NET_CTL_EVENT_TYPE_DISCONNECTED,NetCtlCb.arg); - end; - Result:=0; -end; - -function ps4_sceNetCtlGetResult(eventType:Integer;errorCode:PInteger):Integer; SysV_ABI_CDecl; -begin - if (errorCode=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); - errorCode^:=SCE_NET_CTL_ERROR_ETHERNET_PLUGOUT; - Result:=0; -end; - -type - pSceNetCtlNatInfo=^SceNetCtlNatInfo; - SceNetCtlNatInfo=packed record - size:Integer; - stunStatus:Integer; - natType:Integer; - mappedAddr:SceNetInAddr; - end; - - pSceNetCtlIfStat=^SceNetCtlIfStat; - SceNetCtlIfStat=packed record - device :DWORD; //SCE_NET_CTL_DEVICE - _align :DWORD; - txBytes:QWORD; - rxBytes:QWORD; - reserved:array[0..7] of DWORD; - end; - -const - //SceNetCtlGetNatInfo - SCE_NET_CTL_NATINFO_STUN_UNCHECKED=0; - SCE_NET_CTL_NATINFO_STUN_FAILED =1; - SCE_NET_CTL_NATINFO_STUN_OK =2; - - SCE_NET_CTL_NATINFO_NAT_TYPE_1 =1; - SCE_NET_CTL_NATINFO_NAT_TYPE_2 =2; - SCE_NET_CTL_NATINFO_NAT_TYPE_3 =3; - - //SceNetCtlGetIfStat - SCE_NET_CTL_DEVICE_WIRED =0; - SCE_NET_CTL_DEVICE_WIRELESS =1; - -function ps4_sceNetCtlGetNatInfo(natInfo:pSceNetCtlNatInfo):Integer; SysV_ABI_CDecl; -begin - if (natInfo=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); - if (natInfo^.size<>SizeOf(SceNetCtlNatInfo)) then Exit(SCE_NET_CTL_ERROR_INVALID_SIZE); - - natInfo^.stunStatus:=SCE_NET_CTL_NATINFO_STUN_FAILED; - natInfo^.natType:=SCE_NET_CTL_NATINFO_NAT_TYPE_1; - - Result:=0; -end; - -function ps4_sceNetCtlGetIfStat(ifStat:pSceNetCtlIfStat):Integer; SysV_ABI_CDecl; -begin - if (ifStat=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); - - ifStat^:=Default(SceNetCtlIfStat); - - Result:=0; -end; - -const - SCE_NET_CTL_SSID_LEN =(32 + 1); - SCE_NET_CTL_HOSTNAME_LEN =(255 + 1); - SCE_NET_CTL_AUTH_NAME_LEN =(127 + 1); - SCE_NET_CTL_IPV4_ADDR_STR_LEN=(16); - -type - pSceNetCtlInfo=^SceNetCtlInfo; - SceNetCtlInfo=packed record - Case Byte of - 0:(device:DWORD); - 1:(ether_addr:SceNetEtherAddr); - 2:(mtu:DWORD); - 3:(link:DWORD); - 4:(bssid:SceNetEtherAddr); - 5:(ssid:array[0..SCE_NET_CTL_SSID_LEN-1] of Char); - 6:(wifi_security:DWORD); - 7:(rssi_dbm:Byte); - 8:(rssi_percentage:Byte); - 9:(channel:Byte); - 10:(ip_config:DWORD); - 11:(dhcp_hostname:array[0..SCE_NET_CTL_HOSTNAME_LEN-1] of Char); - 12:(pppoe_auth_name:array[0..SCE_NET_CTL_AUTH_NAME_LEN-1] of Char); - 13:(ip_address:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); - 14:(netmask:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); - 15:(default_route:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); - 16:(primary_dns:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); - 17:(secondary_dns:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); - 18:(http_proxy_config:DWORD); - 19:(http_proxy_server:array[0..SCE_NET_CTL_HOSTNAME_LEN-1] of Char); - 20:(http_proxy_port:WORD); - end; - - -function ps4_sceNetCtlGetInfo(code:Integer;info:pSceNetCtlInfo):Integer; SysV_ABI_CDecl; -begin - if (info=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); - - Result:=SCE_NET_CTL_ERROR_NOT_CONNECTED; - - case code of - SCE_NET_CTL_INFO_DEVICE :FillChar(info^,SizeOf(SceNetCtlInfo.device ),0); - SCE_NET_CTL_INFO_ETHER_ADDR :FillChar(info^,SizeOf(SceNetCtlInfo.ether_addr ),0); - SCE_NET_CTL_INFO_MTU :FillChar(info^,SizeOf(SceNetCtlInfo.mtu ),0); - SCE_NET_CTL_INFO_LINK :FillChar(info^,SizeOf(SceNetCtlInfo.link ),0); - SCE_NET_CTL_INFO_BSSID :FillChar(info^,SizeOf(SceNetCtlInfo.bssid ),0); - SCE_NET_CTL_INFO_SSID :FillChar(info^,SizeOf(SceNetCtlInfo.ssid ),0); - SCE_NET_CTL_INFO_WIFI_SECURITY :FillChar(info^,SizeOf(SceNetCtlInfo.wifi_security ),0); - SCE_NET_CTL_INFO_RSSI_DBM :FillChar(info^,SizeOf(SceNetCtlInfo.rssi_dbm ),0); - SCE_NET_CTL_INFO_RSSI_PERCENTAGE :FillChar(info^,SizeOf(SceNetCtlInfo.rssi_percentage ),0); - SCE_NET_CTL_INFO_CHANNEL :FillChar(info^,SizeOf(SceNetCtlInfo.channel ),0); - SCE_NET_CTL_INFO_IP_CONFIG :FillChar(info^,SizeOf(SceNetCtlInfo.ip_config ),0); - SCE_NET_CTL_INFO_DHCP_HOSTNAME :FillChar(info^,SizeOf(SceNetCtlInfo.dhcp_hostname ),0); - SCE_NET_CTL_INFO_PPPOE_AUTH_NAME :FillChar(info^,SizeOf(SceNetCtlInfo.pppoe_auth_name ),0); - SCE_NET_CTL_INFO_IP_ADDRESS :FillChar(info^,SizeOf(SceNetCtlInfo.ip_address ),0); - SCE_NET_CTL_INFO_NETMASK :FillChar(info^,SizeOf(SceNetCtlInfo.netmask ),0); - SCE_NET_CTL_INFO_DEFAULT_ROUTE :FillChar(info^,SizeOf(SceNetCtlInfo.default_route ),0); - SCE_NET_CTL_INFO_PRIMARY_DNS :FillChar(info^,SizeOf(SceNetCtlInfo.primary_dns ),0); - SCE_NET_CTL_INFO_SECONDARY_DNS :FillChar(info^,SizeOf(SceNetCtlInfo.secondary_dns ),0); - SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG:FillChar(info^,SizeOf(SceNetCtlInfo.http_proxy_config),0); - SCE_NET_CTL_INFO_HTTP_PROXY_SERVER:FillChar(info^,SizeOf(SceNetCtlInfo.http_proxy_server),0); - SCE_NET_CTL_INFO_HTTP_PROXY_PORT :FillChar(info^,SizeOf(SceNetCtlInfo.http_proxy_port ),0); - else - Exit(SCE_NET_CTL_ERROR_INVALID_CODE); - end; - - case code of - SCE_NET_CTL_INFO_DEVICE :Writeln('SCE_NET_CTL_INFO_DEVICE '); - SCE_NET_CTL_INFO_ETHER_ADDR :Writeln('SCE_NET_CTL_INFO_ETHER_ADDR '); - SCE_NET_CTL_INFO_MTU :Writeln('SCE_NET_CTL_INFO_MTU '); - SCE_NET_CTL_INFO_LINK :Writeln('SCE_NET_CTL_INFO_LINK '); - SCE_NET_CTL_INFO_BSSID :Writeln('SCE_NET_CTL_INFO_BSSID '); - SCE_NET_CTL_INFO_SSID :Writeln('SCE_NET_CTL_INFO_SSID '); - SCE_NET_CTL_INFO_WIFI_SECURITY :Writeln('SCE_NET_CTL_INFO_WIFI_SECURITY '); - SCE_NET_CTL_INFO_RSSI_DBM :Writeln('SCE_NET_CTL_INFO_RSSI_DBM '); - SCE_NET_CTL_INFO_RSSI_PERCENTAGE :Writeln('SCE_NET_CTL_INFO_RSSI_PERCENTAGE '); - SCE_NET_CTL_INFO_CHANNEL :Writeln('SCE_NET_CTL_INFO_CHANNEL '); - SCE_NET_CTL_INFO_IP_CONFIG :Writeln('SCE_NET_CTL_INFO_IP_CONFIG '); - SCE_NET_CTL_INFO_DHCP_HOSTNAME :Writeln('SCE_NET_CTL_INFO_DHCP_HOSTNAME '); - SCE_NET_CTL_INFO_PPPOE_AUTH_NAME :Writeln('SCE_NET_CTL_INFO_PPPOE_AUTH_NAME '); - SCE_NET_CTL_INFO_IP_ADDRESS :Writeln('SCE_NET_CTL_INFO_IP_ADDRESS '); - SCE_NET_CTL_INFO_NETMASK :Writeln('SCE_NET_CTL_INFO_NETMASK '); - SCE_NET_CTL_INFO_DEFAULT_ROUTE :Writeln('SCE_NET_CTL_INFO_DEFAULT_ROUTE '); - SCE_NET_CTL_INFO_PRIMARY_DNS :Writeln('SCE_NET_CTL_INFO_PRIMARY_DNS '); - SCE_NET_CTL_INFO_SECONDARY_DNS :Writeln('SCE_NET_CTL_INFO_SECONDARY_DNS '); - SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG:Writeln('SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG'); - SCE_NET_CTL_INFO_HTTP_PROXY_SERVER:Writeln('SCE_NET_CTL_INFO_HTTP_PROXY_SERVER'); - SCE_NET_CTL_INFO_HTTP_PROXY_PORT :Writeln('SCE_NET_CTL_INFO_HTTP_PROXY_PORT '); - else; - end; - -end; - -function ps4_sceNetCtlRegisterCallbackForNpToolkit(func:SceNetCtlCallback;arg:Pointer;cid:PInteger):Integer; SysV_ABI_CDecl; -begin - NetCtlCb.func:=func; - NetCtlCb.arg:=arg; - if (cid<>nil) then cid^:=0; - Result:=0; -end; - -function ps4_sceNetCtlCheckCallbackForNpToolkit():Integer; SysV_ABI_CDecl; -begin - if (NetCtlCb.func<>nil) then - begin - //NetCtlCb.func(SCE_NET_CTL_EVENT_TYPE_DISCONNECTED,NetCtlCb.arg); - end; - Result:=0; end; function Load_libSceNet(Const name:RawByteString):TElf_node; @@ -787,33 +517,8 @@ begin lib^.set_proc($3F8CD95C4EDBA6C0,@ps4_sceNetBandwidthControlSetDefaultParam); end; -function Load_libSceNetCtl(Const name:RawByteString):TElf_node; -var - lib:PLIBRARY; -begin - Result:=TElf_node.Create; - Result.pFileName:=name; - lib:=Result._add_lib('libSceNetCtl'); - lib^.set_proc($824CB4FA868D3389,@ps4_sceNetCtlInit); - lib^.set_proc($678C3008588110B4,@ps4_sceNetCtlTerm); - lib^.set_proc($B813E5AF495BBA22,@ps4_sceNetCtlGetState); - lib^.set_proc($509F99ED0FB8724D,@ps4_sceNetCtlRegisterCallback); - lib^.set_proc($46A9B63A764C0B3D,@ps4_sceNetCtlUnregisterCallback); - lib^.set_proc($890C378903E1BD44,@ps4_sceNetCtlCheckCallback); - lib^.set_proc($D1C06076E3D147E3,@ps4_sceNetCtlGetResult); - lib^.set_proc($24EE32B93B8CA0A2,@ps4_sceNetCtlGetNatInfo); - lib^.set_proc($A1BBB17538B0905F,@ps4_sceNetCtlGetInfo); - lib^.set_proc($B5EB8AE109C94C68,@ps4_sceNetCtlGetIfStat); - - lib:=Result._add_lib('libSceNetCtlForNpToolkit'); - - lib^.set_proc($C08B0ACBE4DF78BB,@ps4_sceNetCtlRegisterCallbackForNpToolkit); - lib^.set_proc($BB9A2AB6520FF85C,@ps4_sceNetCtlCheckCallbackForNpToolkit); -end; - initialization ps4_app.RegistredPreLoad('libSceNet.prx' ,@Load_libSceNet); - ps4_app.RegistredPreLoad('libSceNetCtl.prx',@Load_libSceNetCtl); end. diff --git a/src/ps4_libsceavsetting.pas b/src/ps4_libsceavsetting.pas index ec6a1dbe..62ec50aa 100644 --- a/src/ps4_libsceavsetting.pas +++ b/src/ps4_libsceavsetting.pas @@ -7,7 +7,7 @@ unit ps4_libSceAvSetting; interface uses - subr_dynlib; + subr_dynlib; implementation diff --git a/src/ps4_libscenetctl.pas b/src/ps4_libscenetctl.pas new file mode 100644 index 00000000..12c84f67 --- /dev/null +++ b/src/ps4_libscenetctl.pas @@ -0,0 +1,332 @@ +unit ps4_libSceNetCtl; + +{$mode ObjFPC}{$H+} +{$CALLING SysV_ABI_CDecl} + +interface + +uses + subr_dynlib; + +const + SCE_NET_INET_ADDRSTRLEN=16; + + SCE_NET_ETHER_ADDR_LEN =6; + SCE_NET_ETHER_ADDRSTRLEN=18; + +type + SceNetInAddr_t=DWORD; + + pSceNetInAddr=^SceNetInAddr; + SceNetInAddr=packed record + s_addr:SceNetInAddr_t; + end; + + pSceNetEtherAddr=^SceNetEtherAddr; + SceNetEtherAddr=packed record + data:array[0..SCE_NET_ETHER_ADDR_LEN-1] of Byte; + end; + +implementation + +function ps4_sceNetCtlInit:Integer; +begin + Result:=0; +end; + +procedure ps4_sceNetCtlTerm; +begin + // +end; + +const + SCE_NET_CTL_ERROR_NOT_INITIALIZED =-2143215359; // 0x80412101 + SCE_NET_CTL_ERROR_CALLBACK_MAX =-2143215357; // 0x80412103 + SCE_NET_CTL_ERROR_ID_NOT_FOUND =-2143215356; // 0x80412104 + SCE_NET_CTL_ERROR_INVALID_ID =-2143215355; // 0x80412105 + SCE_NET_CTL_ERROR_INVALID_CODE =-2143215354; // 0x80412106 + SCE_NET_CTL_ERROR_INVALID_ADDR =-2143215353; // 0x80412107 + SCE_NET_CTL_ERROR_NOT_CONNECTED =-2143215352; // 0x80412108 + SCE_NET_CTL_ERROR_NOT_AVAIL =-2143215351; // 0x80412109 + SCE_NET_CTL_ERROR_NETWORK_DISABLED=-2143215347; // 0x8041210D + SCE_NET_CTL_ERROR_DISCONNECT_REQ =-2143215346; // 0x8041210E + SCE_NET_CTL_ERROR_INVALID_TYPE =-2143215345; // 0x8041210F + SCE_NET_CTL_ERROR_INVALID_SIZE =-2143215343; // 0x80412111 + SCE_NET_CTL_ERROR_ETHERNET_PLUGOUT=-2143215339; // 0x80412115 + SCE_NET_CTL_ERROR_WIFI_DEAUTHED =-2143215338; // 0x80412116 + SCE_NET_CTL_ERROR_WIFI_BEACON_LOST=-2143215337; // 0x80412117 + + // state + SCE_NET_CTL_STATE_DISCONNECTED=0; + SCE_NET_CTL_STATE_CONNECTING =1; + SCE_NET_CTL_STATE_IPOBTAINING =2; + SCE_NET_CTL_STATE_IPOBTAINED =3; + + // event type + SCE_NET_CTL_EVENT_TYPE_DISCONNECTED=1; + SCE_NET_CTL_EVENT_TYPE_DISCONNECT_REQ_FINISHED=2; + SCE_NET_CTL_EVENT_TYPE_IPOBTAINED=3; + + // info code + SCE_NET_CTL_INFO_DEVICE = 1; + SCE_NET_CTL_INFO_ETHER_ADDR = 2; + SCE_NET_CTL_INFO_MTU = 3; + SCE_NET_CTL_INFO_LINK = 4; + SCE_NET_CTL_INFO_BSSID = 5; + SCE_NET_CTL_INFO_SSID = 6; + SCE_NET_CTL_INFO_WIFI_SECURITY = 7; + SCE_NET_CTL_INFO_RSSI_DBM = 8; + SCE_NET_CTL_INFO_RSSI_PERCENTAGE = 9; + SCE_NET_CTL_INFO_CHANNEL =10; + SCE_NET_CTL_INFO_IP_CONFIG =11; + SCE_NET_CTL_INFO_DHCP_HOSTNAME =12; + SCE_NET_CTL_INFO_PPPOE_AUTH_NAME =13; + SCE_NET_CTL_INFO_IP_ADDRESS =14; + SCE_NET_CTL_INFO_NETMASK =15; + SCE_NET_CTL_INFO_DEFAULT_ROUTE =16; + SCE_NET_CTL_INFO_PRIMARY_DNS =17; + SCE_NET_CTL_INFO_SECONDARY_DNS =18; + SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG=19; + SCE_NET_CTL_INFO_HTTP_PROXY_SERVER=20; + SCE_NET_CTL_INFO_HTTP_PROXY_PORT =21; + SCE_NET_CTL_INFO_RESERVED1 =22; + SCE_NET_CTL_INFO_RESERVED2 =23; + +function ps4_sceNetCtlGetState(state:PInteger):Integer; +begin + if (state=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); + state^:=SCE_NET_CTL_STATE_DISCONNECTED; + Result:=0; +end; + +type + SceNetCtlCallback=Procedure(eventType:Integer;arg:Pointer); + +var + NetCtlCb:packed record + func:SceNetCtlCallback; + arg:Pointer; + end; + +function ps4_sceNetCtlRegisterCallback(func:SceNetCtlCallback;arg:Pointer;cid:PInteger):Integer; +begin + NetCtlCb.func:=func; + NetCtlCb.arg :=arg; + if (cid<>nil) then cid^:=0; + Result:=0; +end; + +function ps4_sceNetCtlUnregisterCallback(cid:Integer):Integer; +begin + Result:=0; +end; + +function ps4_sceNetCtlCheckCallback():Integer; +begin + if (NetCtlCb.func<>nil) then + begin + //NetCtlCb.func(SCE_NET_CTL_EVENT_TYPE_DISCONNECTED,NetCtlCb.arg); + end; + Result:=0; +end; + +function ps4_sceNetCtlGetResult(eventType:Integer;errorCode:PInteger):Integer; +begin + if (errorCode=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); + errorCode^:=SCE_NET_CTL_ERROR_ETHERNET_PLUGOUT; + Result:=0; +end; + +type + pSceNetCtlNatInfo=^SceNetCtlNatInfo; + SceNetCtlNatInfo=packed record + size:Integer; + stunStatus:Integer; + natType:Integer; + mappedAddr:SceNetInAddr; + end; + + pSceNetCtlIfStat=^SceNetCtlIfStat; + SceNetCtlIfStat=packed record + device :DWORD; //SCE_NET_CTL_DEVICE + _align :DWORD; + txBytes:QWORD; + rxBytes:QWORD; + reserved:array[0..7] of DWORD; + end; + +const + //SceNetCtlGetNatInfo + SCE_NET_CTL_NATINFO_STUN_UNCHECKED=0; + SCE_NET_CTL_NATINFO_STUN_FAILED =1; + SCE_NET_CTL_NATINFO_STUN_OK =2; + + SCE_NET_CTL_NATINFO_NAT_TYPE_1 =1; + SCE_NET_CTL_NATINFO_NAT_TYPE_2 =2; + SCE_NET_CTL_NATINFO_NAT_TYPE_3 =3; + + //SceNetCtlGetIfStat + SCE_NET_CTL_DEVICE_WIRED =0; + SCE_NET_CTL_DEVICE_WIRELESS =1; + +function ps4_sceNetCtlGetNatInfo(natInfo:pSceNetCtlNatInfo):Integer; +begin + if (natInfo=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); + if (natInfo^.size<>SizeOf(SceNetCtlNatInfo)) then Exit(SCE_NET_CTL_ERROR_INVALID_SIZE); + + natInfo^.stunStatus:=SCE_NET_CTL_NATINFO_STUN_FAILED; + natInfo^.natType:=SCE_NET_CTL_NATINFO_NAT_TYPE_1; + + Result:=0; +end; + +function ps4_sceNetCtlGetIfStat(ifStat:pSceNetCtlIfStat):Integer; +begin + if (ifStat=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); + + ifStat^:=Default(SceNetCtlIfStat); + + Result:=0; +end; + +const + SCE_NET_CTL_SSID_LEN =(32 + 1); + SCE_NET_CTL_HOSTNAME_LEN =(255 + 1); + SCE_NET_CTL_AUTH_NAME_LEN =(127 + 1); + SCE_NET_CTL_IPV4_ADDR_STR_LEN=(16); + +type + pSceNetCtlInfo=^SceNetCtlInfo; + SceNetCtlInfo=packed record + Case Byte of + 0:(device:DWORD); + 1:(ether_addr:SceNetEtherAddr); + 2:(mtu:DWORD); + 3:(link:DWORD); + 4:(bssid:SceNetEtherAddr); + 5:(ssid:array[0..SCE_NET_CTL_SSID_LEN-1] of Char); + 6:(wifi_security:DWORD); + 7:(rssi_dbm:Byte); + 8:(rssi_percentage:Byte); + 9:(channel:Byte); + 10:(ip_config:DWORD); + 11:(dhcp_hostname:array[0..SCE_NET_CTL_HOSTNAME_LEN-1] of Char); + 12:(pppoe_auth_name:array[0..SCE_NET_CTL_AUTH_NAME_LEN-1] of Char); + 13:(ip_address:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); + 14:(netmask:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); + 15:(default_route:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); + 16:(primary_dns:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); + 17:(secondary_dns:array[0..SCE_NET_CTL_IPV4_ADDR_STR_LEN-1] of Char); + 18:(http_proxy_config:DWORD); + 19:(http_proxy_server:array[0..SCE_NET_CTL_HOSTNAME_LEN-1] of Char); + 20:(http_proxy_port:WORD); + end; + + +function ps4_sceNetCtlGetInfo(code:Integer;info:pSceNetCtlInfo):Integer; +begin + if (info=nil) then Exit(SCE_NET_CTL_ERROR_INVALID_ADDR); + + Result:=SCE_NET_CTL_ERROR_NOT_CONNECTED; + + case code of + SCE_NET_CTL_INFO_DEVICE :FillChar(info^,SizeOf(SceNetCtlInfo.device ),0); + SCE_NET_CTL_INFO_ETHER_ADDR :FillChar(info^,SizeOf(SceNetCtlInfo.ether_addr ),0); + SCE_NET_CTL_INFO_MTU :FillChar(info^,SizeOf(SceNetCtlInfo.mtu ),0); + SCE_NET_CTL_INFO_LINK :FillChar(info^,SizeOf(SceNetCtlInfo.link ),0); + SCE_NET_CTL_INFO_BSSID :FillChar(info^,SizeOf(SceNetCtlInfo.bssid ),0); + SCE_NET_CTL_INFO_SSID :FillChar(info^,SizeOf(SceNetCtlInfo.ssid ),0); + SCE_NET_CTL_INFO_WIFI_SECURITY :FillChar(info^,SizeOf(SceNetCtlInfo.wifi_security ),0); + SCE_NET_CTL_INFO_RSSI_DBM :FillChar(info^,SizeOf(SceNetCtlInfo.rssi_dbm ),0); + SCE_NET_CTL_INFO_RSSI_PERCENTAGE :FillChar(info^,SizeOf(SceNetCtlInfo.rssi_percentage ),0); + SCE_NET_CTL_INFO_CHANNEL :FillChar(info^,SizeOf(SceNetCtlInfo.channel ),0); + SCE_NET_CTL_INFO_IP_CONFIG :FillChar(info^,SizeOf(SceNetCtlInfo.ip_config ),0); + SCE_NET_CTL_INFO_DHCP_HOSTNAME :FillChar(info^,SizeOf(SceNetCtlInfo.dhcp_hostname ),0); + SCE_NET_CTL_INFO_PPPOE_AUTH_NAME :FillChar(info^,SizeOf(SceNetCtlInfo.pppoe_auth_name ),0); + SCE_NET_CTL_INFO_IP_ADDRESS :FillChar(info^,SizeOf(SceNetCtlInfo.ip_address ),0); + SCE_NET_CTL_INFO_NETMASK :FillChar(info^,SizeOf(SceNetCtlInfo.netmask ),0); + SCE_NET_CTL_INFO_DEFAULT_ROUTE :FillChar(info^,SizeOf(SceNetCtlInfo.default_route ),0); + SCE_NET_CTL_INFO_PRIMARY_DNS :FillChar(info^,SizeOf(SceNetCtlInfo.primary_dns ),0); + SCE_NET_CTL_INFO_SECONDARY_DNS :FillChar(info^,SizeOf(SceNetCtlInfo.secondary_dns ),0); + SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG:FillChar(info^,SizeOf(SceNetCtlInfo.http_proxy_config),0); + SCE_NET_CTL_INFO_HTTP_PROXY_SERVER:FillChar(info^,SizeOf(SceNetCtlInfo.http_proxy_server),0); + SCE_NET_CTL_INFO_HTTP_PROXY_PORT :FillChar(info^,SizeOf(SceNetCtlInfo.http_proxy_port ),0); + else + Exit(SCE_NET_CTL_ERROR_INVALID_CODE); + end; + + case code of + SCE_NET_CTL_INFO_DEVICE :Writeln('SCE_NET_CTL_INFO_DEVICE '); + SCE_NET_CTL_INFO_ETHER_ADDR :Writeln('SCE_NET_CTL_INFO_ETHER_ADDR '); + SCE_NET_CTL_INFO_MTU :Writeln('SCE_NET_CTL_INFO_MTU '); + SCE_NET_CTL_INFO_LINK :Writeln('SCE_NET_CTL_INFO_LINK '); + SCE_NET_CTL_INFO_BSSID :Writeln('SCE_NET_CTL_INFO_BSSID '); + SCE_NET_CTL_INFO_SSID :Writeln('SCE_NET_CTL_INFO_SSID '); + SCE_NET_CTL_INFO_WIFI_SECURITY :Writeln('SCE_NET_CTL_INFO_WIFI_SECURITY '); + SCE_NET_CTL_INFO_RSSI_DBM :Writeln('SCE_NET_CTL_INFO_RSSI_DBM '); + SCE_NET_CTL_INFO_RSSI_PERCENTAGE :Writeln('SCE_NET_CTL_INFO_RSSI_PERCENTAGE '); + SCE_NET_CTL_INFO_CHANNEL :Writeln('SCE_NET_CTL_INFO_CHANNEL '); + SCE_NET_CTL_INFO_IP_CONFIG :Writeln('SCE_NET_CTL_INFO_IP_CONFIG '); + SCE_NET_CTL_INFO_DHCP_HOSTNAME :Writeln('SCE_NET_CTL_INFO_DHCP_HOSTNAME '); + SCE_NET_CTL_INFO_PPPOE_AUTH_NAME :Writeln('SCE_NET_CTL_INFO_PPPOE_AUTH_NAME '); + SCE_NET_CTL_INFO_IP_ADDRESS :Writeln('SCE_NET_CTL_INFO_IP_ADDRESS '); + SCE_NET_CTL_INFO_NETMASK :Writeln('SCE_NET_CTL_INFO_NETMASK '); + SCE_NET_CTL_INFO_DEFAULT_ROUTE :Writeln('SCE_NET_CTL_INFO_DEFAULT_ROUTE '); + SCE_NET_CTL_INFO_PRIMARY_DNS :Writeln('SCE_NET_CTL_INFO_PRIMARY_DNS '); + SCE_NET_CTL_INFO_SECONDARY_DNS :Writeln('SCE_NET_CTL_INFO_SECONDARY_DNS '); + SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG:Writeln('SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG'); + SCE_NET_CTL_INFO_HTTP_PROXY_SERVER:Writeln('SCE_NET_CTL_INFO_HTTP_PROXY_SERVER'); + SCE_NET_CTL_INFO_HTTP_PROXY_PORT :Writeln('SCE_NET_CTL_INFO_HTTP_PROXY_PORT '); + else; + end; + +end; + +function ps4_sceNetCtlRegisterCallbackForNpToolkit(func:SceNetCtlCallback;arg:Pointer;cid:PInteger):Integer; +begin + NetCtlCb.func:=func; + NetCtlCb.arg:=arg; + if (cid<>nil) then cid^:=0; + Result:=0; +end; + +function ps4_sceNetCtlCheckCallbackForNpToolkit():Integer; +begin + if (NetCtlCb.func<>nil) then + begin + //NetCtlCb.func(SCE_NET_CTL_EVENT_TYPE_DISCONNECTED,NetCtlCb.arg); + end; + Result:=0; +end; + +function Load_libSceNetCtl(name:pchar):p_lib_info; +var + lib:TLIBRARY; +begin + Result:=obj_new_int('libSceNetCtl'); + + lib:=Result^.add_lib('libSceNetCtl'); + lib.set_proc($824CB4FA868D3389,@ps4_sceNetCtlInit); + lib.set_proc($678C3008588110B4,@ps4_sceNetCtlTerm); + lib.set_proc($B813E5AF495BBA22,@ps4_sceNetCtlGetState); + lib.set_proc($509F99ED0FB8724D,@ps4_sceNetCtlRegisterCallback); + lib.set_proc($46A9B63A764C0B3D,@ps4_sceNetCtlUnregisterCallback); + lib.set_proc($890C378903E1BD44,@ps4_sceNetCtlCheckCallback); + lib.set_proc($D1C06076E3D147E3,@ps4_sceNetCtlGetResult); + lib.set_proc($24EE32B93B8CA0A2,@ps4_sceNetCtlGetNatInfo); + lib.set_proc($A1BBB17538B0905F,@ps4_sceNetCtlGetInfo); + lib.set_proc($B5EB8AE109C94C68,@ps4_sceNetCtlGetIfStat); + + lib:=Result^.add_lib('libSceNetCtlForNpToolkit'); + lib.set_proc($C08B0ACBE4DF78BB,@ps4_sceNetCtlRegisterCallbackForNpToolkit); + lib.set_proc($BB9A2AB6520FF85C,@ps4_sceNetCtlCheckCallbackForNpToolkit); +end; + +var + stub:t_int_file; + +initialization + reg_int_file(stub,'libSceNetCtl.prx',@Load_libSceNetCtl); + +end. + diff --git a/tools/readself/readself.lpr b/tools/readself/readself.lpr index 1bee22b9..2672bfb8 100644 --- a/tools/readself/readself.lpr +++ b/tools/readself/readself.lpr @@ -1792,6 +1792,7 @@ type enc:RawByteString; dst:RawByteString; nid:QWORD; + mib:WORD; lib:WORD; end; @@ -1820,6 +1821,7 @@ begin end; end; + info^.mib:=nModId; info^.lib:=nLibId; end; @@ -1866,6 +1868,7 @@ var lib:TLIBRARY; lib_array:array of TLIBRARY; + mod_array:array of TLIBRARY; nid_info:t_nid_info; @@ -1882,6 +1885,19 @@ var lib_array[id]:=lib; end; + procedure set_mod(id:Word;lib:TLIBRARY); inline; + var + i:Integer; + begin + i:=Length(mod_array); + if (i<=id) then + begin + i:=id+1; + SetLength(mod_array,i); + end; + mod_array[id]:=lib; + end; + begin SetLength(lib_array,0); @@ -1908,6 +1924,18 @@ begin set_lib(lu.id,lib); end; + DT_SCE_MODULE_INFO, + DT_SCE_NEEDED_MODULE: + begin + lu.value:=d_entry^.d_un.d_val; + str:=@obj^.dt_strtab_addr[lu.name_offset]; + + lib.Name :=str; + lib.Import:=(d_entry^.d_tag=DT_SCE_NEEDED_MODULE); + + set_mod(lu.id,lib); + end; + else; end; @@ -1946,6 +1974,8 @@ begin Write(BaseEncName(PChar(nid_info.enc)),'|'); + Write(mod_array[nid_info.mib].Name,'|'); + Write(lib_array[nid_info.lib].Name,'|'); Write(nid_info.dst);