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);