diff options
Diffstat (limited to 'dep/CascLib/src')
-rw-r--r-- | dep/CascLib/src/CascBuildCfg.cpp | 91 | ||||
-rw-r--r-- | dep/CascLib/src/CascCommon.h | 1 |
2 files changed, 57 insertions, 35 deletions
diff --git a/dep/CascLib/src/CascBuildCfg.cpp b/dep/CascLib/src/CascBuildCfg.cpp index 8bfc9523af7..f39f09d886a 100644 --- a/dep/CascLib/src/CascBuildCfg.cpp +++ b/dep/CascLib/src/CascBuildCfg.cpp @@ -539,6 +539,13 @@ static int GetGameType(TCascStorage * hs, LPBYTE pbVarBegin, LPBYTE pbLineEnd) return ERROR_SUCCESS; } + // Diablo III BETA 2.2.0 + if((pbLineEnd - pbVarBegin) == 7 && !_strnicmp((const char *)pbVarBegin, "Diablo3", 7)) + { + hs->dwGameInfo = CASC_GAME_DIABLO3; + return ERROR_SUCCESS; + } + // An unknown game assert(false); return ERROR_BAD_FORMAT; @@ -546,6 +553,7 @@ static int GetGameType(TCascStorage * hs, LPBYTE pbVarBegin, LPBYTE pbLineEnd) // "B29049" // "WOW-18125patch6.0.1" +// "30013_Win32_2_2_0_Ptr_ptr" static int GetBuildNumber(TCascStorage * hs, LPBYTE pbVarBegin, LPBYTE pbLineEnd) { DWORD dwBuildNumber = 0; @@ -625,10 +633,12 @@ static int FetchAndVerifyConfigFile(TCascStorage * hs, PQUERY_KEY pFileKey, PQUE static int ParseInfoFile(TCascStorage * hs, PQUERY_KEY pFileBlob) { + QUERY_KEY Active = {NULL, 0}; QUERY_KEY TagString = {NULL, 0}; QUERY_KEY CdnHost = {NULL, 0}; QUERY_KEY CdnPath = {NULL, 0}; const char * szLineBegin1 = NULL; + const char * szLinePtr1 = NULL; const char * szLineBegin2 = NULL; const char * szLineEnd1 = NULL; const char * szLineEnd2 = NULL; @@ -650,46 +660,57 @@ static int ParseInfoFile(TCascStorage * hs, PQUERY_KEY pFileBlob) szFilePtr++; } - // Skip the newline character(s) - while(szFilePtr < szFileEnd && (szFilePtr[0] == 0x0D || szFilePtr[0] == 0x0A)) - szFilePtr++; - - // Find the second line - szLineBegin2 = szFilePtr; - while(szFilePtr < szFileEnd) + while (szFilePtr < szFileEnd) { - // Check for the end of the line - if(szFilePtr[0] == 0x0D || szFilePtr[0] == 0x0A) + szLinePtr1 = szLineBegin1; + + // Skip the newline character(s) + while (szFilePtr < szFileEnd && (szFilePtr[0] == 0x0D || szFilePtr[0] == 0x0A)) + szFilePtr++; + + // Find the next line + szLineBegin2 = szFilePtr; + while (szFilePtr < szFileEnd) { - szLineEnd2 = szFilePtr; - break; - } + // Check for the end of the line + if (szFilePtr[0] == 0x0D || szFilePtr[0] == 0x0A) + { + szLineEnd2 = szFilePtr; + break; + } - szFilePtr++; - } + szFilePtr++; + } - // Find the build key, CDN config key and the URL path - while(szLineBegin1 < szLineEnd1) - { - // Check for variables we need - if(IsInfoVariable(szLineBegin1, szLineEnd1, "Build Key", "HEX")) - LoadInfoVariable(&hs->CdnBuildKey, szLineBegin2, szLineEnd2, true); - if(IsInfoVariable(szLineBegin1, szLineEnd1, "CDN Key", "HEX")) - LoadInfoVariable(&hs->CdnConfigKey, szLineBegin2, szLineEnd2, true); - if(IsInfoVariable(szLineBegin1, szLineEnd1, "CDN Hosts", "STRING")) - LoadInfoVariable(&CdnHost, szLineBegin2, szLineEnd2, false); - if(IsInfoVariable(szLineBegin1, szLineEnd1, "CDN Path", "STRING")) - LoadInfoVariable(&CdnPath, szLineBegin2, szLineEnd2, false); - if(IsInfoVariable(szLineBegin1, szLineEnd1, "Tags", "STRING")) - LoadInfoVariable(&TagString, szLineBegin2, szLineEnd2, false); - - // Move both line pointers - szLineBegin1 = SkipInfoVariable(szLineBegin1, szLineEnd1); - if(szLineBegin1 == NULL) - break; + // Find the build key, CDN config key and the URL path + while (szLinePtr1 < szLineEnd1) + { + // Check for variables we need + if (IsInfoVariable(szLinePtr1, szLineEnd1, "Active", "DEC")) + LoadInfoVariable(&Active, szLineBegin2, szLineEnd2, false); + if (IsInfoVariable(szLinePtr1, szLineEnd1, "Build Key", "HEX")) + LoadInfoVariable(&hs->CdnBuildKey, szLineBegin2, szLineEnd2, true); + if (IsInfoVariable(szLinePtr1, szLineEnd1, "CDN Key", "HEX")) + LoadInfoVariable(&hs->CdnConfigKey, szLineBegin2, szLineEnd2, true); + if (IsInfoVariable(szLinePtr1, szLineEnd1, "CDN Hosts", "STRING")) + LoadInfoVariable(&CdnHost, szLineBegin2, szLineEnd2, false); + if (IsInfoVariable(szLinePtr1, szLineEnd1, "CDN Path", "STRING")) + LoadInfoVariable(&CdnPath, szLineBegin2, szLineEnd2, false); + if (IsInfoVariable(szLinePtr1, szLineEnd1, "Tags", "STRING")) + LoadInfoVariable(&TagString, szLineBegin2, szLineEnd2, false); + + // Move both line pointers + szLinePtr1 = SkipInfoVariable(szLinePtr1, szLineEnd1); + if (szLineBegin1 == NULL) + break; + + szLineBegin2 = SkipInfoVariable(szLineBegin2, szLineEnd2); + if (szLineBegin2 == NULL) + break; + } - szLineBegin2 = SkipInfoVariable(szLineBegin2, szLineEnd2); - if(szLineBegin2 == NULL) + // Stop parsing if found active config + if (Active.pbData != NULL && *Active.pbData == '1') break; } diff --git a/dep/CascLib/src/CascCommon.h b/dep/CascLib/src/CascCommon.h index a59cc878ec7..7a2b4071dc6 100644 --- a/dep/CascLib/src/CascCommon.h +++ b/dep/CascLib/src/CascCommon.h @@ -38,6 +38,7 @@ #define CASC_GAME_HOTS 0x00010000 // Heroes of the Storm #define CASC_GAME_WOW6 0x00020000 // World of Warcraft - Warlords of Draenor +#define CASC_GAME_DIABLO3 0x00030000 // Diablo 3 Since PTR 2.2.0 #define CASC_GAME_MASK 0xFFFF0000 // Mask for getting game ID #define CASC_INDEX_COUNT 0x10 |