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.
|
|
/*===================================================================
Microsoft IIS 5.0 (ASP)
Microsoft Confidential. Copyright 1998 Microsoft Corporation. All Rights Reserved.
Component: 449 negotiations w/IE
File: ie449.h
Owner: DmitryR
This file contains the definitons for the 449 negotiations w/IE ===================================================================*/
#ifndef IE449_H
#define IE449_H
#include "hashing.h"
#include "aspdmon.h"
#include "memcls.h"
// forward declr
class CHitObj; class C449Cookie; class C449File;
/*===================================================================
The API ===================================================================*/
// init/uninit on dll level
HRESULT Init449(); HRESULT UnInit449();
// create a new cookie
HRESULT Create449Cookie(char *szName, TCHAR *szFile, C449Cookie **pp449);
// do the work
HRESULT Do449Processing ( CHitObj *pHitObj, C449Cookie **rgpCookies, DWORD cCookies );
// change notification processing
HRESULT Do449ChangeNotification(TCHAR *szFile = NULL);
/*===================================================================
C449File class definition files are hashed ===================================================================*/ class C449File : public IUnknown, public CLinkElem { private: LONG m_cRefs; // ref count
LONG m_fNeedLoad; // flag when need to reload (Interlocked)
TCHAR *m_szFile; // file name with script
char *m_szBuffer; // file contents
DWORD m_cbBuffer; // file contents length
CDirMonitorEntry *m_pDME; // for change notification support
HANDLE m_hFileReadyForUse; // is the File ready for use by other threads
HRESULT m_hrLoadResult; // record result of load here?
C449File(); // should be done using Create449Cookie()
~C449File(); // should be done using Release()
HRESULT Init(TCHAR *szFile);
public: // public constructor
static HRESULT Create449File(TCHAR *szFile, C449File **ppFile);
HRESULT Load();
inline char *SzBuffer() { return m_szBuffer; } inline DWORD CbBuffer() { return m_cbBuffer; }
inline void SetNeedLoad() { ResetEvent (m_hFileReadyForUse); m_hrLoadResult = E_FAIL; InterlockedExchange(&m_fNeedLoad, 1); }
// IUnknown implementation
STDMETHODIMP QueryInterface(REFIID, VOID**); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // Cache on per-class basis
ACACHE_INCLASS_DEFINITIONS() };
/*===================================================================
C449FileMgr class definition file manager keeps the hash table of files ===================================================================*/ class C449FileMgr { private: CRITICAL_SECTION m_csLock; CHashTableMBStr m_ht449Files;
inline void Lock() { EnterCriticalSection(&m_csLock); } inline void UnLock() { LeaveCriticalSection(&m_csLock); }
public: C449FileMgr(); ~C449FileMgr(); HRESULT Init();
// find or create a new one
HRESULT GetFile(TCHAR *szFile, C449File **ppFile);
// change notification
HRESULT Flush(TCHAR *szFile); HRESULT FlushAll(); };
/*===================================================================
C449Cookie class definition cookie is a cookie -- file pair ===================================================================*/ class C449Cookie : public IUnknown { private: LONG m_cRefs; // ref count
char *m_szName; // cookie name to check
DWORD m_cbName; // cookie name length
C449File *m_pFile; // related file
C449Cookie(); // should be done using Create449Cookie()
~C449Cookie(); // should be done using Release()
HRESULT Init(char *szName, C449File *pFile);
public: // public constructor
static HRESULT Create449Cookie(char *szName, C449File *pFile, C449Cookie **pp449);
inline char *SzCookie() { return m_szName; } inline DWORD CbCookie() { return m_cbName; }
inline HRESULT LoadFile() { return m_pFile ? m_pFile->Load() : E_FAIL; } inline char *SzBuffer() { return m_pFile ? m_pFile->SzBuffer() : NULL; } inline DWORD CbBuffer() { return m_pFile ? m_pFile->CbBuffer() : 0; }
// IUnknown implementation
STDMETHODIMP QueryInterface(REFIID, VOID**); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // Cache on per-class basis
ACACHE_INCLASS_DEFINITIONS() };
#endif // IE449_H
|