2013-04-29 12:40:09 +09:00
// Copyright (c) 2012- PPSSPP Project.
// 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, version 2.0 or later versions.
// 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 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
# pragma once
2022-02-28 16:20:03 +07:00
# include <Core/HLE/sceRtc.h>
# include "Common/Net/HTTPClient.h"
# include "Common/Net/Resolve.h"
# include "Common/Net/URL.h"
2020-08-12 20:28:14 +07:00
# pragma pack(push,1)
// Based on https://playstationdev.wiki/psvitadevwiki/index.php?title=Error_Codes
# define SCE_NP_ERROR_ALREADY_INITIALIZED 0x80550001
# define SCE_NP_ERROR_NOT_INITIALIZED 0x80550002
# define SCE_NP_ERROR_INVALID_ARGUMENT 0x80550003
# define SCE_NP_AUTH_ERROR_ALREADY_INITIALIZED 0x80550301
# define SCE_NP_AUTH_ERROR_NOT_INITIALIZED 0x80550302
# define SCE_NP_AUTH_ERROR_EINVAL 0x80550303
# define SCE_NP_AUTH_ERROR_ENOMEM 0x80550304
# define SCE_NP_AUTH_ERROR_ESRCH 0x80550305
# define SCE_NP_AUTH_ERROR_EBUSY 0x80550306
# define SCE_NP_AUTH_ERROR_ABORTED 0x80550307
# define SCE_NP_AUTH_ERROR_INVALID_SERVICE_ID 0x80550308
# define SCE_NP_AUTH_ERROR_INVALID_CREDENTIAL 0x80550309
# define SCE_NP_AUTH_ERROR_INVALID_ENTITLEMENT_ID 0x8055030a
# define SCE_NP_AUTH_ERROR_INVALID_DATA_LENGTH 0x8055030b
# define SCE_NP_AUTH_ERROR_UNSUPPORTED_TICKET_VERSION 0x8055030c
# define SCE_NP_AUTH_ERROR_STACKSIZE_TOO_SHORT 0x8055030d
# define SCE_NP_AUTH_ERROR_TICKET_STATUS_CODE_INVALID 0x8055030e
# define SCE_NP_AUTH_ERROR_TICKET_PARAM_NOT_FOUND 0x8055030f
# define SCE_NP_AUTH_ERROR_INVALID_TICKET_VERSION 0x80550310
# define SCE_NP_AUTH_ERROR_INVALID_ARGUMENT 0x80550311
# define SCE_NP_AUTH_ERROR_SERVICE_END 0x80550400
# define SCE_NP_AUTH_ERROR_SERVICE_DOWN 0x80550401
# define SCE_NP_AUTH_ERROR_SERVICE_BUSY 0x80550402
2022-02-28 16:20:03 +07:00
# define SCE_NP_AUTH_ERROR_SERVER_MAINTENANCE 0x80550403
# define SCE_NP_AUTH_ERROR_UNKNOWN 0x80550480
# define SCE_NP_MANAGER_ERROR_ALREADY_INITIALIZED 0x80550501
# define SCE_NP_MANAGER_ERROR_NOT_INITIALIZED 0x80550502
# define SCE_NP_MANAGER_ERROR_INVALID_ARGUMENT 0x80550503
# define SCE_NP_MANAGER_ERROR_OUT_OF_MEMORY 0x80550504
# define SCE_NP_MANAGER_ERROR_INVALID_TICKET_SIZE 0x80550505
# define SCE_NP_MANAGER_ERROR_INVALID_STATE 0x80550506
# define SCE_NP_MANAGER_ERROR_ABORTED 0x80550507
# define SCE_NP_MANAGER_ERROR_VARIANT_ACCOUNT_ID 0x80550508
# define SCE_NP_MANAGER_ERROR_ID_NOT_AVAIL 0x80550509
# define SCE_NP_MANAGER_ERROR_SIGNOUT 0x8055050a
# define SCE_NP_MANAGER_ERROR_NOT_SIGNIN 0x8055050b
# define SCE_NP_UTIL_ERROR_INVALID_ARGUMENT 0x80550601
# define SCE_NP_UTIL_ERROR_INSUFFICIENT 0x80550602
# define SCE_NP_UTIL_ERROR_PARSER_FAILED 0x80550603
# define SCE_NP_UTIL_ERROR_INVALID_PROTOCOL_ID 0x80550604
# define SCE_NP_UTIL_ERROR_INVALID_NP_ID 0x80550605
# define SCE_NP_UTIL_ERROR_INVALID_NP_ENV 0x80550606
# define SCE_NP_UTIL_ERROR_INVALID_NPCOMMID 0x80550607
# define SCE_NP_UTIL_ERROR_INVALID_CHARACTER 0x80550608
# define SCE_NP_UTIL_ERROR_NOT_MATCH 0x80550609
# define SCE_NP_UTIL_ERROR_INVALID_TITLEID 0x8055060a
# define SCE_NP_UTIL_ERROR_INVALID_ESCAPE_STRING 0x8055060c
# define SCE_NP_UTIL_ERROR_UNKNOWN_TYPE 0x8055060d
# define SCE_NP_UTIL_ERROR_UNKNOWN 0x8055060e
# define SCE_NP_COMMUNITY_ERROR_ALREADY_INITIALIZED 0x80550701
# define SCE_NP_COMMUNITY_ERROR_NOT_INITIALIZED 0x80550702
# define SCE_NP_COMMUNITY_ERROR_OUT_OF_MEMORY 0x80550703
# define SCE_NP_COMMUNITY_ERROR_INVALID_ARGUMENT 0x80550704
# define SCE_NP_COMMUNITY_ERROR_NO_LOGIN 0x80550705
# define SCE_NP_COMMUNITY_ERROR_TOO_MANY_OBJECTS 0x80550706
# define SCE_NP_COMMUNITY_ERROR_ABORTED 0x80550707
# define SCE_NP_COMMUNITY_ERROR_BAD_RESPONSE 0x80550708
# define SCE_NP_COMMUNITY_ERROR_BODY_TOO_LARGE 0x80550709
# define SCE_NP_COMMUNITY_ERROR_HTTP_SERVER 0x8055070a
# define SCE_NP_COMMUNITY_ERROR_INVALID_SIGNATURE 0x8055070b
# define SCE_NP_COMMUNITY_ERROR_INSUFFICIENT_ARGUMENT 0x8055070c
# define SCE_NP_COMMUNITY_ERROR_UNKNOWN_TYPE 0x8055070d
# define SCE_NP_COMMUNITY_ERROR_INVALID_ID 0x8055070e
# define SCE_NP_COMMUNITY_ERROR_INVALID_ONLINE_ID 0x8055070f
# define SCE_NP_COMMUNITY_ERROR_CONNECTION_HANDLE_ALREADY_EXISTS 0x80550710
# define SCE_NP_COMMUNITY_ERROR_INVALID_TYPE 0x80550711
# define SCE_NP_COMMUNITY_ERROR_TRANSACTION_ALREADY_END 0x80550712
# define SCE_NP_COMMUNITY_ERROR_INVALID_PARTITION 0x80550713
# define SCE_NP_COMMUNITY_ERROR_INVALID_ALIGNMENT 0x80550714
# define SCE_NP_COMMUNITY_ERROR_CLIENT_HANDLE_ALREADY_EXISTS 0x80550715
# define SCE_NP_COMMUNITY_ERROR_NO_RESOURCE 0x80550716
# define SCE_NP_COMMUNITY_SERVER_ERROR_BAD_REQUEST 0x80550801
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_TICKET 0x80550802
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_SIGNATURE 0x80550803
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_NPID 0x80550805
# define SCE_NP_COMMUNITY_SERVER_ERROR_FORBIDDEN 0x80550806
# define SCE_NP_COMMUNITY_SERVER_ERROR_INTERNAL_SERVER_ERROR 0x80550807
# define SCE_NP_COMMUNITY_SERVER_ERROR_VERSION_NOT_SUPPORTED 0x80550808
# define SCE_NP_COMMUNITY_SERVER_ERROR_SERVICE_UNAVAILABLE 0x80550809
# define SCE_NP_COMMUNITY_SERVER_ERROR_PLAYER_BANNED 0x8055080a
# define SCE_NP_COMMUNITY_SERVER_ERROR_CENSORED 0x8055080b
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_RECORD_FORBIDDEN 0x8055080c
# define SCE_NP_COMMUNITY_SERVER_ERROR_USER_PROFILE_NOT_FOUND 0x8055080d
# define SCE_NP_COMMUNITY_SERVER_ERROR_UPLOADER_DATA_NOT_FOUND 0x8055080e
# define SCE_NP_COMMUNITY_SERVER_ERROR_QUOTA_MASTER_NOT_FOUND 0x8055080f
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_TITLE_NOT_FOUND 0x80550810
# define SCE_NP_COMMUNITY_SERVER_ERROR_BLACKLISTED_USER_ID 0x80550811
# define SCE_NP_COMMUNITY_SERVER_ERROR_GAME_RANKING_NOT_FOUND 0x80550812
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_STORE_NOT_FOUND 0x80550814
# define SCE_NP_COMMUNITY_SERVER_ERROR_NOT_BEST_SCORE 0x80550815
# define SCE_NP_COMMUNITY_SERVER_ERROR_LATEST_UPDATE_NOT_FOUND 0x80550816
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_BOARD_MASTER_NOT_FOUND 0x80550817
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_GAME_DATA_MASTER_NOT_FOUND 0x80550818
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_ANTICHEAT_DATA 0x80550819
# define SCE_NP_COMMUNITY_SERVER_ERROR_TOO_LARGE_DATA 0x8055081a
# define SCE_NP_COMMUNITY_SERVER_ERROR_NO_SUCH_USER_NPID 0x8055081b
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_ENVIRONMENT 0x8055081d
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_ONLINE_NAME_CHARACTER 0x8055081f
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_ONLINE_NAME_LENGTH 0x80550820
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_ABOUT_ME_CHARACTER 0x80550821
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_ABOUT_ME_LENGTH 0x80550822
# define SCE_NP_COMMUNITY_SERVER_ERROR_INVALID_SCORE 0x80550823
# define SCE_NP_COMMUNITY_SERVER_ERROR_OVER_THE_RANKING_LIMIT 0x80550824
# define SCE_NP_COMMUNITY_SERVER_ERROR_FAIL_TO_CREATE_SIGNATURE 0x80550826
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_MASTER_INFO_NOT_FOUND 0x80550827
# define SCE_NP_COMMUNITY_SERVER_ERROR_OVER_THE_GAME_DATA_LIMIT 0x80550828
# define SCE_NP_COMMUNITY_SERVER_ERROR_SELF_DATA_NOT_FOUND 0x8055082a
# define SCE_NP_COMMUNITY_SERVER_ERROR_USER_NOT_ASSIGNED 0x8055082b
# define SCE_NP_COMMUNITY_SERVER_ERROR_GAME_DATA_ALREADY_EXISTS 0x8055082c
# define SCE_NP_COMMUNITY_SERVER_ERROR_MATCHING_BEFORE_SERVICE 0x805508a0
# define SCE_NP_COMMUNITY_SERVER_ERROR_MATCHING_END_OF_SERVICE 0x805508a1
# define SCE_NP_COMMUNITY_SERVER_ERROR_MATCHING_MAINTENANCE 0x805508a2
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_BEFORE_SERVICE 0x805508a3
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_END_OF_SERVICE 0x805508a4
# define SCE_NP_COMMUNITY_SERVER_ERROR_RANKING_MAINTENANCE 0x805508a5
# define SCE_NP_COMMUNITY_SERVER_ERROR_NO_SUCH_TITLE 0x805508a6
# define SCE_NP_COMMUNITY_SERVER_ERROR_TITLE_USER_STORAGE_BEFORE_SERVICE 0x805508aa
# define SCE_NP_COMMUNITY_SERVER_ERROR_TITLE_USER_STORAGE_END_OF_SERVICE 0x805508ab
# define SCE_NP_COMMUNITY_SERVER_ERROR_TITLE_USER_STORAGE_MAINTENANCE 0x805508ac
# define SCE_NP_COMMUNITY_SERVER_ERROR_FSR_BEFORE_SERVICE 0x805508ad
# define SCE_NP_COMMUNITY_SERVER_ERROR_FSR_END_OF_SERVICE 0x805508ae
# define SCE_NP_COMMUNITY_SERVER_ERROR_FSR_MAINTENANCE 0x805508af
# define SCE_NP_COMMUNITY_SERVER_ERROR_UBS_BEFORE_SERVICE 0x805508b1
# define SCE_NP_COMMUNITY_SERVER_ERROR_UBS_END_OF_SERVICE 0x805508b2
# define SCE_NP_COMMUNITY_SERVER_ERROR_UBS_MAINTENANCE 0x805508b3
# define SCE_NP_COMMUNITY_SERVER_ERROR_UNSPECIFIED 0x805508ff
// TODO: Moves NpMatching2-related stuff to sceNp2.h
// Based on https://gist.githubusercontent.com/raw/4140449/PS%20Vita (Might be slightly different with PSP?)
# define SCE_NP_MATCHING2_ERROR_OUT_OF_MEMORY 0x80550c01
# define SCE_NP_MATCHING2_ERROR_ALREADY_INITIALIZED 0x80550c02
# define SCE_NP_MATCHING2_ERROR_NOT_INITIALIZED 0x80550c03
# define SCE_NP_MATCHING2_ERROR_CONTEXT_MAX 0x80550c04 // might be "Invalid Argument" on PSP?
# define SCE_NP_MATCHING2_ERROR_CONTEXT_ALREADY_EXISTS 0x80550c05 // might be "Context Max/Context Id higher than 7" on PSP?
# define SCE_NP_MATCHING2_ERROR_CONTEXT_NOT_FOUND 0x80550c06
# define SCE_NP_MATCHING2_ERROR_CONTEXT_ALREADY_STARTED 0x80550c07
# define SCE_NP_MATCHING2_ERROR_CONTEXT_NOT_STARTED 0x80550c08
# define SCE_NP_MATCHING2_ERROR_SERVER_NOT_FOUND 0x80550c09
# define SCE_NP_MATCHING2_ERROR_INVALID_ARGUMENT 0x80550c0a
# define SCE_NP_MATCHING2_ERROR_INVALID_CONTEXT_ID 0x80550c0b
# define SCE_NP_MATCHING2_ERROR_INVALID_SERVER_ID 0x80550c0c
# define SCE_NP_MATCHING2_ERROR_INVALID_LOBBY_ID 0x80550c0e
# define SCE_NP_MATCHING2_ERROR_INVALID_ROOM_ID 0x80550c0f
# define SCE_NP_MATCHING2_ERROR_INVALID_MEMBER_ID 0x80550c10
# define SCE_NP_MATCHING2_ERROR_INVALID_ATTRIBUTE_ID 0x80550c11
# define SCE_NP_MATCHING2_ERROR_INVALID_CASTTYPE 0x80550c12
# define SCE_NP_MATCHING2_ERROR_INVALID_SORT_METHOD 0x80550c13
# define SCE_NP_MATCHING2_ERROR_INVALID_MAX_SLOT 0x80550c14
# define SCE_NP_MATCHING2_ERROR_INVALID_OPT_SIZE 0x80550c15
# define SCE_NP_MATCHING2_ERROR_INVALID_MATCHING_SPACE 0x80550c16
# define SCE_NP_MATCHING2_ERROR_INVALID_BLOCK_KICK_FLAG 0x80550c18
# define SCE_NP_MATCHING2_ERROR_INVALID_MESSAGE_TARGET 0x80550c19
# define SCE_NP_MATCHING2_ERROR_RANGE_FILTER_MAX 0x80550c1a
# define SCE_NP_MATCHING2_ERROR_INVALID_ALIGNMENT 0x80550c1e
# define SCE_NP_MATCHING2_ERROR_CONNECTION_CLOSED_BY_SERVER 0x80550c22
# define SCE_NP_MATCHING2_ERROR_SSL_VERIFY_FAILED 0x80550c23
# define SCE_NP_MATCHING2_ERROR_SSL_HANDSHAKE 0x80550c24
# define SCE_NP_MATCHING2_ERROR_SSL_SEND 0x80550c25
# define SCE_NP_MATCHING2_ERROR_SSL_RECV 0x80550c26
# define SCE_NP_MATCHING2_ERROR_JOINED_SESSION_MAX 0x80550c27
# define SCE_NP_MATCHING2_ERROR_ALREADY_JOINED 0x80550c28
# define SCE_NP_MATCHING2_ERROR_INVALID_SESSION_TYPE 0x80550c29
# define SCE_NP_MATCHING2_ERROR_NP_SIGNED_OUT 0x80550c2b
# define SCE_NP_MATCHING2_ERROR_BUSY 0x80550c2c
# define SCE_NP_MATCHING2_ERROR_SERVER_NOT_AVAILABLE 0x80550c2d
# define SCE_NP_MATCHING2_ERROR_NOT_ALLOWED 0x80550c2e
# define SCE_NP_MATCHING2_ERROR_ABORTED 0x80550c2f
# define SCE_NP_MATCHING2_ERROR_REQUEST_NOT_FOUND 0x80550c30
# define SCE_NP_MATCHING2_ERROR_SESSION_DESTROYED 0x80550c31
# define SCE_NP_MATCHING2_ERROR_CONTEXT_STOPPED 0x80550c32
# define SCE_NP_MATCHING2_ERROR_INVALID_REQUEST_PARAMETER 0x80550c33
# define SCE_NP_MATCHING2_ERROR_NOT_NP_SIGN_IN 0x80550c34
# define SCE_NP_MATCHING2_ERROR_ROOM_NOT_FOUND 0x80550c35
# define SCE_NP_MATCHING2_ERROR_ROOM_MEMBER_NOT_FOUND 0x80550c36
# define SCE_NP_MATCHING2_ERROR_LOBBY_NOT_FOUND 0x80550c37
# define SCE_NP_MATCHING2_ERROR_LOBBY_MEMBER_NOT_FOUND 0x80550c38
# define SCE_NP_MATCHING2_ERROR_KEEPALIVE_TIMEOUT 0x80550c3a
# define SCE_NP_MATCHING2_ERROR_TIMEOUT_TOO_SHORT 0x80550c3b
# define SCE_NP_MATCHING2_ERROR_TIMEDOUT 0x80550c3c
# define SCE_NP_MATCHING2_ERROR_INVALID_SLOTGROUP 0x80550c3d
# define SCE_NP_MATCHING2_ERROR_INVALID_ATTRIBUTE_SIZE 0x80550c3e
# define SCE_NP_MATCHING2_ERROR_CANNOT_ABORT 0x80550c3f
# define SCE_NP_MATCHING2_ERROR_SESSION_NOT_FOUND 0x80550c40
# define SCE_NP_MATCHING2_SERVER_ERROR_BAD_REQUEST 0x80550d01
# define SCE_NP_MATCHING2_SERVER_ERROR_SERVICE_UNAVAILABLE 0x80550d02
# define SCE_NP_MATCHING2_SERVER_ERROR_BUSY 0x80550d03
# define SCE_NP_MATCHING2_SERVER_ERROR_END_OF_SERVICE 0x80550d04
# define SCE_NP_MATCHING2_SERVER_ERROR_INTERNAL_SERVER_ERROR 0x80550d05
# define SCE_NP_MATCHING2_SERVER_ERROR_PLAYER_BANNED 0x80550d06
# define SCE_NP_MATCHING2_SERVER_ERROR_FORBIDDEN 0x80550d07
# define SCE_NP_MATCHING2_SERVER_ERROR_BLOCKED 0x80550d08
# define SCE_NP_MATCHING2_SERVER_ERROR_UNSUPPORTED_NP_ENV 0x80550d09
# define SCE_NP_MATCHING2_SERVER_ERROR_INVALID_TICKET 0x80550d0a
# define SCE_NP_MATCHING2_SERVER_ERROR_INVALID_SIGNATURE 0x80550d0b
# define SCE_NP_MATCHING2_SERVER_ERROR_EXPIRED_TICKET 0x80550d0c
# define SCE_NP_MATCHING2_SERVER_ERROR_ENTITLEMENT_REQUIRED 0x80550d0d
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_CONTEXT 0x80550d0e
# define SCE_NP_MATCHING2_SERVER_ERROR_CLOSED 0x80550d0f
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_TITLE 0x80550d10
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_WORLD 0x80550d11
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_LOBBY 0x80550d12
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_ROOM 0x80550d13
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_LOBBY_INSTANCE 0x80550d14
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_ROOM_INSTANCE 0x80550d15
# define SCE_NP_MATCHING2_SERVER_ERROR_PASSWORD_MISMATCH 0x80550d17
# define SCE_NP_MATCHING2_SERVER_ERROR_LOBBY_FULL 0x80550d18
# define SCE_NP_MATCHING2_SERVER_ERROR_ROOM_FULL 0x80550d19
# define SCE_NP_MATCHING2_SERVER_ERROR_GROUP_FULL 0x80550d1b
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_USER 0x80550d1c
# define SCE_NP_MATCHING2_SERVER_ERROR_TITLE_PASSPHRASE_MISMATCH 0x80550d1e
# define SCE_NP_MATCHING2_SERVER_ERROR_CONSOLE_BANNED 0x80550d28
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_ROOMGROUP 0x80550d29
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_SUCH_GROUP 0x80550d2a
# define SCE_NP_MATCHING2_SERVER_ERROR_NO_PASSWORD 0x80550d2b
# define SCE_NP_MATCHING2_SERVER_ERROR_INVALID_GROUP_SLOT_NUM 0x80550d2c
# define SCE_NP_MATCHING2_SERVER_ERROR_INVALID_PASSWORD_SLOT_MASK 0x80550d2d
# define SCE_NP_MATCHING2_SERVER_ERROR_DUPLICATE_GROUP_LABEL 0x80550d2e
# define SCE_NP_MATCHING2_SERVER_ERROR_REQUEST_OVERFLOW 0x80550d2f
# define SCE_NP_MATCHING2_SERVER_ERROR_ALREADY_JOINED 0x80550d30
# define SCE_NP_MATCHING2_SERVER_ERROR_NAT_TYPE_MISMATCH 0x80550d31
# define SCE_NP_MATCHING2_SERVER_ERROR_ROOM_INCONSISTENCY 0x80550d32
# define SCE_NP_MATCHING2_SIGNALING_ERROR_NOT_INITIALIZED 0x80550e01
# define SCE_NP_MATCHING2_SIGNALING_ERROR_ALREADY_INITIALIZED 0x80550e02
# define SCE_NP_MATCHING2_SIGNALING_ERROR_OUT_OF_MEMORY 0x80550e03
# define SCE_NP_MATCHING2_SIGNALING_ERROR_CTXID_NOT_AVAILABLE 0x80550e04
# define SCE_NP_MATCHING2_SIGNALING_ERROR_CTX_NOT_FOUND 0x80550e05
# define SCE_NP_MATCHING2_SIGNALING_ERROR_REQID_NOT_AVAILABLE 0x80550e06
# define SCE_NP_MATCHING2_SIGNALING_ERROR_REQ_NOT_FOUND 0x80550e07
# define SCE_NP_MATCHING2_SIGNALING_ERROR_PARSER_CREATE_FAILED 0x80550e08
# define SCE_NP_MATCHING2_SIGNALING_ERROR_PARSER_FAILED 0x80550e09
# define SCE_NP_MATCHING2_SIGNALING_ERROR_INVALID_NAMESPACE 0x80550e0a
# define SCE_NP_MATCHING2_SIGNALING_ERROR_NETINFO_NOT_AVAILABLE 0x80550e0b
# define SCE_NP_MATCHING2_SIGNALING_ERROR_PEER_NOT_RESPONDING 0x80550e0c
# define SCE_NP_MATCHING2_SIGNALING_ERROR_CONNID_NOT_AVAILABLE 0x80550e0d
# define SCE_NP_MATCHING2_SIGNALING_ERROR_CONN_NOT_FOUND 0x80550e0e
# define SCE_NP_MATCHING2_SIGNALING_ERROR_PEER_UNREACHABLE 0x80550e0f
# define SCE_NP_MATCHING2_SIGNALING_ERROR_TERMINATED_BY_PEER 0x80550e10
# define SCE_NP_MATCHING2_SIGNALING_ERROR_TIMEOUT 0x80550e11
# define SCE_NP_MATCHING2_SIGNALING_ERROR_CTX_MAX 0x80550e12
# define SCE_NP_MATCHING2_SIGNALING_ERROR_RESULT_NOT_FOUND 0x80550e13
# define SCE_NP_MATCHING2_SIGNALING_ERROR_CONN_IN_PROGRESS 0x80550e14
# define SCE_NP_MATCHING2_SIGNALING_ERROR_INVALID_ARGUMENT 0x80550e15
# define SCE_NP_MATCHING2_SIGNALING_ERROR_OWN_NP_ID 0x80550e16
# define SCE_NP_MATCHING2_SIGNALING_ERROR_TOO_MANY_CONN 0x80550e17
# define SCE_NP_MATCHING2_SIGNALING_ERROR_TERMINATED_BY_MYSELF 0x80550e18
# define SCE_NP_MATCHING2_SIGNALING_ERROR_MATCHING2_PEER_NOT_FOUND 0x80550e19
# define SCE_NP_TROPHY_ERROR_UNKNOWN 0x80551600
# define SCE_NP_TROPHY_ERROR_NOT_INITIALIZED 0x80551601
# define SCE_NP_TROPHY_ERROR_ALREADY_INITIALIZED 0x80551602
# define SCE_NP_TROPHY_ERROR_NO_MEMORY 0x80551603
# define SCE_NP_TROPHY_ERROR_INVALID_ARGUMENT 0x80551604
# define SCE_NP_TROPHY_ERROR_INSUFFICIENT_BUFFER 0x80551605
# define SCE_NP_TROPHY_ERROR_EXCEEDS_MAX 0x80551606
# define SCE_NP_TROPHY_ERROR_ABORT 0x80551607
# define SCE_NP_TROPHY_ERROR_INVALID_HANDLE 0x80551608
# define SCE_NP_TROPHY_ERROR_INVALID_CONTEXT 0x80551609
# define SCE_NP_TROPHY_ERROR_INVALID_NPCOMMID 0x8055160a
# define SCE_NP_TROPHY_ERROR_INVALID_NPCOMMSIGN 0x8055160b
# define SCE_NP_BASIC_ERROR_BASE 0x80551d00
# define SCE_NP_BASIC_ERROR_UNKNOWN 0x80551d01
# define SCE_NP_BASIC_ERROR_INVALID_ARGUMENT 0x80551d02
# define SCE_NP_BASIC_ERROR_OUT_OF_MEMORY 0x80551d03
# define SCE_NP_BASIC_ERROR_NOT_INITIALIZED 0x80551d04
# define SCE_NP_BASIC_ERROR_ALREADY_INITIALIZED 0x80551d05
# define SCE_NP_BASIC_ERROR_SIGNED_OUT 0x80551d06
# define SCE_NP_BASIC_ERROR_NOT_ONLINE 0x80551d07
# define SCE_NP_BASIC_ERROR_DATA_NOT_FOUND 0x80551d08
# define SCE_NP_BASIC_ERROR_BUSY 0x80551d09
# define SCE_NP_BASIC_ERROR_NOT_READY_TO_COMMUNICATE 0x80551d0a
# define SCE_NP_BASIC_ERROR_NO_COMM_ID_SUPPLIED 0x80551d0b
2020-08-12 20:28:14 +07:00
// Based on https://github.com/RPCS3/rpcs3/blob/psp2/rpcs3/Emu/PSP2/Modules/sceNpCommon.h
enum SceNpServiceState : s32
{
SCE_NP_SERVICE_STATE_UNKNOWN = 0 ,
SCE_NP_SERVICE_STATE_SIGNED_OUT ,
SCE_NP_SERVICE_STATE_SIGNED_IN ,
SCE_NP_SERVICE_STATE_ONLINE
} ;
struct SceNpCommunicationId
{
char data [ 9 ] ;
char term ;
u8 num ;
char dummy ;
} ;
struct SceNpCommunicationPassphrase
{
u8 data [ 128 ] ;
} ;
struct SceNpCommunicationSignature
{
u8 data [ 160 ] ;
} ;
struct SceNpCommunicationConfig
{
PSPPointer < SceNpCommunicationId > commId ;
PSPPointer < SceNpCommunicationPassphrase > commPassphrase ;
PSPPointer < SceNpCommunicationSignature > commSignature ;
} ;
2022-02-28 16:20:03 +07:00
// Part of BCP 47 Code (ie. "fr" for France/French)?
2020-08-12 20:28:14 +07:00
struct SceNpCountryCode
{
char data [ 2 ] ;
char term ;
char padding [ 1 ] ;
} ;
// Username?
struct SceNpOnlineId
{
char data [ 16 ] ;
char term ;
char dummy [ 3 ] ;
} ;
struct SceNpId
{
SceNpOnlineId handle ;
u8 opt [ 8 ] ;
u8 reserved [ 8 ] ;
} ;
struct SceNpAvatarUrl
{
char data [ 127 ] ;
char term ;
} ;
struct SceNpUserInformation
{
SceNpId userId ;
SceNpAvatarUrl icon ;
u8 reserved [ 52 ] ;
} ;
2022-02-28 16:20:03 +07:00
// Language Code (ie. 1033 for "en-US")?
2020-08-12 20:28:14 +07:00
struct SceNpMyLanguages
{
s32_le language1 ;
s32_le language2 ;
s32_le language3 ;
u8 padding [ 4 ] ;
} ;
struct SceNpAvatarImage
{
u8 data [ 200 * 1024 ] ;
u32_le size ;
u8 reserved [ 12 ] ;
} ;
enum SceNpAvatarSizeType : s32
{
SCE_NP_AVATAR_SIZE_LARGE ,
SCE_NP_AVATAR_SIZE_MIDDLE ,
SCE_NP_AVATAR_SIZE_SMALL
} ;
struct SceNpAboutMe
{
char data [ 64 ] ;
} ;
struct SceNpDate
{
u16_le year ;
u8 month ;
u8 day ;
} ;
union SceNpTicketParam
{
s32_le _s32 ;
s64_le _s64 ;
u32_le _u32 ;
u64_le _u64 ;
SceNpDate date ;
u8 data [ 256 ] ;
} ;
struct SceNpTicketVersion
{
u16_le major ;
u16_le minor ;
} ;
struct NpAuthHandler {
u32 entryPoint ;
u32 argument ;
} ;
2022-02-28 16:20:03 +07:00
union NpAuthArgs {
2020-08-12 20:28:14 +07:00
u32_le data [ 3 ] ; // id, result, ArgAddr
2022-02-28 16:20:03 +07:00
struct {
s32_le id ;
s32_le result ;
u32_le argAddr ;
} ;
2020-08-12 20:28:14 +07:00
} ;
using SceNpAuthCallback = s32 ( s32 id , s32 result , PSPPointer < void > arg ) ;
struct SceNpAuthRequestParameter
{
u32_le size ; // Size of this struct
SceNpTicketVersion version ; // Highest ticket version supported by this game/device? so PSN server can return supported ticket
u32_le serviceIdAddr ; //PSPPointer<char> serviceId; // null-terminated string
u32_le cookieAddr ; //PSPPointer<char> cookie; // null-terminated string?
u32_le cookieSize ;
u32_le entitlementIdAddr ; //PSPPointer<char> entitlementId; // null-terminated string
u32_le consumedCount ; // related to entitlement?
u32 ticketCbAddr ; //PSPPointer<SceNpAuthCallback> ticketCb
u32_le cbArgAddr ; //PSPPointer<void> cbArg
} ;
struct SceNpEntitlementId
{
u8 data [ 32 ] ;
} ;
struct SceNpEntitlement
{
SceNpEntitlementId id ;
u64_le createdDate ;
u64_le expireDate ;
u32_le type ;
s32_le remainingCount ;
u32_le consumedCount ;
u8 padding [ 4 ] ;
} ;
# define TICKET_VER_2_0 0x21000000;
# define TICKET_VER_2_1 0x21010000;
# define TICKET_VER_3_0 0x31000000;
# define TICKET_VER_4_0 0x41000000;
# define NUMBER_PARAMETERS 12
# define PARAM_TYPE_NULL 0
# define PARAM_TYPE_INT 1
# define PARAM_TYPE_LONG 2
# define PARAM_TYPE_STRING 4 // PSP returns maximum 255 bytes
# define PARAM_TYPE_DATE 7
# define PARAM_TYPE_STRING_ASCII 8 // PSP returns maximum 255 bytes, can contains control code
# define SECTION_TYPE_BODY 0x3000
# define SECTION_TYPE_FOOTER 0x3002
// Tickets data are in big-endian based on captured packets
struct SceNpTicketParamData
{
2022-02-28 16:20:03 +07:00
u16_be type ; // 0(NULL), 1(32-bit int), 2(64-bi long), 4(ansi string?), 7(date/timestamp), 8(ascii string)
u16_be length ; // size of the following data value
//u8 value[]; // optional data of length size
2020-08-12 20:28:14 +07:00
} ;
struct SceNpTicketHeader
{
u32_be version ; // Version contents byte are: V1 0M 00 00, where V = major version, M = minor version according to https://www.psdevwiki.com/ps3/X-I-5-Ticket
s32_be size ; // total ticket size (excluding this 8-bytes header struct)
} ;
// Section contents byte are: 30 XX 00 YY, where XX = section type, YY = section size according to https://www.psdevwiki.com/ps3/X-I-5-Ticket
// A section can contain other sections or param data, thus sharing their enum/def?
struct SceNpTicketSection
{
2022-02-28 16:20:03 +07:00
u16_be type ; // section type? ie. 30 XX where known XX are 00(Body), 02(Footer), 10, 11
2020-08-12 20:28:14 +07:00
u16_be size ; // total section size (excluding this 4-bytes section delimiter struct)
} ;
struct SceNpTicket
{
SceNpTicketHeader header ;
SceNpTicketSection section ; // Body or Parameter sections?
2022-02-28 16:20:03 +07:00
//SceNpTicketParamData parameters[]; // a list of TicketParamData following the section
2020-08-12 20:28:14 +07:00
//u8 unknownBytes[]; // optional data?
} ;
2022-02-28 16:20:03 +07:00
struct SceNpAuthMemoryStat {
int npMemSize ; // Memory allocated by the NP utility. Pool Size?
int npMaxMemSize ; // Maximum memory used by the NP utility.
int npFreeMemSize ; // Free memory available to use by the NP utility.
} ;
// Based on https://github.com/RPCS3/rpcs3/blob/master/rpcs3/Emu/Cell/Modules/sceNp2.h (Just as reference, might be slightly different than PSP)
// Event of request functions
enum PS3Matching2RequestEvent
{
SCE_NP_MATCHING2_REQUEST_EVENT_GetServerInfo = 0x0001 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetWorldInfoList = 0x0002 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomMemberDataExternalList = 0x0003 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SetRoomDataExternal = 0x0004 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomDataExternalList = 0x0005 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetLobbyInfoList = 0x0006 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SetUserInfo = 0x0007 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetUserInfoList = 0x0008 ,
SCE_NP_MATCHING2_REQUEST_EVENT_CreateServerContext = 0x0009 ,
SCE_NP_MATCHING2_REQUEST_EVENT_DeleteServerContext = 0x000a ,
SCE_NP_MATCHING2_REQUEST_EVENT_CreateJoinRoom = 0x0101 ,
SCE_NP_MATCHING2_REQUEST_EVENT_JoinRoom = 0x0102 ,
SCE_NP_MATCHING2_REQUEST_EVENT_LeaveRoom = 0x0103 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GrantRoomOwner = 0x0104 ,
SCE_NP_MATCHING2_REQUEST_EVENT_KickoutRoomMember = 0x0105 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SearchRoom = 0x0106 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SendRoomChatMessage = 0x0107 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SendRoomMessage = 0x0108 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SetRoomDataInternal = 0x0109 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomDataInternal = 0x010a ,
SCE_NP_MATCHING2_REQUEST_EVENT_SetRoomMemberDataInternal = 0x010b ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetRoomMemberDataInternal = 0x010c ,
SCE_NP_MATCHING2_REQUEST_EVENT_SetSignalingOptParam = 0x010d ,
SCE_NP_MATCHING2_REQUEST_EVENT_JoinLobby = 0x0201 ,
SCE_NP_MATCHING2_REQUEST_EVENT_LeaveLobby = 0x0202 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SendLobbyChatMessage = 0x0203 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SendLobbyInvitation = 0x0204 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SetLobbyMemberDataInternal = 0x0205 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetLobbyMemberDataInternal = 0x0206 ,
SCE_NP_MATCHING2_REQUEST_EVENT_GetLobbyMemberDataInternalList = 0x0207 ,
SCE_NP_MATCHING2_REQUEST_EVENT_SignalingGetPingInfo = 0x0e01 ,
} ;
// Based on decompiled np_matching2.prx, commented with syscalls where the event id is being used
# define PSP_NP_MATCHING2_EVENT_0001 0x0001 // GetServerInfo
# define PSP_NP_MATCHING2_EVENT_0002 0x0002 // GetWorldInfoList
# define PSP_NP_MATCHING2_EVENT_0003 0x0003 // SetUserInfo
# define PSP_NP_MATCHING2_EVENT_0004 0x0004 // GetUserInfoList
# define PSP_NP_MATCHING2_EVENT_0005 0x0005 // GetRoomMemberDataExternalList
# define PSP_NP_MATCHING2_EVENT_0006 0x0006 // SetRoomDataExternal
# define PSP_NP_MATCHING2_EVENT_0007 0x0007 // GetRoomDataExternalList
# define PSP_NP_MATCHING2_EVENT_0101 0x0101 // CreateJoinRoom
# define PSP_NP_MATCHING2_EVENT_0102 0x0102 // JoinRoom
# define PSP_NP_MATCHING2_EVENT_0103 0x0103 // LeaveRoom
# define PSP_NP_MATCHING2_EVENT_0104 0x0104 // GrantRoomOwner
# define PSP_NP_MATCHING2_EVENT_0105 0x0105 // KickoutRoomMember
# define PSP_NP_MATCHING2_EVENT_0106 0x0106 // SearchRoom
# define PSP_NP_MATCHING2_EVENT_0107 0x0107 // SendRoomChatMessage
# define PSP_NP_MATCHING2_EVENT_0108 0x0108 // SendRoomMessage, also used on various places (internal function)
# define PSP_NP_MATCHING2_EVENT_0109 0x0109 // SetRoomDataInternal
# define PSP_NP_MATCHING2_EVENT_010A 0x010A // GetRoomDataInternal
# define PSP_NP_MATCHING2_EVENT_010B 0x010B // SetRoomMemberDataInternal
# define PSP_NP_MATCHING2_EVENT_010C 0x010C // GetRoomMemberDataInternal
# define PSP_NP_MATCHING2_EVENT_010D 0x010D // GetRoomMemberDataInternalList
# define PSP_NP_MATCHING2_EVENT_010E 0x010E // SetSignalingOptParam
# define PSP_NP_MATCHING2_EVENT_A102 0xA102 // Used on various places (internal function)
// Either this is an ID, state/status, flags, or might be size of data?
# define PSP_NP_MATCHING2_STATE_1001 0x1001
# define PSP_NP_MATCHING2_STATE_1006 0x1006
# define PSP_NP_MATCHING2_STATE_1007 0x1007
# define PSP_NP_MATCHING2_STATE_1008 0x1008
# define PSP_NP_MATCHING2_STATE_1200 0x1200
# define PSP_NP_MATCHING2_STATE_1206 0x1206
# define PSP_NP_MATCHING2_STATE_1207 0x1207
# define PSP_NP_MATCHING2_STATE_1208 0x1208
# define PSP_NP_MATCHING2_STATE_1209 0x1209
# define PSP_NP_MATCHING2_STATE_120B 0x120B
# define PSP_NP_MATCHING2_STATE_120C 0x120C
# define PSP_NP_MATCHING2_STATE_3202 0x3202
# define PSP_NP_MATCHING2_STATE_3203 0x3203
# define PSP_NP_MATCHING2_STATE_3204 0x3204
# define PSP_NP_MATCHING2_STATE_3205 0x3205
# define PSP_NP_MATCHING2_STATE_3206 0x3206
# define PSP_NP_MATCHING2_STATE_3207 0x3207
# define PSP_NP_MATCHING2_STATE_3208 0x3208
# define PSP_NP_MATCHING2_STATE_320A 0x320A
# define PSP_NP_MATCHING2_STATE_3210 0x3210
# define PSP_NP_MATCHING2_STATE_3211 0x3211
# define PSP_NP_MATCHING2_MAX_CONTEXTID 7;
struct NpMatching2Handler {
u32 entryPoint ;
u32 argument ;
} ;
// Arg1 and Arg2 seems to be a pair and predefined: 0x0001 with 0x1001, 0x0002 with 0x1008, 0x0003 with 0x1006, 0x0004 with 0x1007,
// 0x0005 with 0x1206, 0x0006 with 0x1207, 0x0007 with 0x1208, 0x0101 with 0x1209, 0x0102 with 0x1209, 0x0103 with 0x3202,
// 0x0104 with 0x3210, 0x0105 with 0x3211, 0x0106 with 2 possibilities (0x1200 and 0x120c), 0x0107 with 0x3208, 0x0108 with 0x320a,
// 0x0109 with 0x3204, 0x010a with 0x3205, 0x010b with 0x3206, 0x010c with 0x3207, 0x010d with 0x3203, 0x010e with 0x3204,
// 0xa102 with 0x120b.
// Arg5 seems to be boolean (0/1), mostly 0, conditional when Arg1=0x0001
// Arg7 seems to be integer/state? (0..2), mostly 0, conditional when Arg1=0x0108 (0 on SendRoomMessage, 2 on others), 1 when Arg1=0xa102
struct NpMatching2Args {
u32_le data [ 11 ] ; // 7 elements (excluding optional data)? or may be 11 elements (including optional data)?
// May be followed by optional data? since these Args usually created on the stack
} ;
# pragma pack(pop)
2020-08-12 20:28:14 +07:00
# define PARENTAL_CONTROL_DISABLED 0
# define PARENTAL_CONTROL_ENABLED 1
# define STATUS_ACCOUNT_SUSPENDED 0x80
# define STATUS_ACCOUNT_CHAT_RESTRICTED 0x100
# define STATUS_ACCOUNT_PARENTAL_CONTROL_ENABLED 0x200
2022-02-28 16:20:03 +07:00
# define NP_SIGNIN_STATUS_NONE 0 // SIGNEDOUT?
# define NP_SIGNIN_STATUS_SUCCESS 1
# define NP_SIGNIN_STATUS_CANCELED 2
# define NP_SIGNIN_STATUS_FAILED 3 // ERROR/ABORTED/SIGNEDOUT?
2020-08-12 20:28:14 +07:00
2022-02-28 16:20:03 +07:00
// Used by PSPNpSigninDialog.cpp
extern int npSigninState ;
extern PSPTimeval npSigninTimestamp ;
2020-08-12 20:28:14 +07:00
2022-02-28 16:20:03 +07:00
// Used by sceNet.cpp since we're borrowing Apctl's PSPThread to process NP events & callbacks.
// TODO: NP events should be processed on it's own PSPThread
2020-08-12 20:28:14 +07:00
extern std : : recursive_mutex npAuthEvtMtx ;
extern std : : deque < NpAuthArgs > npAuthEvents ;
extern std : : map < int , NpAuthHandler > npAuthHandlers ;
2022-02-28 16:20:03 +07:00
// Used by sceNp2.cpp
extern SceNpCommunicationId npTitleId ;
int NpGetNpId ( SceNpId * npid ) ;
int sceNpAuthGetMemoryStat ( u32 memStatAddr ) ;
int sceNpAuthCreateStartRequest ( u32 paramAddr ) ;
int sceNpAuthGetTicket ( u32 requestId , u32 bufferAddr , u32 length ) ;
int sceNpAuthGetEntitlementById ( u32 ticketBufferAddr , u32 ticketLength , u32 entitlementIdAddr , u32 arg4 ) ;
int sceNpAuthAbortRequest ( int requestId ) ;
int sceNpAuthDestroyRequest ( int requestId ) ;
2013-04-29 12:40:09 +09:00
void Register_sceNp ( ) ;
void Register_sceNpService ( ) ;
2020-08-12 20:28:14 +07:00
void Register_sceNpAuth ( ) ;
2022-02-28 16:20:03 +07:00
void Register_sceNpCommerce2 ( ) ;
void Register_sceNpMatching2 ( ) ;