Leaked source code of windows server 2003
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.
|
|
#ifndef _COOKIE_JAR_H_
#define _COOKIE_JAR_H_
#include <wininetp.h>
#include "httpp.h"
//---------------------------------------------------------------------------
//
// CCookieBase
//
// Provides operator new which allocates extra memory
// after object and initializes the memory to zero.
//
//---------------------------------------------------------------------------
class CCookieBase { public:
void * operator new(size_t cb, size_t cbExtra); void operator delete(void *pv); };
//---------------------------------------------------------------------------
//
// CCookie
//
// Holds a single cookie value.
//
//---------------------------------------------------------------------------
class CCookie : public CCookieBase { public:
~CCookie(); static CCookie *Construct(const char *pchName);
BOOL SetValue(const char *pchValue); BOOL CanSend(BOOL fSecure); BOOL IsPersistent() { return (_dwFlags & COOKIE_SESSION) == 0; }
BOOL PurgeAll(void *);
DWORD _dwFlags; CCookie * _pCookieNext; char * _pchName; char * _pchValue; FILETIME _ftExpiry; };
//---------------------------------------------------------------------------
//
// CCookieLocation
//
// Holds all cookies for a given domain and path.
//
//---------------------------------------------------------------------------
class CCookieLocation : public CCookieBase { public:
~CCookieLocation(); static CCookieLocation *Construct(const char *pchRDomain, const char *pchPath);
CCookie * GetCookie(const char *pchName, BOOL fCreate); BOOL ReadCacheFile(); BOOL ReadCacheFileIfNeeded(); void Purge(BOOL (CCookie::*)(void *), void *); BOOL IsMatch(const char *pchRDomain, const char *pchPath);
FILETIME _ftCacheFileLastModified; CCookie * _pCookieKids; CCookieLocation*_pLocationNext; char * _pchRDomain; char * _pchPath; int _cchPath; BYTE _fReadFromCacheFileNeeded; };
//---------------------------------------------------------------------------
//
// CCookieJar
//
// Maintains fixed size hash table of cookie location objects.
//
//---------------------------------------------------------------------------
enum SET_COOKIE_RESULT { SET_COOKIE_FAIL = 0, SET_COOKIE_SUCCESS = 1, SET_COOKIE_DISALLOW = 2, SET_COOKIE_PENDING = 3 };
class CCookieJar : public CCookieBase { public:
static CCookieJar * Construct();
CCookieJar(); ~CCookieJar();
DWORD SetCookie(HTTP_REQUEST_HANDLE_OBJECT *pRequest, const char *pchURL, char *pchHeader, DWORD dwFlags); CCookieLocation* GetCookies(const char *pchRDomain, const char *pchPath, CCookieLocation *pLast, FILETIME *ftCurrentTime);
void Purge(); CCookieLocation** GetBucket(const char *pchRDomain); CCookieLocation * GetLocation(const char *pchRDomain, const char *pchPath, BOOL fCreate); void Serialize(HANDLE hCookieFile);
enum { htsize=32 }; CCookieLocation * _apLocation[htsize];
CCritSec _csCookieJar;
private: void serializeCookie(const CCookie *pCookie, HANDLE hCookieFile, const char *pchDomain, const char *pchPath); void expireCookies(CCookieLocation *pLocation, FILETIME *ftRefTime); };
#endif
|