Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}