aboutsummaryrefslogtreecommitdiff
path: root/dep/CascLib/src/CascBuildCfg.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dep/CascLib/src/CascBuildCfg.cpp')
-rw-r--r--dep/CascLib/src/CascBuildCfg.cpp91
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;
}