static int LoadCdnConfigFile(TCascStorage * hs, PQUERY_KEY pFileBlob) { LPBYTE pbLineBegin = pFileBlob->pbData; LPBYTE pbVarBegin; LPBYTE pbLineEnd = NULL; int nError; while(pbLineBegin != NULL) { // Get the next line if(!GetNextFileLine(pFileBlob, &pbLineBegin, &pbLineEnd)) break; // Archive group pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "archive-group"); if(pbVarBegin != NULL) { nError = LoadSingleBlob(&hs->ArchiveGroup, pbVarBegin, pbLineEnd); if(nError != ERROR_SUCCESS) return nError; continue; } // Archives pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "archives"); if(pbVarBegin != NULL) { hs->pArchiveArray = LoadMultipleBlobs(pbVarBegin, pbLineEnd, &hs->ArchiveCount); if(hs->pArchiveArray == NULL || hs->ArchiveCount == 0) return ERROR_BAD_FORMAT; continue; } // Patch archive group pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "patch-archive-group"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->PatchArchiveGroup, pbVarBegin, pbLineEnd); continue; } // Patch archives pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "patch-archives"); if(pbVarBegin != NULL) { hs->pPatchArchiveArray = LoadMultipleBlobs(pbVarBegin, pbLineEnd, &hs->PatchArchiveCount); continue; } } // Check if all required fields are present if(hs->ArchiveGroup.pbData == NULL || hs->ArchiveGroup.cbData == 0 || hs->pArchiveArray == NULL || hs->ArchiveCount == 0) return ERROR_BAD_FORMAT; return ERROR_SUCCESS; }
static int ParseAgentFile(TCascStorage * hs, PQUERY_KEY pFileBlob) { LPBYTE pbBlobBegin = pFileBlob->pbData; LPBYTE pbBlobEnd; int nError = ERROR_SUCCESS; // Extract the CDN build hash pbBlobEnd = FindNextSeparator(pFileBlob, pbBlobBegin); if(pbBlobEnd != NULL) { // Convert the string to a blob nError = LoadSingleBlob(&hs->CdnBuildKey, pbBlobBegin, pbBlobEnd); // Move to the next part if(pbBlobEnd[0] == _T('|')) pbBlobEnd++; pbBlobBegin = pbBlobEnd; } // Extract the CDN config hash pbBlobEnd = FindNextSeparator(pFileBlob, pbBlobBegin); if(pbBlobEnd != NULL) { // Convert the string to a blob nError = LoadSingleBlob(&hs->CdnConfigKey, pbBlobBegin, pbBlobEnd); // Move to the next part if(pbBlobEnd[0] == _T('|')) pbBlobEnd++; pbBlobBegin = pbBlobEnd; } // Skip the intermediate part pbBlobEnd = FindNextSeparator(pFileBlob, pbBlobBegin); if(pbBlobEnd != NULL) { // Move to the next part if(pbBlobEnd[0] == _T('|')) pbBlobEnd++; pbBlobBegin = pbBlobEnd; } // Extract the URL config hash pbBlobEnd = FindNextSeparator(pFileBlob, pbBlobBegin); if(pbBlobEnd != NULL) { // Convert the string to a blob hs->szUrlPath = NewStrFromAnsi(pbBlobBegin, pbBlobEnd); } // Verify all variables if(hs->CdnBuildKey.pbData == NULL || hs->CdnConfigKey.pbData == NULL || hs->szUrlPath == NULL) nError = ERROR_BAD_FORMAT; return nError; }
static int LoadCdnConfigFile(TCascStorage * hs, void * pvListFile) { const char * szLineBegin; const char * szVarBegin; const char * szLineEnd; int nError = ERROR_SUCCESS; // Keep parsing the listfile while there is something in there for(;;) { // Get the next line if(!ListFile_GetNextLine(pvListFile, &szLineBegin, &szLineEnd)) break; // Archive group szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "archive-group"); if(szVarBegin != NULL) { nError = LoadSingleBlob(&hs->ArchivesGroup, szVarBegin, szLineEnd); continue; } // Archives szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "archives"); if(szVarBegin != NULL) { nError = LoadMultipleBlobs(&hs->ArchivesKey, szVarBegin, szLineEnd); continue; } // Patch archive group szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "patch-archive-group"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->PatchArchivesKey, szVarBegin, szLineEnd); continue; } // Patch archives szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "patch-archives"); if(szVarBegin != NULL) { nError = LoadMultipleBlobs(&hs->PatchArchivesKey, szVarBegin, szLineEnd); continue; } } // Check if all required fields are present if(hs->ArchivesKey.pbData == NULL || hs->ArchivesKey.cbData == 0) return ERROR_BAD_FORMAT; return nError; }
static int LoadCdnBuildFile(TCascStorage * hs, PQUERY_KEY pFileBlob) { LPBYTE pbLineBegin = pFileBlob->pbData; LPBYTE pbVarBegin; LPBYTE pbLineEnd = NULL; while(pbLineBegin != NULL) { // Get the next line if(!GetNextFileLine(pFileBlob, &pbLineBegin, &pbLineEnd)) break; // Game name pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "build-product"); if(pbVarBegin != NULL) { GetGameType(hs, pbVarBegin, pbLineEnd); continue; } // Game build number pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "build-name"); if(pbVarBegin != NULL) { GetBuildNumber(hs, pbVarBegin, pbLineEnd); continue; } // Root pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "root"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->RootKey, pbVarBegin, pbLineEnd); continue; } // Patch pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "patch"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->PatchKey, pbVarBegin, pbLineEnd); continue; } // Download pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "download"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->DownloadKey, pbVarBegin, pbLineEnd); continue; } // Install pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "install"); if(pbVarBegin != NULL) { LoadSingleBlob(&hs->InstallKey, pbVarBegin, pbLineEnd); continue; } // Encoding keys pbVarBegin = CheckLineVariable(pbLineBegin, pbLineEnd, "encoding"); if(pbVarBegin != NULL) { hs->pEncodingKeys = LoadMultipleBlobs(pbVarBegin, pbLineEnd, &hs->EncodingKeys); if(hs->pEncodingKeys == NULL || hs->EncodingKeys != 2) return ERROR_BAD_FORMAT; hs->EncodingKey = hs->pEncodingKeys[0]; hs->EncodingEKey = hs->pEncodingKeys[1]; continue; } } // Check the encoding keys if(hs->pEncodingKeys == NULL || hs->EncodingKeys == 0) return ERROR_BAD_FORMAT; return ERROR_SUCCESS; }
static int LoadCdnBuildFile(TCascStorage * hs, void * pvListFile) { const char * szLineBegin; const char * szVarBegin; const char * szLineEnd = NULL; int nError = ERROR_SUCCESS; for(;;) { // Get the next line if(!ListFile_GetNextLine(pvListFile, &szLineBegin, &szLineEnd)) break; // Game name szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "build-product"); if(szVarBegin != NULL) { GetGameType(hs, szVarBegin, szLineEnd); continue; } // Game build number szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "build-name"); if(szVarBegin != NULL) { GetBuildNumber(hs, szVarBegin, szLineEnd); continue; } // Root szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "root"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->RootKey, szVarBegin, szLineEnd); continue; } // Patch szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "patch"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->PatchKey, szVarBegin, szLineEnd); continue; } // Download szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "download"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->DownloadKey, szVarBegin, szLineEnd); continue; } // Install szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "install"); if(szVarBegin != NULL) { LoadSingleBlob(&hs->InstallKey, szVarBegin, szLineEnd); continue; } // Encoding keys szVarBegin = CheckLineVariable(szLineBegin, szLineEnd, "encoding"); if(szVarBegin != NULL) { nError = LoadMultipleBlobs(&hs->EncodingKey, szVarBegin, szLineEnd, 2); continue; } } // Check the encoding keys if(hs->EncodingKey.pbData == NULL || hs->EncodingKey.cbData != MD5_HASH_SIZE * 2) return ERROR_BAD_FORMAT; return nError; }