/* Copyright (C) 2025 etaHEN / LightningMods
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
. */
#pragma once
#include
#include
#define SCE_OK 0
struct AppMessage {
static constexpr size_t PAYLOAD_SIZE = 8192;
uint32_t sender;
uint32_t msgType;
char payload[PAYLOAD_SIZE];
uint32_t payloadSize;
uint64_t timestamp;
};
typedef struct
{
unsigned int size;
uint32_t userId;
} SceShellUIUtilLaunchByUriParam;
typedef struct
{
int32_t type; // 0x00
int32_t req_id; // 0x04
int32_t priority; // 0x08
int32_t msg_id; // 0x0C
int32_t target_id; // 0x10
int32_t user_id; // 0x14
int32_t unk1; // 0x18
int32_t unk2; // 0x1C
int32_t app_id; // 0x20
int32_t error_num; // 0x24
int32_t unk3; // 0x28
char use_icon_image_uri; // 0x2C
char message[1024]; // 0x2D
char uri[1024]; // 0x42D
char unkstr[1024]; // 0x82D
} OrbisNotificationRequest; // Size = 0xC30
#define SCE_NET_CTL_STATE_DISCONNECTED 0
#define SCE_NET_CTL_STATE_CONNECTING 1
#define SCE_NET_CTL_STATE_IPOBTAINING 2
#define SCE_NET_CTL_STATE_IPOBTAINED 3
/* event type */
#define SCE_NET_CTL_EVENT_TYPE_DISCONNECTED 1
#define SCE_NET_CTL_EVENT_TYPE_DISCONNECT_REQ_FINISHED 2
#define SCE_NET_CTL_EVENT_TYPE_IPOBTAINED 3
/* info code */
#define SCE_NET_CTL_INFO_DEVICE 1
#define SCE_NET_CTL_INFO_ETHER_ADDR 2
#define SCE_NET_CTL_INFO_MTU 3
#define SCE_NET_CTL_INFO_LINK 4
#define SCE_NET_CTL_INFO_BSSID 5
#define SCE_NET_CTL_INFO_SSID 6
#define SCE_NET_CTL_INFO_WIFI_SECURITY 7
#define SCE_NET_CTL_INFO_RSSI_DBM 8
#define SCE_NET_CTL_INFO_RSSI_PERCENTAGE 9
#define SCE_NET_CTL_INFO_CHANNEL 10
#define SCE_NET_CTL_INFO_IP_CONFIG 11
#define SCE_NET_CTL_INFO_DHCP_HOSTNAME 12
#define SCE_NET_CTL_INFO_PPPOE_AUTH_NAME 13
#define SCE_NET_CTL_INFO_IP_ADDRESS 14
#define SCE_NET_CTL_INFO_NETMASK 15
#define SCE_NET_CTL_INFO_DEFAULT_ROUTE 16
#define SCE_NET_CTL_INFO_PRIMARY_DNS 17
#define SCE_NET_CTL_INFO_SECONDARY_DNS 18
#define SCE_NET_CTL_INFO_HTTP_PROXY_CONFIG 19
#define SCE_NET_CTL_INFO_HTTP_PROXY_SERVER 20
#define SCE_NET_CTL_INFO_HTTP_PROXY_PORT 21
#define SCE_NET_CTL_INFO_RESERVED1 22
#define SCE_NET_CTL_INFO_RESERVED2 23
/* device */
#define SCE_NET_CTL_DEVICE_WIRED 0
#define SCE_NET_CTL_DEVICE_WIRELESS 1
/* link */
#define SCE_NET_CTL_LINK_DISCONNECTED 0
#define SCE_NET_CTL_LINK_CONNECTED 1
/* wifi_security */
#define SCE_NET_CTL_WIFI_SECURITY_NOAUTH 0
#define SCE_NET_CTL_WIFI_SECURITY_WEP 1
#define SCE_NET_CTL_WIFI_SECURITY_WPAPSK_WPA2PSK 2
#define SCE_NET_CTL_WIFI_SECURITY_WPAPSK_TKIP 3
#define SCE_NET_CTL_WIFI_SECURITY_WPAPSK_AES 4
#define SCE_NET_CTL_WIFI_SECURITY_WPA2PSK_TKIP 5
#define SCE_NET_CTL_WIFI_SECURITY_WPA2PSK_AES 6
#define SCE_NET_CTL_WIFI_SECURITY_UNSUPPORTED 7
/* ip_config */
#define SCE_NET_CTL_IP_DHCP 0
#define SCE_NET_CTL_IP_STATIC 1
#define SCE_NET_CTL_IP_PPPOE 2
/* http_proxy_config */
#define SCE_NET_CTL_HTTP_PROXY_OFF 0
#define SCE_NET_CTL_HTTP_PROXY_ON 1
#define SCE_NET_CTL_SSID_LEN (32 + 1)
#define SCE_NET_CTL_WIFI_SECURITY_KEY_LEN (64 + 1)
#define SCE_NET_CTL_AUTH_NAME_LEN (127 + 1)
#define SCE_NET_CTL_AUTH_KEY_LEN (127 + 1)
#define SCE_NET_CTL_HOSTNAME_LEN (255 + 1)
#define SCE_NET_CTL_IPV4_ADDR_STR_LEN (16)
#define SCE_NET_ETHER_ADDR_LEN 6
#define SCE_NET_ETHER_ADDRSTRLEN 18
typedef struct SceNetEtherAddr {
uint8_t data[SCE_NET_ETHER_ADDR_LEN];
} SceNetEtherAddr;
typedef void (*SceNetCtlCallback)(
int eventType, /* SCE_NET_CTL_EVENT_TYPE_XXX */
void *arg
);
typedef union SceNetCtlInfo {
uint32_t device;
SceNetEtherAddr ether_addr;
uint32_t mtu;
uint32_t link;
SceNetEtherAddr bssid;
char ssid[SCE_NET_CTL_SSID_LEN];
uint32_t wifi_security;
int32_t rssi_dbm;
uint8_t rssi_percentage;
uint8_t channel;
uint32_t ip_config;
char dhcp_hostname[SCE_NET_CTL_HOSTNAME_LEN];
char pppoe_auth_name[SCE_NET_CTL_AUTH_NAME_LEN];
char ip_address[SCE_NET_CTL_IPV4_ADDR_STR_LEN];
char netmask[SCE_NET_CTL_IPV4_ADDR_STR_LEN];
char default_route[SCE_NET_CTL_IPV4_ADDR_STR_LEN];
char primary_dns[SCE_NET_CTL_IPV4_ADDR_STR_LEN];
char secondary_dns[SCE_NET_CTL_IPV4_ADDR_STR_LEN];
uint32_t http_proxy_config;
char http_proxy_server[SCE_NET_CTL_HOSTNAME_LEN];
uint16_t http_proxy_port;
} SceNetCtlInfo;
// Token: 0x040002CA RID: 714
#define SCE_NET_SHOW_BUFFER_SIZE 8192
// Token: 0x040002CB RID: 715
#define SCE_NET_SHOW_NETSTAT_BUFFER_SIZE 65536
// Token: 0x040002CC RID: 716
#define SCE_NET_ADDR_STR_SIZE 18
// Token: 0x02000060 RID: 96
typedef enum SceNetIfName
{
// Token: 0x040002CE RID: 718
SCE_NET_IF_NAME_UNKNOWN = -2,
// Token: 0x040002CF RID: 719
SCE_NET_IF_NAME_NONE,
// Token: 0x040002D0 RID: 720
SCE_NET_IF_NAME_LO0,
// Token: 0x040002D1 RID: 721
SCE_NET_IF_NAME_PHYSICAL,
// Token: 0x040002D2 RID: 722
SCE_NET_IF_NAME_ETH0 = 1,
// Token: 0x040002D3 RID: 723
SCE_NET_IF_NAME_ETH1,
// Token: 0x040002D4 RID: 724
SCE_NET_IF_NAME_DBG0,
// Token: 0x040002D5 RID: 725
SCE_NET_IF_NAME_WLAN0,
// Token: 0x040002D6 RID: 726
SCE_NET_IF_NAME_WLAN1,
// Token: 0x040002D7 RID: 727
SCE_NET_IF_NAME_GBE0,
// Token: 0x040002D8 RID: 728
SCE_NET_IF_NAME_BT0,
// Token: 0x040002D9 RID: 729
SCE_NET_IF_NAME_PHONE0,
// Token: 0x040002DA RID: 730
SCE_NET_IF_NAME_VIRTUAL,
// Token: 0x040002DB RID: 731
SCE_NET_IF_NAME_PPPOE0 = 9,
// Token: 0x040002DC RID: 732
SCE_NET_IF_NAME_MAX
} SceNetIfName;
// Token: 0x02000061 RID: 97
typedef enum SceNetSockInfo
{
// Token: 0x040002DE RID: 734
SCE_NET_SOCKINFO_ALL = 1,
// Token: 0x040002DF RID: 735
SCE_NET_SOCKINFO_NAME = 2,
// Token: 0x040002E0 RID: 736
SCE_NET_SOCKINFO_EPOLL = 32,
// Token: 0x040002E1 RID: 737
SCE_NET_SOCKINFO_TIME_WAIT = 64,
// Token: 0x040002E2 RID: 738
SCE_NET_SOCKINFO_IP46 = 4096,
// Token: 0x040002E3 RID: 739
SCE_NET_SOCKINFO_SYSTEM = 65536,
// Token: 0x040002E4 RID: 740
SCE_NET_SOCKINFO_IPV6 = 131072,
// Token: 0x040002E5 RID: 741
SCE_NET_SOCKINFO_DEBUGGABLE_ONLY = 262144
} SceNetSockInfo;
// Token: 0x02000062 RID: 98
typedef enum SceNetIfListFlag
{
// Token: 0x040002E7 RID: 743
SCE_NET_IF_LIST_F_UP = 1U,
// Token: 0x040002E8 RID: 744
SCE_NET_IF_LIST_F_BROADCAST = 2U,
// Token: 0x040002E9 RID: 745
SCE_NET_IF_LIST_F_LOOPBACK = 8U,
// Token: 0x040002EA RID: 746
SCE_NET_IF_LIST_F_POINTOPOINT = 16U,
// Token: 0x040002EB RID: 747
SCE_NET_IF_LIST_F_RUNNING = 64U,
// Token: 0x040002EC RID: 748
SCE_NET_IF_LIST_F_MULTICAST = 32768U,
// Token: 0x040002ED RID: 749
SCE_NET_IF_LIST_F_STATIC = 8388608U,
// Token: 0x040002EE RID: 750
SCE_NET_IF_LIST_F_INTERNET = 16777216U
} SceNetIfListFlag;
// Token: 0x02000063 RID: 99
typedef enum SceNetIfListIn6Flag
{
// Token: 0x040002F0 RID: 752
SCE_NET_IF_LIST_IN6_IFF_TENTATIVE = 2U,
// Token: 0x040002F1 RID: 753
SCE_NET_IF_LIST_IN6_IFF_DUPLICATED = 4U,
// Token: 0x040002F2 RID: 754
SCE_NET_IF_LIST_IN6_IFF_ASSIGNED_BY_AUTOCONF = 268435456U,
// Token: 0x040002F3 RID: 755
SCE_NET_IF_LIST_IN6_IFF_RA_ENABLED = 536870912U,
// Token: 0x040002F4 RID: 756
SCE_NET_IF_LIST_IN6_IFF_RA_M_FLAG = 1073741824U,
// Token: 0x040002F5 RID: 757
SCE_NET_IF_LIST_IN6_IFF_RA_O_FLAG = 2147483648U
} SceNetIfListIn6Flag;
// Token: 0x02000064 RID: 100
typedef enum SceNetIfListType
{
// Token: 0x040002F7 RID: 759
SCE_NET_IF_LIST_TYPE_UNKNOWN,
// Token: 0x040002F8 RID: 760
SCE_NET_IF_LIST_TYPE_ETHERNET,
// Token: 0x040002F9 RID: 761
SCE_NET_IF_LIST_TYPE_WLAN,
// Token: 0x040002FA RID: 762
SCE_NET_IF_LIST_TYPE_BT,
// Token: 0x040002FB RID: 763
SCE_NET_IF_LIST_TYPE_PHONE
} SceNetIfListType;
// Token: 0x02000065 RID: 101
typedef enum SceNetConfigEtherLinkMode
{
// Token: 0x040002FD RID: 765
SCE_NET_CONFIG_ETHER_LINK_MODE_OFF = 0,
// Token: 0x040002FE RID: 766
SCE_NET_CONFIG_ETHER_LINK_MODE_ON = 1,
// Token: 0x040002FF RID: 767
SCE_NET_CONFIG_ETHER_LINK_MODE_FD = 2,
// Token: 0x04000300 RID: 768
SCE_NET_CONFIG_ETHER_LINK_MODE_AUTO = 4,
// Token: 0x04000301 RID: 769
SCE_NET_CONFIG_ETHER_LINK_MODE_10M = 16,
// Token: 0x04000302 RID: 770
SCE_NET_CONFIG_ETHER_LINK_MODE_100M = 32,
// Token: 0x04000303 RID: 771
SCE_NET_CONFIG_ETHER_LINK_MODE_1G = 64,
// Token: 0x04000304 RID: 772
SCE_NET_CONFIG_ETHER_LINK_MODE_2G5 = 128,
// Token: 0x04000305 RID: 773
SCE_NET_CONFIG_ETHER_LINK_MODE_5G = 256,
// Token: 0x04000306 RID: 774
SCE_NET_CONFIG_ETHER_LINK_MODE_10G = 512,
// Token: 0x04000307 RID: 775
SCE_NET_CONFIG_ETHER_LINK_MODE_10M_HD = 17,
// Token: 0x04000308 RID: 776
SCE_NET_CONFIG_ETHER_LINK_MODE_10M_FD = 19,
// Token: 0x04000309 RID: 777
SCE_NET_CONFIG_ETHER_LINK_MODE_100M_HD = 33,
// Token: 0x0400030A RID: 778
SCE_NET_CONFIG_ETHER_LINK_MODE_100M_FD = 35,
// Token: 0x0400030B RID: 779
SCE_NET_CONFIG_ETHER_LINK_MODE_1G_FD = 67,
// Token: 0x0400030C RID: 780
SCE_NET_CONFIG_ETHER_LINK_MODE_2G5_FD = 131,
// Token: 0x0400030D RID: 781
SCE_NET_CONFIG_ETHER_LINK_MODE_5G_FD = 259,
// Token: 0x0400030E RID: 782
SCE_NET_CONFIG_ETHER_LINK_MODE_10G_FD = 515,
// Token: 0x0400030F RID: 783
SCE_NET_CONFIG_ETHER_LINK_MODE_AUTO_10M_HD = 21,
// Token: 0x04000310 RID: 784
SCE_NET_CONFIG_ETHER_LINK_MODE_AUTO_10M_FD = 23,
// Token: 0x04000311 RID: 785
SCE_NET_CONFIG_ETHER_LINK_MODE_AUTO_100M_HD = 37,
// Token: 0x04000312 RID: 786
SCE_NET_CONFIG_ETHER_LINK_MODE_AUTO_100M_FD = 39,
// Token: 0x04000313 RID: 787
SCE_NET_CONFIG_ETHER_LINK_MODE_AUTO_1G_FD = 71,
// Token: 0x04000314 RID: 788
SCE_NET_CONFIG_ETHER_LINK_MODE_AUTO_ALL = 119
} SceNetConfigEtherLinkMode;
// Token: 0x02000067 RID: 103
typedef struct SceNetInAddr
{
// Token: 0x04000316 RID: 790
uint32_t s_addr;
} SceNetInAddr;
// Token: 0x02000068 RID: 104
typedef struct SceNetIfListAddr
{
// Token: 0x04000317 RID: 791
SceNetInAddr addr;
// Token: 0x04000318 RID: 792
SceNetInAddr dstaddr;
// Token: 0x04000319 RID: 793
SceNetInAddr broadaddr;
// Token: 0x0400031A RID: 794
SceNetInAddr netmask;
} SceNetIfListAddr;
// Token: 0x02000069 RID: 105
typedef struct SceNetIn6Addr
{
// Token: 0x0400031B RID: 795
uint8_t __u6_addr8[16];
} SceNetIn6Addr;
// Token: 0x0200006A RID: 106
typedef struct SceNetIfListAddr6
{
// Token: 0x0400031C RID: 796
SceNetIn6Addr addr;
} SceNetIfListAddr6;
// Token: 0x0200006B RID: 107
typedef struct SceNetIfListPacketStatistics
{
// Token: 0x0400031D RID: 797
uint64_t allBytes;
// Token: 0x0400031E RID: 798
uint64_t allPackets;
// Token: 0x0400031F RID: 799
uint64_t broadcastBytes;
// Token: 0x04000320 RID: 800
uint64_t broadcastPackets;
// Token: 0x04000321 RID: 801
uint64_t multicastBytes;
// Token: 0x04000322 RID: 802
uint64_t multicastPackets;
// Token: 0x04000323 RID: 803
uint64_t droppedPackets;
// Token: 0x04000324 RID: 804
uint64_t errorPackets;
} SceNetIfListPacketStatistics;
// Token: 0x0200006C RID: 108
typedef struct SceNetIfListStatistics
{
// Token: 0x04000325 RID: 805
SceNetIfListPacketStatistics tx;
// Token: 0x04000326 RID: 806
SceNetIfListPacketStatistics rx;
} SceNetIfListStatistics;
// Token: 0x0200006D RID: 109
typedef struct SceNetIfList
{
// Token: 0x04000327 RID: 807
uint8_t ifname[16];
// Token: 0x04000328 RID: 808
uint8_t dstifname[16];
// Token: 0x04000329 RID: 809
int ifindex;
// Token: 0x0400032A RID: 810
int dstifindex;
// Token: 0x0400032B RID: 811
SceNetIfListAddr addrs[2];
// Token: 0x0400032C RID: 812
SceNetIfListFlag ifflags;
// Token: 0x0400032D RID: 813
SceNetIfListType type;
// Token: 0x0400032E RID: 814
SceNetEtherAddr addr;
// Token: 0x0400032F RID: 815
int mtu;
// Token: 0x04000330 RID: 816
int maxmtu;
// Token: 0x04000331 RID: 817
SceNetIfListStatistics drv_statistics;
// Token: 0x04000332 RID: 818
SceNetIfListStatistics emu_statistics;
// Token: 0x04000333 RID: 819
SceNetConfigEtherLinkMode link_status;
// Token: 0x04000334 RID: 820
int reserved1;
// Token: 0x04000335 RID: 821
int total_use_timer;
// Token: 0x04000336 RID: 822
int tx_bps;
// Token: 0x04000337 RID: 823
int rx_bps;
// Token: 0x04000338 RID: 824
int max_tx_bps;
// Token: 0x04000339 RID: 825
int max_rx_bps;
// Token: 0x0400033A RID: 826
SceNetIfListAddr6 addrs6[2];
// Token: 0x0400033B RID: 827
uint32_t addrs6_plen[2];
// Token: 0x0400033C RID: 828
SceNetIfListIn6Flag addrs6_flags[2];
// Token: 0x0400033D RID: 829
uint8_t reserved[52];
} SceNetIfList;
typedef struct
{
uint64_t pad0;
char version_str[0x1C];
uint32_t version;
uint64_t pad1;
} OrbisKernelSwVersion;
enum Flag
{
Flag_None = 0,
SkipLaunchCheck = 1,
SkipResumeCheck = 1,
SkipSystemUpdateCheck = 2,
RebootPatchInstall = 4,
VRMode = 8,
NonVRMode = 16
};
typedef struct _LncAppParam
{
uint32_t sz;
uint32_t user_id;
uint32_t app_opt;
uint64_t crash_report;
enum Flag check_flag;
}
LncAppParam;
typedef struct app_info {
uint32_t app_id;
uint64_t unknown1;
uint32_t app_type;
char title_id[10];
char unknown2[0x3c];
} app_info_t;
typedef struct pkg_metadata {
const char* uri;
const char* ex_uri;
const char* playgo_scenario_id;
const char* content_id;
const char* content_name;
const char* icon_url;
} pkg_metadata_t;
typedef struct pkg_info {
char content_id[48];
int type;
int platform;
} pkg_info_t;
typedef struct playgo_info {
char lang[8][30];
char scenario_ids[3][64];
char content_ids[64];
long unknown[810];
} playgo_info_t;
typedef uint32_t(*SceLncUtilLaunchAppType)(const char* tid, const char* argv[], LncAppParam* param);
extern SceLncUtilLaunchAppType sceLncUtilLaunchApp_dyn;
uint32_t sceLncUtilLaunchApp(const char* tid, const char* argv[], LncAppParam* param);
/* ====================================== Dynamic SystemService Symbols ===================================*/
extern int (*sceSystemServiceGetAppIdOfRunningBigApp)(void);
/* ====================================== Remote Play Symbols ======================================*/
extern int (*sceRemoteplayInitialize)(void*, size_t);
extern int (*sceRemoteplayGeneratePinCode)(uint32_t*);
extern int (*sceSystemServiceGetAppTitleId)(int appid, char* titleid);
extern int (*sceRemoteplayConfirmDeviceRegist)(int*, int*);
extern int (*sceRemoteplayNotifyPinCodeError)(int);
/* ====================================== Dynamic Appmsg Symbols ===================================*/
extern uint32_t(*sceAppMessagingSendMsg)(uint32_t appId, uint32_t msgType, const void* msg, size_t msgLength, uint32_t flags);
extern int (*sceAppMessagingReceiveMsg)(const AppMessage* msg);
/* ====================================== Dynamic libkernel_sys Symbols ===================================*/
extern int (*sceKernelMprotect)(void* addr, size_t len, int prot);
extern int (*sceKernelDebugOutText)(int DBG_CHANNEL, const char* text);
extern int (*sceKernelSendNotificationRequest)(int unk1, OrbisNotificationRequest* req, int size, int unk2);
extern int (*sceKernelMkdir)(const char* path, int mode);
extern int (*sceKernelGetProsperoSystemSwVersion)(OrbisKernelSwVersion* sw);
extern int (*scePthreadCreate)(void* thread, const void* attr, void* (*entry) (void*), void* arg, const char* name);
extern int (*sceKernelGetAppInfo)(pid_t pid, app_info_t *info);
extern int (*sceKernelGetProcessName)(int pid, char* name);
extern int (*sceKernelJitCreateSharedMemory)(int flags, size_t size, int protection, int *destinationHandle);
extern int (*sceKernelJitCreateAliasOfSharedMemory)(int handle, int protection, int *destinationHandle);
extern int (*sceKernelJitMapSharedMemory)(int handle, int protection, void **destination);
extern int(*ioctl)(int, int, void*);
extern int (*sceRegMgrGetInt)(long, int*);
extern int (*sceShellUIUtilInitialize)(void);
extern int (*sceShellUIUtilLaunchByUri)(const char* uri, SceShellUIUtilLaunchByUriParam* Param);
/* WRAPPERS */
int sceSystemServiceGetAppId(const char * tid);
void KillAllWithName(const char * name, int signal);