mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
59368f3b13
commit
d963be0098
|
@ -1471,6 +1471,11 @@
|
|||
<Filename Value="sys\sockopt.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
<Unit>
|
||||
<Filename Value="src\ps4_libscenetctl.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
<UnitName Value="ps4_libSceNetCtl"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
|
|
|
@ -79,6 +79,7 @@ uses
|
|||
ps4_libSceSaveData,
|
||||
ps4_libSceAudioOut,
|
||||
ps4_libSceAudioIn,
|
||||
ps4_libSceNetCtl,
|
||||
//ps4_libSceDiscMap,
|
||||
//internal libs
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ unit ps4_libSceAvSetting;
|
|||
interface
|
||||
|
||||
uses
|
||||
subr_dynlib;
|
||||
subr_dynlib;
|
||||
|
||||
implementation
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue