diff options
Diffstat (limited to 'dep/CascLib/src/CascBuildCfg.cpp')
-rw-r--r-- | dep/CascLib/src/CascBuildCfg.cpp | 91 |
1 files changed, 56 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; } |