1 // Copyright 2001-2018 Crytek GmbH / Crytek Group. All rights reserved.
5 #include "Cryptography/rijndael.h"
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");
17 m_pService
= pService
;
19 for (uint32 i
= 0; i
< MAX_STATS_TASKS
; i
++)
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;
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");
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");
65 pTask
->lTaskID
= lobbyTaskID
;
66 pTask
->error
= eCLE_Success
;
67 pTask
->startedTask
= eTask
;
68 pTask
->subTask
= eTask
;
71 pTask
->pCbArg
= pCbArg
;
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;
89 *pLTaskID
= lobbyTaskID
;
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
);
123 void CCryStats::CancelTask(CryLobbyTaskID lTaskID
)
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
);
141 pTask
->canceled
= true;
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
]);
164 memcpy(p
, pParamData
, paramDataSize
);
169 return eCLE_OutOfMemory
;
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
)
193 SConfigurationParams param
= {
194 CLCC_CRYSTATS_ENCRYPTION_KEY
, { 0 }
196 m_pLobby
->GetConfigurationInformation(¶m
, 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",
207 NetLog("[Stats] Encrypted userdata: First few bytes:%02x%02x%02x%02x - %u bytes total",
215 if (sizeEncrypted
== nBufferSize
)
221 NetLog("[Stats] Encryption size mismatch; expected %u, got %u bytes.", nBufferSize
, sizeEncrypted
);
222 return eCLE_InternalError
;
227 return eCLE_InternalError
;
231 ECryLobbyError
CCryStats::DecryptUserData(uint32 nBufferSize
, const uint8
* pEncrypted
, uint8
* pDecrypted
)
234 SConfigurationParams param
= {
235 CLCC_CRYSTATS_ENCRYPTION_KEY
, { 0 }
237 m_pLobby
->GetConfigurationInformation(¶m
, 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",
248 NetLog("[Stats] Decrypted userdata: First few bytes:%02x%02x%02x%02x - %u bytes total",
256 if (sizeDecrypted
== nBufferSize
)
262 NetLog("[Stats] Decryption size mismatch; expected %u, got %u bytes.", nBufferSize
, sizeDecrypted
);
263 return eCLE_InternalError
;
267 #endif // USE_CRY_STATS