Expanded the limit of resources from 1280 to 4096.

This commit is contained in:
s1lentq 2016-05-05 20:52:46 +06:00
parent 465d95393a
commit 8d1c5e1bbb
5 changed files with 40 additions and 43 deletions

View File

@ -299,7 +299,7 @@ typedef struct enginefuncs_s
void(*pfnQueryClientCvarValue2) (const edict_t *player, const char *cvarName, int requestID); void(*pfnQueryClientCvarValue2) (const edict_t *player, const char *cvarName, int requestID);
// Added 2009/06/19 (no SDK update): // Added 2009/06/19 (no SDK update):
int(*pfnEngCheckParm) (const char *pchCmdLineToken, char **ppnext); //int(*pfnEngCheckParm) (const char *pchCmdLineToken, char **ppnext);
} enginefuncs_t; } enginefuncs_t;

View File

@ -4,7 +4,7 @@ plugin_info_t Plugin_info =
{ {
META_INTERFACE_VERSION, META_INTERFACE_VERSION,
"Rechecker", "Rechecker",
"2.0", "2.1",
__DATE__, __DATE__,
"s1lent", "s1lent",
"http://www.dedicated-server.ru/", "http://www.dedicated-server.ru/",

View File

@ -5,8 +5,10 @@
#else #else
#define _stricmp strcasecmp #define _stricmp strcasecmp
#define _mkdir mkdir #define _mkdir mkdir
// Deail with stupid macro in kernel.h #ifdef __FUNCTION__
#undef __FUNCTION__ #undef __FUNCTION__
#endif
#define __FUNCTION__ __func__
#endif // _WIN32 #endif // _WIN32
#define MAX_PATH_LENGTH 260 #define MAX_PATH_LENGTH 260

View File

@ -15,18 +15,16 @@ int CResourceFile::CreateResourceList()
ComputeConsistencyFiles(); ComputeConsistencyFiles();
for (auto iter = m_resourceList.begin(), end = m_resourceList.end(); iter != end; ++iter) for (auto& res : m_resourceList)
{ {
CResourceBuffer *pRes = (*iter);
// prevent duplicate of filenames // prevent duplicate of filenames
// check if filename is been marked so do not add the resource again // check if filename is been marked so do not add the resource again
if (!pRes->IsDuplicate()) if (!res->IsDuplicate())
{ {
// check limit resource // check limit resource
if (g_RehldsServerData->GetResourcesNum() >= MAX_RESOURCE_LIST) if (g_RehldsServerData->GetResourcesNum() >= RESOURCE_MAX_COUNT)
{ {
UTIL_Printf(__FUNCTION__ ": can't add resource \"%s\" on line %d; exceeded the limit of resources max '%d'\n", pRes->GetFileName(), pRes->GetLine(), MAX_RESOURCE_LIST); UTIL_Printf(__FUNCTION__ ": can't add resource \"%s\" on line %d; exceeded the limit of resources max '%d'\n", res->GetFileName(), res->GetLine(), RESOURCE_MAX_COUNT);
break; break;
} }
@ -34,12 +32,12 @@ int CResourceFile::CreateResourceList()
// https://github.com/dreamstalker/rehlds/blob/beaeb6513893760b231b01a981cecd48f50baa81/rehlds/engine/sv_user.cpp#L374 // https://github.com/dreamstalker/rehlds/blob/beaeb6513893760b231b01a981cecd48f50baa81/rehlds/engine/sv_user.cpp#L374
if (nCustomConsistency + m_ConsistencyNum >= MAX_RANGE_CONSISTENCY) if (nCustomConsistency + m_ConsistencyNum >= MAX_RANGE_CONSISTENCY)
{ {
UTIL_Printf(__FUNCTION__ ": can't add consistency \"%s\" on line %d; index out of bounds '%d'\n", pRes->GetFileName(), pRes->GetLine(), MAX_RANGE_CONSISTENCY); UTIL_Printf(__FUNCTION__ ": can't add consistency \"%s\" on line %d; index out of bounds '%d'\n", res->GetFileName(), res->GetLine(), MAX_RANGE_CONSISTENCY);
break; break;
} }
Log(LOG_DETAILED, __FUNCTION__ " -> file: (%s), cmdexec: (%s), hash: (%x), typeFind: (%s)", pRes->GetFileName(), pRes->GetCmdExec(), pRes->GetFileHash(), szTypeNames[ pRes->GetFileFlag() ]); Log(LOG_DETAILED, __FUNCTION__ " -> file: (%s), cmdexec: (%s), hash: (%x), typeFind: (%s)", res->GetFileName(), res->GetCmdExec(), res->GetFileHash(), szTypeNames[ res->GetFileFlag() ]);
SV_AddResource(t_decal, pRes->GetFileName(), 0, RES_CHECKFILE, startIndex++); SV_AddResource(t_decal, res->GetFileName(), 0, RES_CHECKFILE, startIndex++);
++nCustomConsistency; ++nCustomConsistency;
} }
} }
@ -68,10 +66,10 @@ int CResourceFile::CreateResourceList()
return a.nIndex < b.nIndex; return a.nIndex < b.nIndex;
}); });
for (auto iter = sortList.cbegin(), end = sortList.cend(); iter != end; ++iter) for (auto& res : sortList)
{ {
// Add new resource in the own order // Add new resource in the own order
SV_AddResource(iter->type, iter->szFileName, iter->nDownloadSize, iter->ucFlags, iter->nIndex); SV_AddResource(res.type, res.szFileName, res.nDownloadSize, res.ucFlags, res.nIndex);
} }
sortList.clear(); sortList.clear();
@ -140,7 +138,7 @@ void CResourceFile::Log(flag_type_log type, const char *fmt, ...)
char *file; char *file;
char dateLog[64]; char dateLog[64];
bool bFirst = false; bool bFirst = false;
if ((int)pcv_rch_log->value < type) if ((int)pcv_rch_log->value < type)
return; return;
@ -357,7 +355,7 @@ void CResourceFile::LoadResources()
} }
else else
{ {
for (int i = 0; i < sizeof(pbuf) / 2; i++) for (int i = 0; i < sizeof(pbuf) / 2; ++i)
hash[i] = hexbyte(&pbuf[i * 2]); hash[i] = hexbyte(&pbuf[i * 2]);
flag = FLAG_TYPE_EXISTS; flag = FLAG_TYPE_EXISTS;
@ -521,11 +519,9 @@ void CResourceFile::AddElement(char *filename, char *cmdExec, flag_type_resource
auto nRes = new CResourceBuffer(filename, cmdExec, flag, hash, line, bBreak); auto nRes = new CResourceBuffer(filename, cmdExec, flag, hash, line, bBreak);
// to mark files which are not required to add to the resource again // to mark files which are not required to add to the resource again
for (auto iter = m_resourceList.cbegin(), end = m_resourceList.cend(); iter != end; ++iter) for (auto& res : m_resourceList)
{ {
CResourceBuffer *pRes = (*iter); if (_stricmp(res->GetFileName(), filename) == 0)
if (_stricmp(pRes->GetFileName(), filename) == 0)
{ {
// resource name already registered // resource name already registered
nRes->SetDuplicate(); nRes->SetDuplicate();
@ -563,14 +559,12 @@ bool CResourceFile::FileConsistencyResponse(IGameClient *pSenderClient, resource
return true; return true;
} }
for (auto iter = m_resourceList.cbegin(), end = m_resourceList.cend(); iter != end; ++iter) for (auto& res : m_resourceList)
{ {
CResourceBuffer *pRes = (*iter); if (strcmp(resource->szFileName, res->GetFileName()) != 0)
if (strcmp(resource->szFileName, pRes->GetFileName()) != 0)
continue; continue;
typeFind = pRes->GetFileFlag(); typeFind = res->GetFileFlag();
if (m_PrevHash == hash && typeFind != FLAG_TYPE_MISSING) if (m_PrevHash == hash && typeFind != FLAG_TYPE_MISSING)
typeFind = FLAG_TYPE_NONE; typeFind = FLAG_TYPE_NONE;
@ -578,23 +572,21 @@ bool CResourceFile::FileConsistencyResponse(IGameClient *pSenderClient, resource
switch (typeFind) switch (typeFind)
{ {
case FLAG_TYPE_IGNORE: case FLAG_TYPE_IGNORE:
tempResourceList.push_back(pRes); tempResourceList.push_back(res);
break; break;
case FLAG_TYPE_EXISTS: case FLAG_TYPE_EXISTS:
if (pRes->GetFileHash() != hash) if (res->GetFileHash() != hash)
{ {
typeFind = FLAG_TYPE_NONE; typeFind = FLAG_TYPE_NONE;
} }
break; break;
case FLAG_TYPE_HASH_ANY: case FLAG_TYPE_HASH_ANY:
for (auto it = tempResourceList.cbegin(); it != tempResourceList.cend(); ++it) for (auto& temp : tempResourceList)
{ {
CResourceBuffer *pTemp = (*it); if (_stricmp(temp->GetFileName(), res->GetFileName()) != 0)
if (_stricmp(pTemp->GetFileName(), pRes->GetFileName()) != 0)
continue; continue;
if (pTemp->GetFileHash() == hash) if (temp->GetFileHash() == hash)
{ {
typeFind = FLAG_TYPE_NONE; typeFind = FLAG_TYPE_NONE;
break; break;
@ -615,11 +607,11 @@ bool CResourceFile::FileConsistencyResponse(IGameClient *pSenderClient, resource
if (typeFind != FLAG_TYPE_NONE) if (typeFind != FLAG_TYPE_NONE)
{ {
// push exec cmd // push exec cmd
Exec.AddElement(pSenderClient, pRes, hash); Exec.AddElement(pSenderClient, res, hash);
flag_type_log type = (typeFind == FLAG_TYPE_IGNORE) ? LOG_DETAILED : LOG_NORMAL; flag_type_log type = (typeFind == FLAG_TYPE_IGNORE) ? LOG_DETAILED : LOG_NORMAL;
Log(type, " -> file: (%s), exphash: (%x), got: (%x), typeFind: (%s), prevhash: (%x), (#%u)(%s), prevfile: (%s), findathash: (%s), md5hex: (%x)", Log(type, " -> file: (%s), exphash: (%x), got: (%x), typeFind: (%s), prevhash: (%x), (#%u)(%s), prevfile: (%s), findathash: (%s), md5hex: (%x)",
pRes->GetFileName(), pRes->GetFileHash(), hash, szTypeNames[ typeFind ], m_PrevHash, g_engfuncs.pfnGetPlayerUserId(pSenderClient->GetEdict()), res->GetFileName(), res->GetFileHash(), hash, szTypeNames[ typeFind ], m_PrevHash, g_engfuncs.pfnGetPlayerUserId(pSenderClient->GetEdict()),
pSenderClient->GetName(), FindFilenameOfHash(m_PrevHash), FindFilenameOfHash(hash), _byteswap_ulong(hash)); pSenderClient->GetName(), FindFilenameOfHash(m_PrevHash), FindFilenameOfHash(hash), _byteswap_ulong(hash));
} }
@ -633,10 +625,10 @@ bool CResourceFile::FileConsistencyResponse(IGameClient *pSenderClient, resource
const char *DuplicateString(const char *str) const char *DuplicateString(const char *str)
{ {
for (auto iter = StringsCache.cbegin(), end = StringsCache.cend(); iter != end; ++iter) for (auto& string : StringsCache)
{ {
if (!strcmp(*iter, str)) if (!strcmp(string, str))
return *iter; return string;
} }
const char *s = strcpy(new char[strlen(str) + 1], str); const char *s = strcpy(new char[strlen(str) + 1], str);
@ -646,8 +638,8 @@ const char *DuplicateString(const char *str)
void ClearStringsCache() void ClearStringsCache()
{ {
for (auto iter = StringsCache.begin(), end = StringsCache.end(); iter != end; ++iter) for (auto& string : StringsCache)
delete [] *iter; delete [] string;
StringsCache.clear(); StringsCache.clear();
} }
@ -675,10 +667,10 @@ CResourceFile::CResponseBuffer::CResponseBuffer(IGameClient *pSenderClient, char
const char *CResourceFile::FindFilenameOfHash(uint32 hash) const char *CResourceFile::FindFilenameOfHash(uint32 hash)
{ {
for (auto iter = m_responseList.begin(), end = m_responseList.end(); iter != end; ++iter) for (auto& res : m_responseList)
{ {
if ((*iter)->GetClientHash() == hash) if (res->GetClientHash() == hash)
return (*iter)->GetFileName(); return res->GetFileName();
} }
return "null"; return "null";

View File

@ -4,6 +4,9 @@
#define MAX_CMD_LENGTH 128 #define MAX_CMD_LENGTH 128
#define MAX_RANGE_CONSISTENCY 1024 #define MAX_RANGE_CONSISTENCY 1024
#define RESOURCE_INDEX_BITS 12
#define RESOURCE_MAX_COUNT (1 << RESOURCE_INDEX_BITS)
enum flag_type_log enum flag_type_log
{ {
LOG_NONE = 0, LOG_NONE = 0,