!I integrate from //ce/main...
[CRYENGINE.git] / Code / CryPlugins / CryLobby / Module / CryStats.cpp
blobf6d1eda57b041475e0c8b854efa225e690318249
1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
3 #include "StdAfx.h"
5 #include "Cryptography/rijndael.h"
7 #include "CryStats.h"
9 #if USE_CRY_STATS
11 CCryStats::CCryStats(CCryLobby* pLobby, CCryLobbyService* pService)
13 CRY_ASSERT_MESSAGE(pLobby, "CCryStats::CCryStats: Lobby not specified");
14 CRY_ASSERT_MESSAGE(pService, "CCryStats::CCryStats: Service not specified");
16 m_pLobby = pLobby;
17 m_pService = pService;
19 for (uint32 i = 0; i < MAX_STATS_TASKS; i++)
21 m_pTask[i] = NULL;
25 ECryLobbyError CCryStats::Initialise()
27 for (uint32 i = 0; i < MAX_STATS_TASKS; i++)
29 CRY_ASSERT_MESSAGE(m_pTask[i], "CCryStats: Task base pointers not setup");
30 m_pTask[i]->used = false;
33 return eCLE_Success;
36 ECryLobbyError CCryStats::Terminate()
38 for (uint32 i = 0; i < MAX_STATS_TASKS; i++)
40 CRY_ASSERT_MESSAGE(m_pTask[i], "CCryStats: Task base pointers not setup");
42 if (m_pTask[i]->used)
44 FreeTask(i);
48 return eCLE_Success;
51 ECryLobbyError CCryStats::StartTask(uint32 eTask, bool startRunning, CryStatsTaskID* pSTaskID, CryLobbyTaskID* pLTaskID, CryLobbySessionHandle h, void* pCb, void* pCbArg)
53 CryLobbyTaskID lobbyTaskID = m_pLobby->CreateTask();
55 if (lobbyTaskID != CryLobbyInvalidTaskID)
57 for (uint32 i = 0; i < MAX_STATS_TASKS; i++)
59 STask* pTask = m_pTask[i];
61 CRY_ASSERT_MESSAGE(pTask, "CCryStats: Task base pointers not setup");
63 if (!pTask->used)
65 pTask->lTaskID = lobbyTaskID;
66 pTask->error = eCLE_Success;
67 pTask->startedTask = eTask;
68 pTask->subTask = eTask;
69 pTask->session = h;
70 pTask->pCb = pCb;
71 pTask->pCbArg = pCbArg;
72 pTask->used = true;
73 pTask->running = startRunning;
74 pTask->canceled = false;
76 for (uint32 j = 0; j < MAX_STATS_PARAMS; j++)
78 pTask->paramsMem[j] = TMemInvalidHdl;
79 pTask->paramsNum[j] = 0;
82 if (pSTaskID)
84 *pSTaskID = i;
87 if (pLTaskID)
89 *pLTaskID = lobbyTaskID;
92 return eCLE_Success;
96 m_pLobby->ReleaseTask(lobbyTaskID);
99 return eCLE_TooManyTasks;
102 void CCryStats::FreeTask(CryStatsTaskID sTaskID)
104 STask* pTask = m_pTask[sTaskID];
106 CRY_ASSERT_MESSAGE(pTask, "CCryStats: Task base pointers not setup");
108 for (uint32 i = 0; i < MAX_STATS_PARAMS; i++)
110 if (pTask->paramsMem[i] != TMemInvalidHdl)
112 m_pLobby->MemFree(pTask->paramsMem[i]);
113 pTask->paramsMem[i] = TMemInvalidHdl;
115 pTask->paramsNum[i] = 0;
118 m_pLobby->ReleaseTask(pTask->lTaskID);
120 pTask->used = false;
123 void CCryStats::CancelTask(CryLobbyTaskID lTaskID)
125 LOBBY_AUTO_LOCK;
127 NetLog("[Lobby]Try cancel task %u", lTaskID);
129 if (lTaskID != CryLobbyInvalidTaskID)
131 for (uint32 i = 0; i < MAX_STATS_TASKS; i++)
133 STask* pTask = m_pTask[i];
135 CRY_ASSERT_MESSAGE(pTask, "CCryStats: Task base pointers not setup");
137 if (pTask->used && (pTask->lTaskID == lTaskID))
139 NetLog("[Lobby] Task %u canceled", lTaskID);
140 pTask->pCb = NULL;
141 pTask->canceled = true;
143 break;
149 ECryLobbyError CCryStats::CreateTaskParamMem(CryStatsTaskID sTaskID, uint32 param, const void* pParamData, size_t paramDataSize)
151 STask* pTask = m_pTask[sTaskID];
153 CRY_ASSERT_MESSAGE(pTask, "CCryStats: Task base pointers not setup");
155 if (paramDataSize > 0)
157 pTask->paramsMem[param] = m_pLobby->MemAlloc(paramDataSize);
158 void* p = m_pLobby->MemGetPtr(pTask->paramsMem[param]);
160 if (p)
162 if (pParamData)
164 memcpy(p, pParamData, paramDataSize);
167 else
169 return eCLE_OutOfMemory;
173 return eCLE_Success;
176 void CCryStats::UpdateTaskError(CryStatsTaskID sTaskID, ECryLobbyError error)
178 STask* pTask = m_pTask[sTaskID];
180 CRY_ASSERT_MESSAGE(pTask, "CCryStats: Task base pointers not setup");
182 if (pTask->error == eCLE_Success)
184 pTask->error = error;
188 ECryLobbyError CCryStats::EncryptUserData(uint32 nBufferSize, const uint8* pUnencrypted, uint8* pEncrypted)
190 if (gEnv->pNetwork)
192 //-- get key
193 SConfigurationParams param = {
194 CLCC_CRYSTATS_ENCRYPTION_KEY, { 0 }
196 m_pLobby->GetConfigurationInformation(&param, 1);
198 uint32 sizeEncrypted = gEnv->pNetwork->RijndaelEncryptBuffer(pEncrypted, pUnencrypted, nBufferSize, (uint8*)param.m_pData, 32);
200 NetLog("[Stats] Unencrypted userdata: First few bytes:%02x%02x%02x%02x - %u bytes total",
201 pUnencrypted[0],
202 pUnencrypted[1],
203 pUnencrypted[2],
204 pUnencrypted[3],
205 nBufferSize
207 NetLog("[Stats] Encrypted userdata: First few bytes:%02x%02x%02x%02x - %u bytes total",
208 pEncrypted[0],
209 pEncrypted[1],
210 pEncrypted[2],
211 pEncrypted[3],
212 sizeEncrypted
215 if (sizeEncrypted == nBufferSize)
217 return eCLE_Success;
219 else
221 NetLog("[Stats] Encryption size mismatch; expected %u, got %u bytes.", nBufferSize, sizeEncrypted);
222 return eCLE_InternalError;
225 else
227 return eCLE_InternalError;
231 ECryLobbyError CCryStats::DecryptUserData(uint32 nBufferSize, const uint8* pEncrypted, uint8* pDecrypted)
233 //-- get key
234 SConfigurationParams param = {
235 CLCC_CRYSTATS_ENCRYPTION_KEY, { 0 }
237 m_pLobby->GetConfigurationInformation(&param, 1);
239 uint32 sizeDecrypted = gEnv->pNetwork->RijndaelDecryptBuffer(pDecrypted, pEncrypted, nBufferSize, (uint8*)param.m_pData, 32);
241 NetLog("[Stats] Encrypted userdata: First few bytes:%02x%02x%02x%02x - %u bytes total",
242 pEncrypted[0],
243 pEncrypted[1],
244 pEncrypted[2],
245 pEncrypted[3],
246 nBufferSize
248 NetLog("[Stats] Decrypted userdata: First few bytes:%02x%02x%02x%02x - %u bytes total",
249 pDecrypted[0],
250 pDecrypted[1],
251 pDecrypted[2],
252 pDecrypted[3],
253 sizeDecrypted
256 if (sizeDecrypted == nBufferSize)
258 return eCLE_Success;
260 else
262 NetLog("[Stats] Decryption size mismatch; expected %u, got %u bytes.", nBufferSize, sizeDecrypted);
263 return eCLE_InternalError;
267 #endif // USE_CRY_STATS