file encoding to utf-8
This commit is contained in:
@@ -257,7 +257,7 @@ bool CEterPack::Create(CEterFileDict& rkFileDict, const char * dbname, const cha
|
||||
|
||||
m_bReadOnly = bReadOnly;
|
||||
|
||||
// bReadOnly 모드가 아니고 데이터 베이스가 열린다면 생성 실패
|
||||
// bReadOnly 모드가 아니고 데이터 베이스가 열린다면 생성 실패
|
||||
if (!CreateIndexFile())
|
||||
return false;
|
||||
|
||||
@@ -286,7 +286,7 @@ bool CEterPack::DecryptIV(DWORD dwPanamaKey)
|
||||
if (m_stIV_Panama.length() != 32)
|
||||
return false;
|
||||
|
||||
if (m_bDecrypedIV) // 이미 암호화가 풀렸으면 다시 처리 안함
|
||||
if (m_bDecrypedIV) // 이미 암호화가 풀렸으면 다시 처리 안함
|
||||
return true;
|
||||
|
||||
DWORD* ivs = (DWORD*)&m_stIV_Panama[0];
|
||||
@@ -477,7 +477,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite)
|
||||
|
||||
m_DataPositionMap.insert(TDataPositionMap::value_type(index->filename_crc, index));
|
||||
|
||||
if (bOverwrite) // 서버 연동 패킹 파일은 나중에 들어오지만 최상위로 등록해야한다
|
||||
if (bOverwrite) // 서버 연동 패킹 파일은 나중에 들어오지만 최상위로 등록해야한다
|
||||
rkFileDict.UpdateItem(this, index);
|
||||
else
|
||||
rkFileDict.InsertItem(this, index);
|
||||
@@ -495,7 +495,7 @@ bool CEterPack::__BuildIndex(CEterFileDict& rkFileDict, bool bOverwrite)
|
||||
//
|
||||
//void CEterPack::ClearDataMemoryMap()
|
||||
//{
|
||||
// // m_file이 data file이다...
|
||||
// // m_file이 data file이다...
|
||||
// m_file.Destroy();
|
||||
// m_tLastAccessTime = 0;
|
||||
// m_bIsDataLoaded = false;
|
||||
@@ -519,8 +519,8 @@ bool CEterPack::Get(CMappedFile& out_file, const char * filename, LPCVOID * data
|
||||
// m_bIsDataLoaded = true;
|
||||
//}
|
||||
|
||||
// 기존에는 CEterPack에서 epk를 memory map에 올려놓고, 요청이 오면 그 부분을 링크해서 넘겨 줬었는데,
|
||||
// 이제는 요청이 오면, 필요한 부분만 memory map에 올리고, 요청이 끝나면 해제하게 함.
|
||||
// 기존에는 CEterPack에서 epk를 memory map에 올려놓고, 요청이 오면 그 부분을 링크해서 넘겨 줬었는데,
|
||||
// 이제는 요청이 오면, 필요한 부분만 memory map에 올리고, 요청이 끝나면 해제하게 함.
|
||||
out_file.Create(m_stDataFileName.c_str(), data, index->data_position, index->data_size);
|
||||
|
||||
bool bIsSecurityCheckRequired = ( index->compressed_type == COMPRESSED_TYPE_SECURITY ||
|
||||
@@ -1030,15 +1030,15 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType
|
||||
data_crc = GetCRC32((const char *) data, len);
|
||||
#endif
|
||||
|
||||
// 기존 데이터가 있으면..
|
||||
// 기존 데이터가 있으면..
|
||||
if (pIndex)
|
||||
{
|
||||
// 기존 data 크기가 넣을 데이터 크기를 수용할 수 있다면
|
||||
// 기존 data 크기가 넣을 데이터 크기를 수용할 수 있다면
|
||||
if (pIndex->real_data_size >= len)
|
||||
{
|
||||
++m_map_indexRefCount[pIndex->id];
|
||||
|
||||
// 길이가 틀리거나, checksum이 틀릴 때만 저장 한다.
|
||||
// 길이가 틀리거나, checksum이 틀릴 때만 저장 한다.
|
||||
if ( (pIndex->data_size != len) ||
|
||||
#ifdef CHECKSUM_CHECK_MD5
|
||||
(memcmp( pIndex->MD5Digest, context.digest, 16 ) != 0) )
|
||||
@@ -1070,13 +1070,13 @@ bool CEterPack::Put(const char * filename, LPCVOID data, long len, BYTE packType
|
||||
return true;
|
||||
}
|
||||
|
||||
// 기존 데이터 크기가 새로 들어갈 것 보다 적다면, 새로 인덱스를 할당해
|
||||
// 넣어야 한다. 원래 있던 인덱스는 비워 둔다.
|
||||
// 기존 데이터 크기가 새로 들어갈 것 보다 적다면, 새로 인덱스를 할당해
|
||||
// 넣어야 한다. 원래 있던 인덱스는 비워 둔다.
|
||||
PushFreeIndex(pIndex);
|
||||
WriteIndex(fileIndex, pIndex);
|
||||
}
|
||||
|
||||
// 새 데이터
|
||||
// 새 데이터
|
||||
pIndex = NewIndex(fileIndex, filename, len);
|
||||
pIndex->data_size = len;
|
||||
|
||||
@@ -1125,7 +1125,7 @@ bool CEterPack::CreateIndexFile()
|
||||
return false;
|
||||
|
||||
//
|
||||
// 파일이 없으므로 새로 만든다.
|
||||
// 파일이 없으므로 새로 만든다.
|
||||
//
|
||||
fp = fopen(m_indexFileName, "wb");
|
||||
|
||||
@@ -1155,16 +1155,16 @@ void CEterPack::WriteIndex(CFileBase & file, TEterPackIndex * index)
|
||||
}
|
||||
|
||||
/*
|
||||
* Free Block 이란 데이터에서 지워진 부분을 말한다.
|
||||
* Free Block 들은 각각 FREE_INDEX_BLOCK_SIZE (32768) 단위로 나누어져
|
||||
* 리스트로 관리된다.
|
||||
* Free Block 이란 데이터에서 지워진 부분을 말한다.
|
||||
* Free Block 들은 각각 FREE_INDEX_BLOCK_SIZE (32768) 단위로 나누어져
|
||||
* 리스트로 관리된다.
|
||||
*
|
||||
* 예를 들어 128k 의 데이터는
|
||||
* 128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 이므로
|
||||
* 최종 적으로는 m_FreeIndexList[4] 에 들어간다.
|
||||
* 예를 들어 128k 의 데이터는
|
||||
* 128 * 1024 / FREE_INDEX_BLOCK_SIZE = 4 이므로
|
||||
* 최종 적으로는 m_FreeIndexList[4] 에 들어간다.
|
||||
*
|
||||
* FREE_INDEX_BLOCK_SIZE 의 최대 값은 FREE_INDEX_MAX_SIZE(512) 이다.
|
||||
* 따라서 16MB 이상의 데이터는 무조건 배열의 512 위치에 들어간다.
|
||||
* FREE_INDEX_BLOCK_SIZE 의 최대 값은 FREE_INDEX_MAX_SIZE(512) 이다.
|
||||
* 따라서 16MB 이상의 데이터는 무조건 배열의 512 위치에 들어간다.
|
||||
*/
|
||||
int CEterPack::GetFreeBlockIndex(long size)
|
||||
{
|
||||
@@ -1201,7 +1201,7 @@ TEterPackIndex* CEterPack::NewIndex(CFileBase& file, const char* filename, long
|
||||
{
|
||||
TEterPackIndex* index = NULL;
|
||||
int block_size = size + (DATA_BLOCK_SIZE - (size % DATA_BLOCK_SIZE));
|
||||
// if ((index = FindIndex(filename))) // 이미 인덱스가 존재하는지 확인
|
||||
// if ((index = FindIndex(filename))) // 이미 인덱스가 존재하는지 확인
|
||||
// return index;
|
||||
|
||||
int blockidx = GetFreeBlockIndex(block_size);
|
||||
@@ -1371,7 +1371,7 @@ const char * CEterPack::GetDBName()
|
||||
|
||||
void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, unsigned int keySize)
|
||||
{
|
||||
// 키 암호화
|
||||
// 키 암호화
|
||||
if (keySize != 32)
|
||||
return;
|
||||
|
||||
@@ -1413,7 +1413,7 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un
|
||||
) // HashFilter
|
||||
); // StringSource
|
||||
|
||||
// 만들어진 키의 첫번째 4바이트로 다음 16바이트 키 생성 알고리즘 선택
|
||||
// 만들어진 키의 첫번째 4바이트로 다음 16바이트 키 생성 알고리즘 선택
|
||||
unsigned int idx2 = *(unsigned int*) key;
|
||||
|
||||
switch (idx2 & 3)
|
||||
@@ -1442,14 +1442,14 @@ void CEterPack::__CreateFileNameKey_Panama(const char * filename, BYTE * key, un
|
||||
//) // HexEncoder
|
||||
) // HashFilter
|
||||
); // StringSource
|
||||
// 키 생성 완료
|
||||
// 키 생성 완료
|
||||
}
|
||||
|
||||
bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T dataSize, CLZObject& zObj)
|
||||
{
|
||||
if (32 != m_stIV_Panama.length())
|
||||
{
|
||||
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
||||
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
||||
#ifdef _DEBUG
|
||||
TraceError("IV not set (filename: %s)", filename);
|
||||
#endif
|
||||
@@ -1471,7 +1471,7 @@ bool CEterPack::__Encrypt_Panama(const char* filename, const BYTE* data, SIZE_T
|
||||
__CreateFileNameKey_Panama(filename, key, sizeof(key));
|
||||
Encryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
|
||||
|
||||
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
||||
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
||||
DWORD cryptSize = dataSize - (dataSize % Encryptor.MandatoryBlockSize());
|
||||
cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
|
||||
|
||||
@@ -1506,7 +1506,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T
|
||||
{
|
||||
if (32 != m_stIV_Panama.length())
|
||||
{
|
||||
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
||||
// 해커가 이 메세지를 보면 힌트를 얻을까봐 디버그에서만 출력
|
||||
#ifdef _DEBUG
|
||||
TraceError("IV not set (filename: %s)", filename);
|
||||
#endif
|
||||
@@ -1520,7 +1520,7 @@ bool CEterPack::__Decrypt_Panama(const char* filename, const BYTE* data, SIZE_T
|
||||
__CreateFileNameKey_Panama(filename, key, sizeof(key));
|
||||
Decryptor.SetKeyWithIV(key, sizeof(key), (const BYTE*) m_stIV_Panama.c_str(), 32);
|
||||
|
||||
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
||||
// MandatoryBlockSize에 나누어 떨어지게 만들고 최대 2048 바이트만
|
||||
DWORD cryptSize = dataSize - (dataSize % Decryptor.MandatoryBlockSize());
|
||||
cryptSize = cryptSize > 2048 ? 2048 : cryptSize;
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ class CEterPack
|
||||
bool EncryptIndexFile();
|
||||
bool DecryptIndexFile();
|
||||
|
||||
DWORD DeleteUnreferencedData(); // 몇개가 삭제 되었는지 리턴 한다.
|
||||
DWORD DeleteUnreferencedData(); // 몇개가 삭제 되었는지 리턴 한다.
|
||||
|
||||
bool GetNames(std::vector<std::string>* retNames);
|
||||
|
||||
@@ -182,7 +182,7 @@ class CEterPack
|
||||
|
||||
std::unordered_map<DWORD, DWORD> m_map_indexRefCount;
|
||||
TDataPositionMap m_DataPositionMap;
|
||||
TFreeIndexList m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1]; // MAX 도 억세스 하므로 + 1 크기만큼 만든다.
|
||||
TFreeIndexList m_FreeIndexList[FREE_INDEX_MAX_SIZE + 1]; // MAX 도 억세스 하므로 + 1 크기만큼 만든다.
|
||||
|
||||
std::string m_stDataFileName;
|
||||
std::string m_stPathName;
|
||||
@@ -198,8 +198,8 @@ class CEterPack
|
||||
|
||||
//private:
|
||||
// bool m_bIsDataLoaded;
|
||||
// // 그냥 time_t를 쓰면, 32bit time_t를 사용하는 소스에서는,
|
||||
// // CEterPack의 size를 실제 size - 4로 인식하기 때문에 문제가 발생할 수 있다.
|
||||
// // 그냥 time_t를 쓰면, 32bit time_t를 사용하는 소스에서는,
|
||||
// // CEterPack의 size를 실제 size - 4로 인식하기 때문에 문제가 발생할 수 있다.
|
||||
// __time64_t m_tLastAccessTime;
|
||||
//public:
|
||||
// __time64_t GetLastAccessTime() { return m_tLastAccessTime; }
|
||||
|
||||
@@ -53,7 +53,7 @@ void CEterPackManager::SetRelativePathMode()
|
||||
}
|
||||
|
||||
|
||||
// StringPath std::string 버전
|
||||
// StringPath std::string 버전
|
||||
int CEterPackManager::ConvertFileName(const char * c_szFileName, std::string & rstrFileName)
|
||||
{
|
||||
rstrFileName = c_szFileName;
|
||||
@@ -231,7 +231,7 @@ bool CEterPackManager::GetFromPack(CMappedFile & rMappedFile, const char * c_szF
|
||||
return false;
|
||||
}
|
||||
|
||||
const time_t g_tCachingInterval = 10; // 10초
|
||||
const time_t g_tCachingInterval = 10; // 10초
|
||||
void CEterPackManager::ArrangeMemoryMappedPack()
|
||||
{
|
||||
//time_t curTime = time(NULL);
|
||||
@@ -255,8 +255,8 @@ bool CEterPackManager::GetFromFile(CMappedFile & rMappedFile, const char * c_szF
|
||||
#ifndef _DEBUG
|
||||
//const char *pcExt = strchr(c_szFileName, '.');
|
||||
//if (pcExt &&
|
||||
// _strnicmp(pcExt, ".py", 3) == 0 && // python 스크립트 중
|
||||
// stricmp(c_szFileName, "logininfo.py") != 0 && // 로그인 정보 파일이 아니고
|
||||
// _strnicmp(pcExt, ".py", 3) == 0 && // python 스크립트 중
|
||||
// stricmp(c_szFileName, "logininfo.py") != 0 && // 로그인 정보 파일이 아니고
|
||||
// strnicmp(c_szFileName, "locale", 6) != 0
|
||||
// )
|
||||
//{
|
||||
@@ -294,7 +294,7 @@ bool CEterPackManager::isExistInPack(const char * c_szFileName)
|
||||
return pkFileItem->pkPack->IsExist(strFileName.c_str());
|
||||
}
|
||||
|
||||
// NOTE : 매치 되는 팩이 없다면 false - [levites]
|
||||
// NOTE : 매치 되는 팩이 없다면 false - [levites]
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -452,7 +452,7 @@ void CEterPackManager::RetrieveHybridCryptPackKeys(const BYTE *pStream)
|
||||
{
|
||||
int iRecvedCryptKeySize = 0;
|
||||
memcpy( &iRecvedCryptKeySize, pStream + iMemOffset, sizeof(iRecvedCryptKeySize) );
|
||||
iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // 서버에서 받은 key stream에는 filename hash가 포함되어 있으므로, hash 사이즈 만큼 배줌.
|
||||
iRecvedCryptKeySize -= sizeof(dwPackageNameHash); // 서버에서 받은 key stream에는 filename hash가 포함되어 있으므로, hash 사이즈 만큼 배줌.
|
||||
iMemOffset += sizeof(iRecvedCryptKeySize);
|
||||
|
||||
memcpy( &dwPackageNameHash, pStream + iMemOffset, sizeof(dwPackageNameHash) );
|
||||
|
||||
@@ -66,12 +66,12 @@ class CEterPackManager : public CSingleton<CEterPackManager>
|
||||
//THEMIDA
|
||||
void RetrieveHybridCryptPackSDB( const BYTE* pStream );
|
||||
|
||||
// 메모리에 매핑된 팩들 가운데, 정리해야할 것들 정리.
|
||||
// 메모리에 매핑된 팩들 가운데, 정리해야할 것들 정리.
|
||||
public:
|
||||
void ArrangeMemoryMappedPack();
|
||||
|
||||
protected:
|
||||
int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string 버전
|
||||
int ConvertFileName(const char * c_szFileName, std::string & rstrFileName); // StringPath std::string 버전
|
||||
bool CompareName(const char * c_szDirectoryName, DWORD iLength, const char * c_szFileName);
|
||||
|
||||
CEterPack* FindPack(const char* c_szPathName);
|
||||
|
||||
Reference in New Issue
Block a user