SOL9 2.0 Class: UrlCacheSourceUrlFinder

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * UrlCacheSourceUrlFinder.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL9
// 2012/01/10

#pragma once

#include <sol/wininet/UrlCacheEntryFinder.h>


namespace SOL {

class UrlCacheSourceUrlFinder :public UrlCacheEntryFinder
{

public:
    UrlCacheSourceUrlFinder(GROUPID id=0)
        :UrlCacheEntryFinder(id)
    {
        //If groupId is 0, then it indicates search all non-grouped cache entries.
    }


public:
    virtual bool find(const String& type, Writer& writer)
    {
        return UrlCacheEntryFinder::find(type, writer);
    }


public:
    virtual bool find(DWORD entryType, const String& type, Writer& writer)
    {
        DWORD cacheEntrySize = 0;

        DWORD filters = NORMAL_CACHE_ENTRY|COOKIE_CACHE_ENTRY|URLHISTORY_CACHE_ENTRY |SPARSE_CACHE_ENTRY|STICKY_CACHE_ENTRY;
        
        GROUPID groupId = getGroupId();

        HANDLE hFind = FindFirstUrlCacheEntryEx(
                    NULL, 0, filters,
                    groupId, NULL, &cacheEntrySize,
                    NULL, NULL, NULL);

        if(cacheEntrySize == 0) {
            if(hFind) {
                FindCloseUrlCache(hFind);
            }
            return    false;
        }
        writer.writeln(L"<UrlCacheSourceUrlFinder EntryType=\"%s\">", (const TCHAR*)type);

        INTERNET_CACHE_ENTRY_INFO* entryInfo= (INTERNET_CACHE_ENTRY_INFO*) new BYTE[cacheEntrySize];
        //Specify NULL for the first parameter to the API FindFirstUrlCacheEntryEx to listup all entries.
        hFind = FindFirstUrlCacheEntryEx(
                    NULL, 0, filters,
                    groupId, entryInfo,    &cacheEntrySize,
                    NULL, NULL, NULL);

        UrlCacheEntry cacheEntry = entryInfo;
        if (hFind) {
            cacheEntry.writeSourceUrl(entryType, writer);
        }

        while (hFind) {

            cacheEntrySize = 0;
            
            BOOL rc = FindNextUrlCacheEntryEx(hFind, NULL, &cacheEntrySize, NULL, NULL, NULL);
            if (rc == FALSE) {
                DWORD err = GetLastError();
                if (err == ERROR_NO_MORE_ITEMS) {
                    break;
                }
                if (err == ERROR_INSUFFICIENT_BUFFER) {
                    entryInfo = (INTERNET_CACHE_ENTRY_INFO*) new BYTE[cacheEntrySize];
                    rc = FindNextUrlCacheEntryEx(hFind, entryInfo, &cacheEntrySize, NULL, NULL, NULL);
                    UrlCacheEntry cacheEntry = entryInfo;
                    if (rc) {
                        cacheEntry.writeSourceUrl(entryType, writer);
                    }
                }
            }
        }

        FindCloseUrlCache(hFind);
        writer.writeln(L"</UrlCacheSourceUrlFinder>");

        return    true;
    }


};

}

Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.