/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. 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 of the License, 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. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ /***************************************************************************** * * $/Plasma20/Sources/Plasma/NucleusLib/pnNetProtocol/Private/Protocols/Srv2Db/pnNpSrv2Db.h * ***/ #ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETPROTOCOL_PRIVATE_PROTOCOLS_SRV2DB_PNNPSRV2DB_H #error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetProtocol/Private/Protocols/Srv2Db/pnNpSrv2Db.h included more than once" #endif #define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETPROTOCOL_PRIVATE_PROTOCOLS_SRV2DB_PNNPSRV2DB_H // kNetProtocolSrv2Db messages // Because SrvDb must remain compatible with older auth builds, these message ids // must not change unless all front-end servers are synchronously replaced. enum { // Account kSrv2Db_AccountCreateRequest = 0, kSrv2Db_AccountLoginRequest = 1, kSrv2Db_AccountLogout = 2, kSrv2Db_AccountChangePasswordRequest = 3, kSrv2Db_AccountSetRolesRequest = 4, kSrv2Db_AccountSetBillingTypeRequest = 5, kSrv2Db_AccountActivateRequest = 6, kSrv2Db_AccountCreateFromKeyRequest = 7, kSrv2Db_AccountLockPlayerNameRequest = 8, kSrv2Db_SetPlayerBanStatusRequest = 9, kSrv2Db_AccountLoginRequest2 = 10, kSrv2Db_AccountExistsRequest = 11, // VaultNodes kSrv2Db_VaultNodeCreateRequest = 20, kSrv2Db_VaultNodeFetchRequest = 21, kSrv2Db_VaultNodeSaveRequest = 22, kSrv2Db_VaultNodeDeleteRequest = 23, kSrv2Db_VaultNodeFindRequest = 24, kSrv2Db_VaultSendNode = 25, kSrv2Db_SetAgeSequenceNumRequest = 26, kSrv2Db_VaultNodeChanged = 27, kSrv2Db_FetchInviterInfo = 28, // VaultNodeRefs kSrv2Db_VaultNodeAddRefs = 40, kSrv2Db_VaultNodeDelRefs = 41, kSrv2Db_VaultNodeGetChildRefs = 42, kSrv2Db_VaultNodeGetParentRefs = 43, // State Objects kSrv2Db_StateSaveObject = 60, kSrv2Db_StateDeleteObject = 61, kSrv2Db_StateFetchObject = 62, // Public ages kSrv2Db_GetPublicAgeInfoIds = 80, kSrv2Db_SetAgePublic = 81, // Score kSrv2Db_ScoreCreate = 100, kSrv2Db_ScoreFindScoreIds = 101, kSrv2Db_ScoreFetchScores = 102, kSrv2Db_ScoreSave = 103, kSrv2Db_ScoreDelete = 104, kSrv2Db_ScoreGetRanks = 105, // Vault Notifications kSrv2Db_PlayerOnline = 120, kSrv2Db_PlayerOffline = 121, kSrv2Db_AgeOnline = 122, kSrv2Db_AgeOffline = 123, // CSR kSrv2Db_CsrAcctInfoRequest = 140, }; enum { // Account kDb2Srv_AccountCreateReply = 0, kDb2Srv_AccountLoginReply = 1, kDb2Srv_AccountCreateFromKeyReply = 2, kDb2Srv_AccountExistsReply = 3, // VaultNodes kDb2Srv_VaultNodeCreateReply = 20, kDb2Srv_VaultNodeFetchReply = 21, kDb2Srv_VaultNodeSaveReply = 22, kDb2Srv_VaultNodeDeleteReply = 23, kDb2Srv_VaultNodeFindReply = 24, kDb2Srv_SetAgeSequenceNumReply = 25, kDb2Srv_FetchInviterInfoReply = 26, // VaultNodeRefs kDb2Srv_VaultNodeRefs = 40, // State Objects kDb2Srv_StateObjectFetched = 60, // Vault Notification kDb2Srv_NotifyVaultNodeChanged = 80, kDb2Srv_NotifyVaultNodeAdded = 81, kDb2Srv_NotifyVaultNodeRemoved = 82, kDb2Srv_NotifyVaultNodeDeleted = 83, // Public ages kDb2Srv_PublicAgeInfoIds = 100, // Score kDb2Srv_ScoreCreateReply = 120, kDb2Srv_ScoreFindScoreIdsReply = 121, kDb2Srv_ScoreFetchScoresReply = 122, kDb2Srv_ScoreDeleteReply = 123, kDb2Srv_ScoreGetRanksReply = 124, // CSR kDb2Srv_CsrAcctInfoReply = 140, }; //============================================================================ // BEGIN PACKED DATA STRUCTURES //============================================================================ #include /***************************************************************************** * * Srv2Db connect packet * ***/ struct Srv2Db_ConnData { dword dataBytes; dword srvType; }; struct Srv2Db_Connect { AsyncSocketConnectPacket hdr; Srv2Db_ConnData data; }; /***************************************************************************** * * Srv2Db packets * ***/ struct Srv2Db_AccountExistsRequest : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; }; struct Srv2Db_AccountCreateRequest : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; ShaDigest namePassHash; dword billingType; dword accountFlags; wchar foreignAcctId[kMaxPublisherAuthKeyLength]; }; struct Srv2Db_AccountCreateFromKeyRequest : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; ShaDigest namePassHash; Uuid key; dword billingType; }; struct Srv2Db_AccountLoginRequest : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; }; struct Srv2Db_AccountLoginRequest2 : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; dword buildId; }; struct Srv2Db_AccountLogout : SrvMsgHeader { Uuid accountUuid; dword timeLoggedMins; }; struct Srv2Db_AccountChangePasswordRequest : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; ShaDigest namePassHash; }; struct Srv2Db_AccountSetRolesRequest : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; dword accountFlags; }; struct Srv2Db_AccountSetBillingTypeRequest : SrvMsgHeader { wchar accountName[kMaxAccountNameLength]; dword billingType; }; struct Srv2Db_AccountActivateRequest : SrvMsgHeader { Uuid activationKey; }; struct Srv2Db_AccountLockPlayerNameRequest :SrvMsgHeader { wchar playerName[kMaxPlayerNameLength]; Uuid accountUuid; }; struct Srv2Db_VaultNodeCreateRequest : SrvMsgHeader { Uuid accountUuid; dword creatorId; dword nodeBytes; byte nodeBuffer[1]; }; struct Srv2Db_VaultNodeFetchRequest : SrvMsgHeader { dword nodeId; }; struct Srv2Db_VaultNodeChanged : SrvMsgHeader { dword nodeId; Uuid revisionId; }; struct Srv2Db_VaultNodeSaveRequest : SrvMsgHeader { Uuid revisionId; dword nodeId; unsigned playerCheckId; unsigned isRequestFromAuth; dword nodeBytes; byte buffer[1]; // buffer[bytes], actually // no more fields after var length alloc }; struct Srv2Db_VaultNodeDeleteRequest : SrvMsgHeader { dword nodeId; unsigned playerCheckId; unsigned isRequestFromAuth; }; struct Srv2Db_VaultNodeFindRequest : SrvMsgHeader { // Template node to match dword nodeBytes; byte nodeBuffer[1]; // [nodeBytes], actually // no more fields after var length alloc }; struct Srv2Db_VaultNodeAddRefs : SrvMsgHeader { dword refCount; NetVaultNodeRef refs[1]; // no more fields after var length alloc }; struct Srv2Db_VaultNodeDelRefs : SrvMsgHeader { dword refCount; unsigned playerCheckId; unsigned isRequestFromAuth; NetVaultNodeRef refs[1]; // no more fields after var length alloc }; struct Srv2Db_VaultNodeGetChildRefs : SrvMsgHeader { dword nodeId; dword maxDepth; }; struct Srv2Db_VaultNodeGetParentRefs : SrvMsgHeader { dword nodeId; dword maxDepth; }; struct Srv2Db_VaultSendNode : SrvMsgHeader { dword srcPlayerId; // sender dword srcNodeId; // sent item dword dstPlayerId; // recipient }; struct Srv2Db_SetAgeSequenceNumRequest : SrvMsgHeader { dword nodeId; wchar ageInstName[kMaxAgeNameLength]; wchar ageUserName[kMaxAgeNameLength]; }; struct Srv2Db_StateSaveObject : SrvMsgHeader { dword buildId; Uuid ownerId; wchar objectName[kMaxStateObjectName]; dword objectDataBytes; byte objectData[1]; // no more fields after var length alloc }; struct Srv2Db_StateDeleteObject : SrvMsgHeader { Uuid ownerId; wchar objectName[kMaxStateObjectName]; }; struct Srv2Db_StateFetchObject : SrvMsgHeader { Uuid ownerId; wchar objectName[kMaxStateObjectName]; }; struct Srv2Db_GetPublicAgeInfoIds : SrvMsgHeader { wchar ageName[kMaxAgeNameLength]; }; struct Srv2Db_SetAgePublic : SrvMsgHeader { dword playerId; dword ageInfoId; byte publicOrNot; }; struct Srv2Db_SetPlayerBanStatusRequest : SrvMsgHeader { dword playerId; dword banned; }; struct Srv2Db_ScoreCreate : SrvMsgHeader { dword ownerId; wchar gameName[kMaxGameScoreNameLength]; dword gameType; dword value; }; struct Srv2Db_ScoreDelete : SrvMsgHeader { dword scoreId; }; struct Srv2Db_ScoreFindScoreIds : SrvMsgHeader { dword ownerId; wchar gameName[kMaxGameScoreNameLength]; }; struct Srv2Db_ScoreFetchScores : SrvMsgHeader { dword scoreCount; dword scoreIds[1]; // [scoreCount], actually // no more fields after var length alloc }; struct Srv2Db_ScoreSave : SrvMsgHeader { dword scoreId; dword value; }; struct Srv2Db_ScoreGetRanks : SrvMsgHeader { dword ownerId; dword scoreGroup; dword parentFolderId; wchar gameName[kMaxGameScoreNameLength]; dword timePeriod; dword numResults; dword pageNumber; dword sortDesc; }; struct Srv2Db_PlayerOnline : SrvMsgHeader { dword playerId; }; struct Srv2Db_PlayerOffline : SrvMsgHeader { dword playerId; }; struct Srv2Db_AgeOnline : SrvMsgHeader { Uuid ageInstId; }; struct Srv2Db_AgeOffline : SrvMsgHeader { Uuid ageInstId; }; struct Srv2Db_CsrAcctInfoRequest : SrvMsgHeader { wchar csrName[kMaxAccountNameLength]; }; struct Srv2Db_FetchInviterInfo : SrvMsgHeader { Uuid inviteUuid; }; /***************************************************************************** * * Db2Srv packets * ***/ struct Db2Srv_AccountExistsReply : SrvMsgHeader { byte exists; }; struct Db2Srv_AccountCreateReply : SrvMsgHeader { Uuid accountUuid; }; struct Db2Srv_AccountCreateFromKeyReply : SrvMsgHeader { Uuid accountUuid; Uuid activationKey; }; struct Db2Srv_AccountLoginReply : SrvMsgHeader { Uuid accountUuid; dword accountFlags; dword billingType; ShaDigest namePassHash; }; struct Db2Srv_VaultNodeCreateReply : SrvMsgHeader { dword nodeId; }; struct Db2Srv_VaultNodeFetchReply : SrvMsgHeader { dword nodeBytes; byte buffer[1]; // no more fields after var length alloc }; struct Db2Srv_VaultNodeFindReply : SrvMsgHeader { // out: ids of matching nodes dword nodeIdCount; dword nodeIds[1]; // [nodeIdCount], actually // no more fields after var length alloc }; struct Db2Srv_VaultNodeRefs : SrvMsgHeader { dword refCount; NetVaultNodeRef refs[1]; // no more fields after var length alloc }; struct Db2Srv_SetAgeSequenceNumReply : SrvMsgHeader { dword sequenceNum; }; struct Db2Srv_FetchInviterInfoReply : SrvMsgHeader { Uuid hoodInstance; }; struct Db2Srv_StateObjectFetched : SrvMsgHeader { dword buildId; Uuid ownerId; wchar objectName[kMaxStateObjectName]; dword objectDataBytes; byte objectData[1]; // no more fields after var length alloc }; struct Db2Srv_NotifyVaultNodeChanged : SrvMsgHeader { dword nodeId; Uuid revId; dword notifyIdCount; dword notifyIds[1]; }; struct Db2Srv_NotifyVaultNodeAdded : SrvMsgHeader { NetVaultNodeRef ref; dword notifyIdCount; dword notifyIds[1]; }; struct Db2Srv_NotifyVaultNodeRemoved : SrvMsgHeader { dword parentId; dword childId; dword notifyIdCount; dword notifyIds[1]; }; struct Db2Srv_NotifyVaultNodeDeleted : SrvMsgHeader { dword nodeId; dword notifyIdCount; dword notifyIds[1]; }; struct Db2Srv_PublicAgeInfoIds : SrvMsgHeader { dword idCount; dword ids[1]; // [idCount], actually // no more fields after var length alloc }; struct Db2Srv_ScoreCreateReply : SrvMsgHeader { dword scoreId; dword createdTime; }; struct Db2Srv_ScoreDeleteReply : SrvMsgHeader { dword ownerId; wchar gameName[kMaxGameScoreNameLength]; }; struct Db2Srv_ScoreFindScoreIdsReply : SrvMsgHeader { dword idCount; dword scoreIds[1]; // [idCount], actually // no more fields after var length alloc }; struct Db2Srv_ScoreFetchScoresReply : SrvMsgHeader { dword scoreCount; dword byteCount; byte buffer[1]; // [byteCount], actually // no more fields after var length alloc }; struct Db2Srv_ScoreGetRanksReply : SrvMsgHeader { dword rankCount; dword byteCount; byte buffer[1]; // [byteCount], actually // no more fields after var length alloc }; struct Db2Srv_CsrAcctInfoReply : SrvMsgHeader { Uuid csrId; dword csrFlags; ShaDigest namePassHash; }; //============================================================================ // END PACKED DATA STRUCTURES //============================================================================ #include /***************************************************************************** * * Srv2Db functions * ***/ bool Srv2DbValidateConnect ( AsyncNotifySocketListen * listen, Srv2Db_ConnData * connectPtr );