Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

276 lines
7.6 KiB

/* Flags for getting our status on disk cache comsumption */
/* DCACHE_WATERMARK_MAX: This is the max allowable space that dcache
* can eat up. This is the same as the size that the user sets in the
* Options.Advanced dialog.
* DCACHE_WATERMARK_HIGH: This is some percent of DCACHE_WATERMARK_HIGH which
* basically tells us that we're approaching the max. allowable dcache space
* and therefore it is time to start cleaning up. This so that by and large
* we don't reach the max. dcache size and then stop everything to start
* cleaning up, perhaps at a bad time (like in the middle of downloading a
* a doc.)
* DCACHE_WATERMARK_LOW: This is again a percent of DCACHE_WATERMARK_HIGH. Once
* we start cleaning up the dcache, we go upto this percent of the max
* allowable size.
* DCACHE_WATERMARK_ZERO: This will force the flushing of anything in the
* dcache directory, regardless of any other criteria (used when user
* wants to explicitly force a flush of the dcache.
*/
#define DCACHE_WATERMARK_MAX 1
#define DCACHE_WATERMARK_HIGH 2
#define DCACHE_WATERMARK_LOW 3
#define DCACHE_WATERMARK_ZERO 4
#define DCACHE_RECALC_SIZE 5
/* DCache Percentages corresponding to the definitions above */
#define DCACHE_PERCENT_MAX 100
#define DCACHE_PERCENT_HIGH 80
#define DCACHE_PERCENT_LOW 50
/* BUG#2103: We keep a min. dcache of 1% of disk or 4Meg, whichever is larger */
#define DCACHE_PERCENT_MIN 1
#define DCACHE_SIZE_MIN 0x400000
/* How frequently should we check against server for dcache contents
* being stale...
*/
#define CACHE_UPDATE_FREQ_ONCEPERSESS 0
#define CACHE_UPDATE_FREQ_NEVER 1
#define CACHE_UPDATE_FREQ_DEFAULT CACHE_UPDATE_FREQ_ONCEPERSESS
#define CACHE_UPDATE_FREQ_FIRST CACHE_UPDATE_FREQ_ONCEPERSESS
#define CACHE_UPDATE_FREQ_LAST CACHE_UPDATE_FREQ_NEVER
#define FValidCacheUpdFrequency(iCacheUpdFreq) \
( iCacheUpdFreq >= CACHE_UPDATE_FREQ_FIRST \
&& iCacheUpdFreq <= CACHE_UPDATE_FREQ_LAST)
#define chSpace ' '
#define chLParen '('
#define chRParen ')'
#define chUScore '_'
#define chHyphen '-'
#define chReplaceCh chHyphen
#define chPipe '|'
#define chComma ','
#define chBSlash '\\'
#define chSlash '/'
#define chColon ':'
#define chSColon ';'
#define chStar '*'
#define chQuestion '?'
#define chDoubleQuote '\"'
#define chLT '<'
#define chGT '>'
#define chPeriod '.'
/* Ref: IsValidChar in shell\shelldll\path.c */
#ifdef FEATURE_INTL
// ch can possibly be > 128
#define ChValidFilenameCh(ch) \
( ( (ch) == chBSlash \
|| (ch) == chSlash \
|| (ch) == chComma \
|| (ch) == chPipe \
|| (ch) == chColon \
|| (ch) == chSColon \
|| (ch) == chStar \
|| (ch) == chQuestion \
|| (ch) == chDoubleQuote \
|| (ch) == chLT \
|| (ch) == chGT \
|| ((UCHAR)(ch)) < (UCHAR)(chSpace)) \
? chReplaceCh \
: (ch))
#else
#define ChValidFilenameCh(ch) \
( ( (ch) == chBSlash \
|| (ch) == chSlash \
|| (ch) == chComma \
|| (ch) == chPipe \
|| (ch) == chColon \
|| (ch) == chSColon \
|| (ch) == chStar \
|| (ch) == chQuestion \
|| (ch) == chDoubleQuote \
|| (ch) == chLT \
|| (ch) == chGT \
|| (ch) < chSpace) \
? chReplaceCh \
: (ch))
#endif
struct Data_LoadFileCache
{
HTRequest * request;
int * pStatus; /* Where to store the status return */
FILE * fp;
HTStream * stream;
};
struct CDRomList
{
char *alias;
char *path;
struct CDRomList *next;
};
#define DCACHETIME_EXPIRE_NEVER 0xffffffff
typedef struct _CacheFileInformation
{
long lFilesize;
char *pszMime;
char *pszPath;
DCACHETIME dctLastModified;
DCACHETIME dctExpires;
DCACHETIME dctLastUsed;
BOOL fRamDoc;
BOOL fNoDocCache;
BOOL fCurDoc;
BOOL fCheckedForFreshness;
} CacheFileInformation;
struct CacheRuleList
{
char *pszOriginal;
char *pszReplacement;
struct CacheRuleList *next;
};
typedef struct _RAMITEM
{
BOOL fImage;
union
{
struct ImageInfo *pImgInfo;
struct _www *pw3doc;
};
struct Mwin *tw; //window in which w3doc belongs
BOOL fNoDocCache;
time_t tExpires;
DCACHETIME dctLastUsed;
DWORD dwSize;
struct _RAMITEM *next;
} RAMITEM, *PRAMITEM;
#define FLUSH_DCACHE_DONE 0
#define FLUSH_DCACHE_CONTINUE 1
BOOL FInsertW3Doc( void **ppRamItem,
struct _www *pw3doc,
struct Mwin *tw);
#define DCACHE_MEMORY_ERROR -1 /* Allocation failed */
#define DCACHE_INVALID_INDEX_FILE -2 /* Invalid index file specified */
#define DCACHE_MAXIMUM_LINE_LENGTH 4096 /* Maximum line length allowed */
#ifdef WIN32
static int ReadCacheIndexFiles(void);
static int BuildCDRomList(void);
#endif
BOOL InitializeDiskCache(void);
void TerminateDiskCache(void);
char *GetResolvedURL( PCSTR pcszURL,
HTFormat *pMime,
long *pFileLength,
char **ppPath,
DCACHETIME *pDcTimeLastModif,
BOOL fLoadFromDCacheOK);
BOOL FGopherFormat(HTFormat format);
int DoGopherDCache(struct Mwin *tw, struct Data_LoadFileCache *pData, HTFormat format);
BOOL FFtpFormat(HTFormat format);
int DoFtpDCache(struct Mwin *tw, struct Data_LoadFileCache *pData, HTFormat format);
#ifdef FEATURE_INTL
void SetFileDCache(WWW *pdoc, PCSTR pcszActualURL,
ENCODING content_encoding,
FILE **pfpDc,
PSTR *ppszDcFile,
HTFormat mime_type);
#else
void SetFileDCache( PCSTR pcszActualURL,
ENCODING content_encoding,
FILE **pfpDc,
PSTR *ppszDcFile,
HTFormat mime_type);
#endif
void AbortFileDCache(FILE **pfpDc, PSTR *ppszDcFile);
void UpdateFileDCache( PCSTR pcszActualURL,
FILE **pfpDc,
PSTR *ppszDcFile,
HTFormat format_inDc,
DCACHETIME dctExpires,
DCACHETIME dctLastModif,
BOOL fAbort,
BOOL fCurDoc,
struct Mwin *tw);
void SetDCacheTime(DCACHETIME *pdctime);
#define UpdateStreamDCache(htstrm, dctExpires, dctLastModif, fAbort, tw) \
if (gPrefs.bEnableDiskCache) \
UpdateFileDCache( htstrm->request->destination->szActualURL, \
&htstrm->fpDc, \
&htstrm->pszDcFile, \
htstrm->format_inDc, \
dctExpires, \
dctLastModif, \
fAbort, \
FALSE, \
tw)
BOOL FUpdateBuiltinDCache( HTFormat mime_type,
PCSTR pcszURL,
char **ppszOrgFile,
DCACHETIME dctExpires,
DCACHETIME dctLastModif,
BOOL fCurDoc,
struct Mwin *tw);
#define AssertDiskCacheEnabled() XX_Assert(gPrefs.bEnableDiskCache, (""))
void FlushDCache(HWND hDlg);
void FlushDCacheEntry(PCSTR pszURL);
void UpdateDCacheLocation(PCSTR pszNewDCLoc);
char *GetResolvedURLAux(PCImageInfo pImgInfo, char **ppszPath);
void DeleteAuxEntry(struct ImageInfo *pImgInfo);
void MoveAuxEntryToDCache(struct ImageInfo *pImgInfo);
void MoveDCacheEntryToAux(PCSTR pcszURL, struct ImageInfo *pImgInfo);
int CbWriteDCache( PCSTR pch,
int cbSize,
int cb,
FILE **pfp,
char **ppszDcFile,
char *pszActualURL,
UINT uFlags,
struct Mwin *tw);
void CleanupDCache(UINT uFlags);
int _cdecl x_compare_entries_dcache_ascending(const void *elem1, const void *elem2);
void CC_OnItem_TestDCacheOptions(HWND hWnd);
BOOL FGetDCacheFilename(PSTR pszFullDcFile,
int iLenMax,
PSTR *ppszDcFile,
PCSTR pcszURL,
HTFormat mime_type);
void ResetCIFEntryCurDoc(PCSTR pcszURL);
BOOL FParseDate(DCACHETIME *pdcTime,PCSTR pcszDateStr);
void CmdChangeCacheUpdFrequency(int iCacheUpdFreq);
void UpdateDCacheFreshness(PCSTR pszURL, BOOL fDel);
BOOL FFreshnessCheckNeeded(PCSTR pcszURL);
PSTR PszGetDCachePath( PCSTR pcszURL,
HTFormat *pMime,
long *pFileLength);
int CompareDCacheTime(DCACHETIME dct1, DCACHETIME dct2);
BOOL FUserCancelledAutoDialRecently(void);
BOOL FExpired(DCACHETIME dctExpires);
GLOBALREF HTProtocol HTDCache;