1 #include "Lobby2Message.h"
2 #include "Lobby2Server.h"
3 // libpq-fe.h is part of PostgreSQL which must be installed on this computer to use the PostgreRepository
4 #include "libpq-fe.h"
5 #include "PostgreSQLInterface.h"
6 #include "EpochTimeToString.h"
7 
8 #ifndef __LOBBY_2_MESSAGE_PGSQL_H
9 #define __LOBBY_2_MESSAGE_PGSQL_H
10 
11 namespace RakNet
12 {
13 
14 // --------------------------------------------- Database specific message implementations for the server --------------------------------------------
15 
16 #define __L2_MSG_DB_HEADER(__NAME__,__DB__) \
17 struct __NAME__##_##__DB__ : public __NAME__
18 
19 struct ClanMemberDescriptor
20 {
21 	unsigned int userId;
22 	RakNet::RakString name;
23 	bool isSubleader;
24 	ClanMemberState memberState;
25 	RakNet::RakString banReason;
26 };
27 
28 
29 // Helper functions
30 unsigned int GetUserRowFromHandle(RakNet::RakString& userName, PostgreSQLInterface *pgsql);
31 unsigned int GetClanIdFromHandle(RakNet::RakString clanName, PostgreSQLInterface *pgsql);
32 bool IsClanLeader(RakNet::RakString clanName, unsigned int userId, PostgreSQLInterface *pgsql);
33 unsigned int GetClanLeaderId(unsigned int clanId, PostgreSQLInterface *pgsql);
34 bool IsClanLeader(unsigned int clanId, unsigned int userId, PostgreSQLInterface *pgsql);
35 ClanMemberState GetClanMemberState(unsigned int clanId, unsigned int userId, bool *isSubleader, PostgreSQLInterface *pgsql);
36 void GetClanMembers(unsigned int clanId, DataStructures::List<ClanMemberDescriptor> &clanMembers, PostgreSQLInterface *pgsql);
37 bool IsTitleInUse(RakNet::RakString titleName, PostgreSQLInterface *pgsql);
38 bool StringContainsProfanity(RakNet::RakString string, PostgreSQLInterface *pgsql);
39 bool IsValidCountry(RakNet::RakString string, bool *countryHasStates, PostgreSQLInterface *pgsql);
40 bool IsValidState(RakNet::RakString string, PostgreSQLInterface *pgsql);
41 bool IsValidRace(RakNet::RakString string, PostgreSQLInterface *pgsql);
42 void GetFriendIDs(unsigned int callerUserId, bool excludeIfIgnored, PostgreSQLInterface *pgsql, DataStructures::List<unsigned int> &output);
43 void GetClanMateIDs(unsigned int callerUserId, bool excludeIfIgnored, PostgreSQLInterface *pgsql, DataStructures::List<unsigned int> &output);
44 bool IsIgnoredByTarget(unsigned int callerUserId, unsigned int targetUserId, PostgreSQLInterface *pgsql);
45 void OutputFriendsNotification(RakNet::Notification_Friends_StatusChange::Status notificationType, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
46 // This does NOT return the online status to output, as it is not threadsafe
47 void GetFriendInfosByStatus(unsigned int callerUserId, RakNet::RakString status, PostgreSQLInterface *pgsql, DataStructures::List<FriendInfo> &output, bool callerIsUserOne);
48 void SendEmail(DataStructures::List<RakNet::RakString> &recipientNames, unsigned int senderUserId, RakNet::RakString senderUserName, Lobby2Server *server, RakNet::RakString subject, RakNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, RakNet::RakString triggerString, PostgreSQLInterface *pgsql);
49 void SendEmail(DataStructures::List<unsigned int> &targetUserIds, unsigned int senderUserId, RakNet::RakString senderUserName, Lobby2Server *server, RakNet::RakString subject, RakNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, RakNet::RakString triggerString, PostgreSQLInterface *pgsql);
50 void SendEmail(unsigned int targetUserId, unsigned int senderUserId, RakNet::RakString senderUserName, Lobby2Server *server, RakNet::RakString subject, RakNet::RakString body, RakNetSmartPtr<BinaryDataBlock>binaryData, int status, RakNet::RakString triggerString, PostgreSQLInterface *pgsql);
51 int GetActiveClanCount(unsigned int userId, PostgreSQLInterface *pgsql);
52 bool CreateAccountParametersFailed( CreateAccountParameters &createAccountParameters, RakNet::Lobby2ResultCode &resultCode, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
53 void UpdateAccountFromMissingCreationParameters(CreateAccountParameters &createAccountParameters, unsigned int userPrimaryKey, Lobby2ServerCommand *command, PostgreSQLInterface *pgsql);
54 
__L2_MSG_DB_HEADER(Platform_Startup,PGSQL)55 __L2_MSG_DB_HEADER(Platform_Startup, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface ) { (void)command; (void)databaseInterface; return false; }};
__L2_MSG_DB_HEADER(Platform_Shutdown,PGSQL)56 __L2_MSG_DB_HEADER(Platform_Shutdown, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface ) { (void)command; (void)databaseInterface; return false; }};
__L2_MSG_DB_HEADER(System_CreateDatabase,PGSQL)57 __L2_MSG_DB_HEADER(System_CreateDatabase, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_DestroyDatabase,PGSQL)58 __L2_MSG_DB_HEADER(System_DestroyDatabase, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_CreateTitle,PGSQL)59 __L2_MSG_DB_HEADER(System_CreateTitle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_DestroyTitle,PGSQL)60 __L2_MSG_DB_HEADER(System_DestroyTitle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_GetTitleRequiredAge,PGSQL)61 __L2_MSG_DB_HEADER(System_GetTitleRequiredAge, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_GetTitleBinaryData,PGSQL)62 __L2_MSG_DB_HEADER(System_GetTitleBinaryData, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_RegisterProfanity,PGSQL)63 __L2_MSG_DB_HEADER(System_RegisterProfanity, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_BanUser,PGSQL)64 __L2_MSG_DB_HEADER(System_BanUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_UnbanUser,PGSQL)65 __L2_MSG_DB_HEADER(System_UnbanUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(CDKey_Add,PGSQL)66 __L2_MSG_DB_HEADER(CDKey_Add, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(CDKey_GetStatus,PGSQL)67 __L2_MSG_DB_HEADER(CDKey_GetStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(CDKey_Use,PGSQL)68 __L2_MSG_DB_HEADER(CDKey_Use, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(CDKey_FlagStolen,PGSQL)69 __L2_MSG_DB_HEADER(CDKey_FlagStolen, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_Login,PGSQL)70 __L2_MSG_DB_HEADER(Client_Login, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_Logoff,PGSQL)71 __L2_MSG_DB_HEADER(Client_Logoff, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_RegisterAccount,PGSQL)72 __L2_MSG_DB_HEADER(Client_RegisterAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_SetEmailAddressValidated,PGSQL)73 __L2_MSG_DB_HEADER(System_SetEmailAddressValidated, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_ValidateHandle,PGSQL)74 __L2_MSG_DB_HEADER(Client_ValidateHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_DeleteAccount,PGSQL)75 __L2_MSG_DB_HEADER(System_DeleteAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(System_PruneAccounts,PGSQL)76 __L2_MSG_DB_HEADER(System_PruneAccounts, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_GetEmailAddress,PGSQL)77 __L2_MSG_DB_HEADER(Client_GetEmailAddress, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_GetPasswordRecoveryQuestionByHandle,PGSQL)78 __L2_MSG_DB_HEADER(Client_GetPasswordRecoveryQuestionByHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_GetPasswordByPasswordRecoveryAnswer,PGSQL)79 __L2_MSG_DB_HEADER(Client_GetPasswordByPasswordRecoveryAnswer, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_ChangeHandle,PGSQL)80 __L2_MSG_DB_HEADER(Client_ChangeHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_UpdateAccount,PGSQL)81 __L2_MSG_DB_HEADER(Client_UpdateAccount, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_GetAccountDetails,PGSQL)82 __L2_MSG_DB_HEADER(Client_GetAccountDetails, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_StartIgnore,PGSQL)83 __L2_MSG_DB_HEADER(Client_StartIgnore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_StopIgnore,PGSQL)84 __L2_MSG_DB_HEADER(Client_StopIgnore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_GetIgnoreList,PGSQL)85 __L2_MSG_DB_HEADER(Client_GetIgnoreList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Client_PerTitleIntegerStorage,PGSQL)86 __L2_MSG_DB_HEADER(Client_PerTitleIntegerStorage, PGSQL){
87 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
88 	virtual bool Write( Lobby2ServerCommand *command, void *databaseInterface );
89 	virtual bool Read( Lobby2ServerCommand *command, void *databaseInterface );
90 	virtual bool Delete( Lobby2ServerCommand *command, void *databaseInterface );
91 	virtual bool Add( Lobby2ServerCommand *command, void *databaseInterface );
92 };
__L2_MSG_DB_HEADER(Client_SetPresence,PGSQL)93 __L2_MSG_DB_HEADER(Client_SetPresence, PGSQL){virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle );};
__L2_MSG_DB_HEADER(Client_GetPresence,PGSQL)94 __L2_MSG_DB_HEADER(Client_GetPresence, PGSQL){virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle );};
__L2_MSG_DB_HEADER(Client_PerTitleBinaryStorage,PGSQL)95 __L2_MSG_DB_HEADER(Client_PerTitleBinaryStorage, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Friends_SendInvite,PGSQL)96 __L2_MSG_DB_HEADER(Friends_SendInvite, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Friends_AcceptInvite,PGSQL)97 __L2_MSG_DB_HEADER(Friends_AcceptInvite, PGSQL){
98 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
99 	virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
100 };
__L2_MSG_DB_HEADER(Friends_RejectInvite,PGSQL)101 __L2_MSG_DB_HEADER(Friends_RejectInvite, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Friends_GetInvites,PGSQL)102 __L2_MSG_DB_HEADER(Friends_GetInvites, PGSQL){
103 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
104 	virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
105 };
__L2_MSG_DB_HEADER(Friends_GetFriends,PGSQL)106 __L2_MSG_DB_HEADER(Friends_GetFriends, PGSQL){
107 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
108 	virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
109 };
__L2_MSG_DB_HEADER(Friends_Remove,PGSQL)110 __L2_MSG_DB_HEADER(Friends_Remove, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(BookmarkedUsers_Add,PGSQL)111 __L2_MSG_DB_HEADER(BookmarkedUsers_Add, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(BookmarkedUsers_Remove,PGSQL)112 __L2_MSG_DB_HEADER(BookmarkedUsers_Remove, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(BookmarkedUsers_Get,PGSQL)113 __L2_MSG_DB_HEADER(BookmarkedUsers_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Emails_Send,PGSQL)114 __L2_MSG_DB_HEADER(Emails_Send, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Emails_Get,PGSQL)115 __L2_MSG_DB_HEADER(Emails_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Emails_Delete,PGSQL)116 __L2_MSG_DB_HEADER(Emails_Delete, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Emails_SetStatus,PGSQL)117 __L2_MSG_DB_HEADER(Emails_SetStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_SubmitMatch,PGSQL)118 __L2_MSG_DB_HEADER(Ranking_SubmitMatch, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_GetMatches,PGSQL)119 __L2_MSG_DB_HEADER(Ranking_GetMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_GetMatchBinaryData,PGSQL)120 __L2_MSG_DB_HEADER(Ranking_GetMatchBinaryData, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_GetTotalScore,PGSQL)121 __L2_MSG_DB_HEADER(Ranking_GetTotalScore, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_WipeScoresForPlayer,PGSQL)122 __L2_MSG_DB_HEADER(Ranking_WipeScoresForPlayer, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_WipeMatches,PGSQL)123 __L2_MSG_DB_HEADER(Ranking_WipeMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_PruneMatches,PGSQL)124 __L2_MSG_DB_HEADER(Ranking_PruneMatches, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_UpdateRating,PGSQL)125 __L2_MSG_DB_HEADER(Ranking_UpdateRating, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_WipeRatings,PGSQL)126 __L2_MSG_DB_HEADER(Ranking_WipeRatings, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Ranking_GetRating,PGSQL)127 __L2_MSG_DB_HEADER(Ranking_GetRating, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_Create,PGSQL)128 __L2_MSG_DB_HEADER(Clans_Create, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_SetProperties,PGSQL)129 __L2_MSG_DB_HEADER(Clans_SetProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_GetProperties,PGSQL)130 __L2_MSG_DB_HEADER(Clans_GetProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_SetMyMemberProperties,PGSQL)131 __L2_MSG_DB_HEADER(Clans_SetMyMemberProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_GrantLeader,PGSQL)132 __L2_MSG_DB_HEADER(Clans_GrantLeader, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_SetSubleaderStatus,PGSQL)133 __L2_MSG_DB_HEADER(Clans_SetSubleaderStatus, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_SetMemberRank,PGSQL)134 __L2_MSG_DB_HEADER(Clans_SetMemberRank, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_GetMemberProperties,PGSQL)135 __L2_MSG_DB_HEADER(Clans_GetMemberProperties, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_ChangeHandle,PGSQL)136 __L2_MSG_DB_HEADER(Clans_ChangeHandle, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_Leave,PGSQL)137 __L2_MSG_DB_HEADER(Clans_Leave, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_Get,PGSQL)138 __L2_MSG_DB_HEADER(Clans_Get, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_SendJoinInvitation,PGSQL)139 __L2_MSG_DB_HEADER(Clans_SendJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_WithdrawJoinInvitation,PGSQL)140 __L2_MSG_DB_HEADER(Clans_WithdrawJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_AcceptJoinInvitation,PGSQL)141 __L2_MSG_DB_HEADER(Clans_AcceptJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_RejectJoinInvitation,PGSQL)142 __L2_MSG_DB_HEADER(Clans_RejectJoinInvitation, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_DownloadInvitationList,PGSQL)143 __L2_MSG_DB_HEADER(Clans_DownloadInvitationList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_SendJoinRequest,PGSQL)144 __L2_MSG_DB_HEADER(Clans_SendJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_WithdrawJoinRequest,PGSQL)145 __L2_MSG_DB_HEADER(Clans_WithdrawJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_AcceptJoinRequest,PGSQL)146 __L2_MSG_DB_HEADER(Clans_AcceptJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_RejectJoinRequest,PGSQL)147 __L2_MSG_DB_HEADER(Clans_RejectJoinRequest, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_DownloadRequestList,PGSQL)148 __L2_MSG_DB_HEADER(Clans_DownloadRequestList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_KickAndBlacklistUser,PGSQL)149 __L2_MSG_DB_HEADER(Clans_KickAndBlacklistUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_UnblacklistUser,PGSQL)150 __L2_MSG_DB_HEADER(Clans_UnblacklistUser, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_GetBlacklist,PGSQL)151 __L2_MSG_DB_HEADER(Clans_GetBlacklist, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_GetMembers,PGSQL)152 __L2_MSG_DB_HEADER(Clans_GetMembers, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
__L2_MSG_DB_HEADER(Clans_GetList,PGSQL)153 __L2_MSG_DB_HEADER(Clans_GetList, PGSQL){virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );};
154 
__L2_MSG_DB_HEADER(Clans_CreateBoard,PGSQL)155 __L2_MSG_DB_HEADER(Clans_CreateBoard, PGSQL)
156 {
157 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
158 	{
159 		(void)command;
160 
161 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
162 		PGresult *result = pgsql->QueryVariadic("");
163 		if (result!=0)
164 		{
165 			PQclear(result);
166 			resultCode=L2RC_SUCCESS;
167 		}
168 		else
169 		{
170 			resultCode=L2RC_SUCCESS;
171 		}
172 		return true;
173 	}
174 };
175 
__L2_MSG_DB_HEADER(Clans_DestroyBoard,PGSQL)176 __L2_MSG_DB_HEADER(Clans_DestroyBoard, PGSQL)
177 {
178 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
179 	{
180 		(void)command;
181 
182 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
183 		PGresult *result = pgsql->QueryVariadic("");
184 		if (result!=0)
185 		{
186 			PQclear(result);
187 			resultCode=L2RC_SUCCESS;
188 		}
189 		else
190 		{
191 			resultCode=L2RC_SUCCESS;
192 		}
193 		return true;
194 	}
195 };
196 
__L2_MSG_DB_HEADER(Clans_CreateNewTopic,PGSQL)197 __L2_MSG_DB_HEADER(Clans_CreateNewTopic, PGSQL)
198 {
199 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
200 	{
201 		(void)command;
202 
203 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
204 		PGresult *result = pgsql->QueryVariadic("");
205 		if (result!=0)
206 		{
207 			PQclear(result);
208 			resultCode=L2RC_SUCCESS;
209 		}
210 		else
211 		{
212 			resultCode=L2RC_SUCCESS;
213 		}
214 		return true;
215 	}
216 };
217 
__L2_MSG_DB_HEADER(Clans_ReplyToTopic,PGSQL)218 __L2_MSG_DB_HEADER(Clans_ReplyToTopic, PGSQL)
219 {
220 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
221 	{
222 		(void)command;
223 
224 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
225 		PGresult *result = pgsql->QueryVariadic("");
226 		if (result!=0)
227 		{
228 			PQclear(result);
229 			resultCode=L2RC_SUCCESS;
230 		}
231 		else
232 		{
233 			resultCode=L2RC_SUCCESS;
234 		}
235 		return true;
236 	}
237 };
238 
__L2_MSG_DB_HEADER(Clans_RemovePost,PGSQL)239 __L2_MSG_DB_HEADER(Clans_RemovePost, PGSQL)
240 {
241 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
242 	{
243 		(void)command;
244 
245 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
246 		PGresult *result = pgsql->QueryVariadic("");
247 		if (result!=0)
248 		{
249 			PQclear(result);
250 			resultCode=L2RC_SUCCESS;
251 		}
252 		else
253 		{
254 			resultCode=L2RC_SUCCESS;
255 		}
256 		return true;
257 	}
258 };
259 
__L2_MSG_DB_HEADER(Clans_GetBoards,PGSQL)260 __L2_MSG_DB_HEADER(Clans_GetBoards, PGSQL)
261 {
262 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
263 	{
264 		(void)command;
265 
266 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
267 		PGresult *result = pgsql->QueryVariadic("");
268 		if (result!=0)
269 		{
270 			PQclear(result);
271 			resultCode=L2RC_SUCCESS;
272 		}
273 		else
274 		{
275 			resultCode=L2RC_SUCCESS;
276 		}
277 		return true;
278 	}
279 };
280 
__L2_MSG_DB_HEADER(Clans_GetTopics,PGSQL)281 __L2_MSG_DB_HEADER(Clans_GetTopics, PGSQL)
282 {
283 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
284 	{
285 		(void)command;
286 
287 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
288 		PGresult *result = pgsql->QueryVariadic("");
289 		if (result!=0)
290 		{
291 			PQclear(result);
292 			resultCode=L2RC_SUCCESS;
293 		}
294 		else
295 		{
296 			resultCode=L2RC_SUCCESS;
297 		}
298 		return true;
299 	}
300 };
301 
__L2_MSG_DB_HEADER(Clans_GetPosts,PGSQL)302 __L2_MSG_DB_HEADER(Clans_GetPosts, PGSQL)
303 {
304 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
305 	{
306 		(void)command;
307 
308 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
309 		PGresult *result = pgsql->QueryVariadic("");
310 		if (result!=0)
311 		{
312 			PQclear(result);
313 			resultCode=L2RC_SUCCESS;
314 		}
315 		else
316 		{
317 			resultCode=L2RC_SUCCESS;
318 		}
319 		return true;
320 	}
321 };
322 
__L2_MSG_DB_HEADER(Notification_Friends_StatusChange,PGSQL)323 __L2_MSG_DB_HEADER(Notification_Friends_StatusChange, PGSQL)
324 {
325 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
326 	{
327 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
328 		if (command->callerSystemAddresses.Size()==0)
329 		{
330 			OutputFriendsNotification(Notification_Friends_StatusChange::FRIEND_LOGGED_OFF, command, pgsql);
331 		}
332 
333 		// Don't let the thread return this notification with UNASSIGNED_SYSTEM_ADDRESS to the user. It's just a message to the thread.
334 		return false;
335 	}
336 	virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle )
337 	{
338 		switch (op)
339 		{
340 			case Notification_Friends_StatusChange::FRIEND_LOGGED_IN:
341 			case Notification_Friends_StatusChange::FRIEND_LOGGED_IN_DIFFERENT_CONTEXT:
342 			case Notification_Friends_StatusChange::THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS:
343 				server->GetPresence(presence,otherHandle);
344 				break;
345 			case Notification_Friends_StatusChange::FRIEND_LOGGED_OFF:
346 				presence.isVisible=false;
347 				presence.status=Lobby2Presence::NOT_ONLINE;
348 				break;
349 			case Notification_Friends_StatusChange::FRIEND_ACCOUNT_WAS_DELETED:
350 			case Notification_Friends_StatusChange::YOU_WERE_REMOVED_AS_A_FRIEND:
351 			case Notification_Friends_StatusChange::GOT_INVITATION_TO_BE_FRIENDS:
352 			case Notification_Friends_StatusChange::THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS:
353 				presence.isVisible=false;
354 				presence.status=Lobby2Presence::UNDEFINED;
355 				break;
356 		}
357 	}
358 };
359 
__L2_MSG_DB_HEADER(Notification_Friends_PresenceUpdate,PGSQL)360 __L2_MSG_DB_HEADER(Notification_Friends_PresenceUpdate, PGSQL)
361 {
362 	virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface )
363 	{
364 		PostgreSQLInterface *pgsql = (PostgreSQLInterface *)databaseInterface;
365 
366 		// Tell all friends about this new login
367 		DataStructures::List<unsigned int> output;
368 		GetFriendIDs(command->callerUserId, true, pgsql, output);
369 
370 		unsigned int idx;
371 		for (idx=0; idx < output.Size(); idx++)
372 		{
373 			Notification_Friends_PresenceUpdate *notification = (Notification_Friends_PresenceUpdate *) command->server->GetMessageFactory()->Alloc(L2MID_Notification_Friends_PresenceUpdate);
374 			notification->otherHandle=command->callingUserName;
375 			notification->newPresence=newPresence;
376 			notification->resultCode=L2RC_SUCCESS;
377 			command->server->AddOutputFromThread(notification, output[idx], "");
378 		}
379 
380 		// Don't let the thread return this notification with UNASSIGNED_SYSTEM_ADDRESS to the user. It's just a message to the thread.
381 		return false;
382 	}
383 };
384 
385 
386 // --------------------------------------------- Database specific factory class for all messages --------------------------------------------
387 
388 #define __L2_MSG_FACTORY_IMPL(__NAME__,__DB__) {case L2MID_##__NAME__ : return RakNet::OP_NEW< __NAME__##_##__DB__ >( __FILE__, __LINE__ ) ;}
389 
390 struct Lobby2MessageFactory_PGSQL : public Lobby2MessageFactory
391 {
AllocLobby2MessageFactory_PGSQL392 	virtual Lobby2Message *Alloc(Lobby2MessageID id)
393 	{
394 		switch (id)
395 		{
396 			__L2_MSG_FACTORY_IMPL(Platform_Startup, PGSQL);
397 			__L2_MSG_FACTORY_IMPL(Platform_Shutdown, PGSQL);
398 			__L2_MSG_FACTORY_IMPL(System_CreateDatabase, PGSQL);
399 			__L2_MSG_FACTORY_IMPL(System_DestroyDatabase, PGSQL);
400 			__L2_MSG_FACTORY_IMPL(System_CreateTitle, PGSQL);
401 			__L2_MSG_FACTORY_IMPL(System_DestroyTitle, PGSQL);
402 			__L2_MSG_FACTORY_IMPL(System_GetTitleRequiredAge, PGSQL);
403 			__L2_MSG_FACTORY_IMPL(System_GetTitleBinaryData, PGSQL);
404 			__L2_MSG_FACTORY_IMPL(System_RegisterProfanity, PGSQL);
405 			__L2_MSG_FACTORY_IMPL(System_BanUser, PGSQL);
406 			__L2_MSG_FACTORY_IMPL(System_UnbanUser, PGSQL);
407 			__L2_MSG_FACTORY_IMPL(CDKey_Add, PGSQL);
408 			__L2_MSG_FACTORY_IMPL(CDKey_GetStatus, PGSQL);
409 			__L2_MSG_FACTORY_IMPL(CDKey_Use, PGSQL);
410 			__L2_MSG_FACTORY_IMPL(CDKey_FlagStolen, PGSQL);
411 			__L2_MSG_FACTORY_IMPL(Client_Login, PGSQL);
412 			__L2_MSG_FACTORY_IMPL(Client_Logoff, PGSQL);
413 			__L2_MSG_FACTORY_IMPL(Client_RegisterAccount, PGSQL);
414 			__L2_MSG_FACTORY_IMPL(System_SetEmailAddressValidated, PGSQL);
415 			__L2_MSG_FACTORY_IMPL(Client_ValidateHandle, PGSQL);
416 			__L2_MSG_FACTORY_IMPL(System_DeleteAccount, PGSQL);
417 			__L2_MSG_FACTORY_IMPL(System_PruneAccounts, PGSQL);
418 			__L2_MSG_FACTORY_IMPL(Client_GetEmailAddress, PGSQL);
419 			__L2_MSG_FACTORY_IMPL(Client_GetPasswordRecoveryQuestionByHandle, PGSQL);
420 			__L2_MSG_FACTORY_IMPL(Client_GetPasswordByPasswordRecoveryAnswer, PGSQL);
421 			__L2_MSG_FACTORY_IMPL(Client_ChangeHandle, PGSQL);
422 			__L2_MSG_FACTORY_IMPL(Client_UpdateAccount, PGSQL);
423 			__L2_MSG_FACTORY_IMPL(Client_GetAccountDetails, PGSQL);
424 			__L2_MSG_FACTORY_IMPL(Client_StartIgnore, PGSQL);
425 			__L2_MSG_FACTORY_IMPL(Client_StopIgnore, PGSQL);
426 			__L2_MSG_FACTORY_IMPL(Client_GetIgnoreList, PGSQL);
427 			__L2_MSG_FACTORY_IMPL(Client_PerTitleIntegerStorage, PGSQL);
428 			__L2_MSG_FACTORY_IMPL(Client_PerTitleBinaryStorage, PGSQL);
429 			__L2_MSG_FACTORY_IMPL(Client_SetPresence, PGSQL);
430 			__L2_MSG_FACTORY_IMPL(Client_GetPresence, PGSQL);
431 			__L2_MSG_FACTORY_IMPL(Friends_SendInvite, PGSQL);
432 			__L2_MSG_FACTORY_IMPL(Friends_AcceptInvite, PGSQL);
433 			__L2_MSG_FACTORY_IMPL(Friends_RejectInvite, PGSQL);
434 			__L2_MSG_FACTORY_IMPL(Friends_GetInvites, PGSQL);
435 			__L2_MSG_FACTORY_IMPL(Friends_GetFriends, PGSQL);
436 			__L2_MSG_FACTORY_IMPL(Friends_Remove, PGSQL);
437 			__L2_MSG_FACTORY_IMPL(BookmarkedUsers_Add, PGSQL);
438 			__L2_MSG_FACTORY_IMPL(BookmarkedUsers_Remove, PGSQL);
439 			__L2_MSG_FACTORY_IMPL(BookmarkedUsers_Get, PGSQL);
440 			__L2_MSG_FACTORY_IMPL(Emails_Send, PGSQL);
441 			__L2_MSG_FACTORY_IMPL(Emails_Get, PGSQL);
442 			__L2_MSG_FACTORY_IMPL(Emails_Delete, PGSQL);
443 			__L2_MSG_FACTORY_IMPL(Emails_SetStatus, PGSQL);
444 			__L2_MSG_FACTORY_IMPL(Ranking_SubmitMatch, PGSQL);
445 			__L2_MSG_FACTORY_IMPL(Ranking_GetMatches, PGSQL);
446 			__L2_MSG_FACTORY_IMPL(Ranking_GetMatchBinaryData, PGSQL);
447 			__L2_MSG_FACTORY_IMPL(Ranking_GetTotalScore, PGSQL);
448 			__L2_MSG_FACTORY_IMPL(Ranking_WipeScoresForPlayer, PGSQL);
449 			__L2_MSG_FACTORY_IMPL(Ranking_WipeMatches, PGSQL);
450 			__L2_MSG_FACTORY_IMPL(Ranking_PruneMatches, PGSQL);
451 			__L2_MSG_FACTORY_IMPL(Ranking_UpdateRating, PGSQL);
452 			__L2_MSG_FACTORY_IMPL(Ranking_WipeRatings, PGSQL);
453 			__L2_MSG_FACTORY_IMPL(Ranking_GetRating, PGSQL);
454 			__L2_MSG_FACTORY_IMPL(Clans_Create, PGSQL);
455 			__L2_MSG_FACTORY_IMPL(Clans_SetProperties, PGSQL);
456 			__L2_MSG_FACTORY_IMPL(Clans_GetProperties, PGSQL);
457 			__L2_MSG_FACTORY_IMPL(Clans_SetMyMemberProperties, PGSQL);
458 			__L2_MSG_FACTORY_IMPL(Clans_GrantLeader, PGSQL);
459 			__L2_MSG_FACTORY_IMPL(Clans_SetSubleaderStatus, PGSQL);
460 			__L2_MSG_FACTORY_IMPL(Clans_SetMemberRank, PGSQL);
461 			__L2_MSG_FACTORY_IMPL(Clans_GetMemberProperties, PGSQL);
462 			__L2_MSG_FACTORY_IMPL(Clans_ChangeHandle, PGSQL);
463 			__L2_MSG_FACTORY_IMPL(Clans_Leave, PGSQL);
464 			__L2_MSG_FACTORY_IMPL(Clans_Get, PGSQL);
465 			__L2_MSG_FACTORY_IMPL(Clans_SendJoinInvitation, PGSQL);
466 			__L2_MSG_FACTORY_IMPL(Clans_WithdrawJoinInvitation, PGSQL);
467 			__L2_MSG_FACTORY_IMPL(Clans_AcceptJoinInvitation, PGSQL);
468 			__L2_MSG_FACTORY_IMPL(Clans_RejectJoinInvitation, PGSQL);
469 			__L2_MSG_FACTORY_IMPL(Clans_DownloadInvitationList, PGSQL);
470 			__L2_MSG_FACTORY_IMPL(Clans_SendJoinRequest, PGSQL);
471 			__L2_MSG_FACTORY_IMPL(Clans_WithdrawJoinRequest, PGSQL);
472 			__L2_MSG_FACTORY_IMPL(Clans_AcceptJoinRequest, PGSQL);
473 			__L2_MSG_FACTORY_IMPL(Clans_RejectJoinRequest, PGSQL);
474 			__L2_MSG_FACTORY_IMPL(Clans_DownloadRequestList, PGSQL);
475 			__L2_MSG_FACTORY_IMPL(Clans_KickAndBlacklistUser, PGSQL);
476 			__L2_MSG_FACTORY_IMPL(Clans_UnblacklistUser, PGSQL);
477 			__L2_MSG_FACTORY_IMPL(Clans_GetBlacklist, PGSQL);
478 			__L2_MSG_FACTORY_IMPL(Clans_GetMembers, PGSQL);
479 			__L2_MSG_FACTORY_IMPL(Clans_GetList, PGSQL);
480 			__L2_MSG_FACTORY_IMPL(Clans_CreateBoard, PGSQL);
481 			__L2_MSG_FACTORY_IMPL(Clans_DestroyBoard, PGSQL);
482 			__L2_MSG_FACTORY_IMPL(Clans_CreateNewTopic, PGSQL);
483 			__L2_MSG_FACTORY_IMPL(Clans_ReplyToTopic, PGSQL);
484 			__L2_MSG_FACTORY_IMPL(Clans_RemovePost, PGSQL);
485 			__L2_MSG_FACTORY_IMPL(Clans_GetBoards, PGSQL);
486 			__L2_MSG_FACTORY_IMPL(Clans_GetTopics, PGSQL);
487 			__L2_MSG_FACTORY_IMPL(Clans_GetPosts, PGSQL);
488 			__L2_MSG_FACTORY_BASE(Notification_Client_RemoteLogin);
489 			__L2_MSG_FACTORY_BASE(Notification_Client_IgnoreStatus);
490 			__L2_MSG_FACTORY_IMPL(Notification_Friends_StatusChange, PGSQL);
491 			__L2_MSG_FACTORY_IMPL(Notification_Friends_PresenceUpdate, PGSQL);
492 			__L2_MSG_FACTORY_BASE(Notification_User_ChangedHandle);
493 			__L2_MSG_FACTORY_BASE(Notification_Friends_CreatedClan);
494 			__L2_MSG_FACTORY_BASE(Notification_Emails_Received);
495 			__L2_MSG_FACTORY_BASE(Notification_Clans_GrantLeader);
496 			__L2_MSG_FACTORY_BASE(Notification_Clans_SetSubleaderStatus);
497 			__L2_MSG_FACTORY_BASE(Notification_Clans_SetMemberRank);
498 			__L2_MSG_FACTORY_BASE(Notification_Clans_ChangeHandle);
499 			__L2_MSG_FACTORY_BASE(Notification_Clans_Leave);
500 			__L2_MSG_FACTORY_BASE(Notification_Clans_PendingJoinStatus);
501 			__L2_MSG_FACTORY_BASE(Notification_Clans_NewClanMember);
502 			__L2_MSG_FACTORY_BASE(Notification_Clans_KickAndBlacklistUser);
503 			__L2_MSG_FACTORY_BASE(Notification_Clans_UnblacklistUser);
504 			__L2_MSG_FACTORY_BASE(Notification_Clans_Destroyed);
505 
506 
507 		default:
508 			return 0;
509 		};
510 	};
511 };
512 }; // namespace RakNet
513 
514 #endif
515