/*++ Copyright (c) 1997 Microsoft Corporation Module Name: conmgr.hxx Abstract: Manages list of containers (CConList) Author: Adriaan Canter (adriaanc) 04-02-97 --*/ #ifndef _CONMGR_HXX #define _CONMGR_HXX // Total number of containers is 3: CONTENT, COOKIE and HISTORY. #define CONTENT 0 #define COOKIE 1 #define HISTORY 2 #define NCONTAINERS 3 // Alias for old names #define _coContent (_coContainer[CONTENT]) #define _coCookies (_coContainer[COOKIE]) #define _coHistory (_coContainer[HISTORY]) class IE5_REGISTRYSET; /*----------------------------------------------------------------------------- Container manager class ---------------------------------------------------------------------------*/ class CConMgr { private: DWORD _dwStatus; BOOL _fProfilesCapable, _fUsingBackupContainers; BOOL _fNewCacheVersion; DWORD _dwModifiedCount; // count last time we polled HANDLE _hMutexExtensible;// used to Mutex access to extensible containers registry DWORD _dwLastUnmap; // time of last UnMap sweep // Array of containers. CConList ConList; // Cached (not ref-counted - not needed) special containers URL_CONTAINER *_coContainer[NCONTAINERS]; // Init function called by constructor. DWORD Init(); // Initializes containers. DWORD InitFixedContainers(); // Config info get and set functions. // Utilities. DWORD FindIndexFromPrefix(LPCSTR); BOOL PathPrefixMatch(LPCSTR, LPCSTR); DWORD ConfigureCache(); DWORD GetCacheConfigInfo(); DWORD SetLegacyCacheConfigInfo(); DWORD GetSysRootCacheConfigInfo(); void IncrementModifiedCount(); DWORD ReadModifiedCount(BOOL fUpdateMemory); BOOL WasModified(BOOL fUpdateMemory); DWORD GetExtensibleCacheConfigInfo(BOOL fAlways); DWORD FindExtensibleContainer(LPCSTR Name); VOID DiscoverRegistrySettings(IE5_REGISTRYSET* pie5rs); VOID DiscoverIE3Settings(IE5_REGISTRYSET* pie5rs); BOOL DiscoverIE4Settings(IE5_REGISTRYSET* pie5rs); BOOL DiscoverAnyIE5Settings(IE5_REGISTRYSET* pie5rs); public: CConMgr(); ~CConMgr(); static DWORD DeleteIE3Cache(); // Methods specific to CConMgr. DWORD LoadContent(); DWORD GetContainerInfo(LPSTR szUrl, LPINTERNET_CACHE_CONTAINER_INFOA pCI, LPDWORD pcbCI); DWORD GetStatus(); DWORD FreeFindHandle(HANDLE hFind); BOOL DeleteFileIfNotRegistered(URL_CONTAINER *coDelete); DWORD CreateContainer(LPCSTR Name, LPCSTR CachePrefix, LPCSTR CachePath, DWORD KBCacheLimit, DWORD dwOptions); DWORD DeleteContainer(LPCSTR Name, DWORD dwOptions); HANDLE FindFirstContainer(DWORD *pdwModified, LPINTERNET_CACHE_CONTAINER_INFOA lpContainerInfo, LPDWORD lpdwContainerInfoBufferSize, DWORD dwOptions); BOOL FindNextContainer(HANDLE hFind, LPINTERNET_CACHE_CONTAINER_INFOA lpContainerInfo, LPDWORD lpdwContainerInfoBufferSize); #ifdef CHECKLOCK_PARANOID void CheckNoLocks(DWORD dwThreadId); #endif // Methods corresponding to URL_CONTAINER. DWORD UnlockUrl(LPCSTR); DWORD DeleteUrl(LPCSTR); BOOL GetHeaderData(DWORD, LPDWORD); BOOL SetHeaderData(DWORD, DWORD); BOOL IncrementHeaderData(DWORD, LPDWORD); DWORD SetUrlGroup(LPCSTR, DWORD, GROUPID); DWORD CreateUniqueFile(LPCSTR, DWORD, LPCSTR, LPTSTR, HANDLE*, BOOL = FALSE); DWORD AddUrl(AddUrlArg*); DWORD RetrieveUrl(LPCSTR, LPCACHE_ENTRY_INFOA*, LPDWORD, DWORD, DWORD); DWORD GetUrlInfo(LPCSTR, LPCACHE_ENTRY_INFOA*, LPDWORD, DWORD, DWORD, DWORD); DWORD GetUrlInfo(LPCSTR, LPCACHE_ENTRY_INFOA, LPDWORD, DWORD, DWORD); DWORD SetUrlInfo(LPCSTR, LPCACHE_ENTRY_INFOA, DWORD); DWORD FindNextEntry(HANDLE*, LPCSTR, LPCACHE_ENTRY_INFOA* ppNextCacheEntryInfo, LPDWORD, DWORD, GROUPID, DWORD, DWORD); DWORD FindNextEntry(HANDLE*, LPCSTR, LPCACHE_ENTRY_INFOA pNextCacheEntryInfo, LPDWORD, DWORD, GROUPID, DWORD); DWORD CleanupUrls(LPCTSTR szCachePath, DWORD dwFactor, DWORD dwFilter); DWORD GetUrlInGroup(LPCSTR, GROUPID*, LPDWORD); VOID SetCacheLimit(LONGLONG, DWORD); VOID GetCacheInfo(LPCSTR, LPSTR, LONGLONG*); // Methods corresponding to cache configuration APIs BOOL SetContentPath(PTSTR pszNewPath); BOOL GetUrlCacheConfigInfo(LPCACHE_CONFIG_INFO, LPDWORD, DWORD); BOOL SetUrlCacheConfigInfo(LPCACHE_CONFIG_INFO, DWORD); // Methods corresponding to cache group APIs DWORD CreateGroup(DWORD, GROUPID*); DWORD CreateDefaultGroups(); DWORD DeleteGroup(GROUPID, DWORD); DWORD FindNextGroup(HANDLE*, DWORD, GROUPID*); DWORD GetGroupAttributes( GROUPID, DWORD, LPINTERNET_CACHE_GROUP_INFOA, LPDWORD); DWORD SetGroupAttributes(GROUPID, DWORD, LPINTERNET_CACHE_GROUP_INFOA ); // notification api DWORD RegisterCacheNotify(HWND, UINT, GROUPID, DWORD); DWORD SendCacheNotification(DWORD); DWORD AddLeakFile (LPCSTR pszFile) { return _coContent->AddLeakFile (pszFile); } // allows content import to create a directory with a known name BOOL CreateContentDirWithSecureName( LPSTR szDirName) { return _coContainer[CONTENT]->CreateDirWithSecureName( szDirName); } // Creates a redirect from TargetUrl to OriginUrl BOOL CreateContentRedirect( LPSTR szTargetUrl, LPSTR szOriginUrl) { return _coContainer[CONTENT]->CreateRedirect( szTargetUrl, szOriginUrl); } VOID SetCacheSize(DWORD dwEnum, LONGLONG dlSize) { INET_ASSERT(dwEnumSetCacheSize(dlSize); } VOID WalkLeakList(DWORD dwEnum) { INET_ASSERT(dwEnumWalkLeakList()) { _coContainer[dwEnum]->UnlockContainer(); } } }; #endif // _CONMGR_HXX