/*++ Copyright (c) 1997 Microsoft Corporation Module Name : metacach.cxx Abstract: Declares the constants, data strutcures and function prototypes available for metadata cache management from Tsunami.lib Author: Phillich ( extracted from tsunami.hxx ) Project: Internet Services Common Functionality ( Tsunami Library) --*/ # ifndef _METACACH_HXX_ # define _METACACH_HXX_ /************************************************************ * Symbolic Constants ************************************************************/ #define METACACHE_W3_SERVER_ID 1 #define METACACHE_FTP_SERVER_ID 2 #define METACACHE_SMTP_SERVER_ID 3 #define METACACHE_NNTP_SERVER_ID 4 #define METACACHE_POP3_SERVER_ID 5 #define METACACHE_IMAP_SERVER_ID 6 // // Define the type of a metadata free routine. // typedef void (*PMDFREERTN)(PVOID pMetaData); class COMMON_METADATA; extern dllexp PVOID TsAddMetaData( IN COMMON_METADATA *pMetaData, IN PMDFREERTN pFreeRoutine, IN DWORD dwDataSetNumber, IN DWORD dwServiceID ); extern dllexp PVOID TsFindMetaData( IN DWORD dwDataSetNumber, IN DWORD dwServiceID ); extern dllexp VOID TsFreeMetaData( IN PVOID pCacheEntry ); extern dllexp VOID TsAddRefMetaData( IN PVOID pCacheEntry ); extern dllexp VOID TsFlushMetaCache( DWORD dwService, BOOL bTerminating ); extern dllexp VOID TsReferenceMetaData( IN PVOID pEntry ); extern dllexp VOID _TsValidateMetaCache( VOID ); #if DBG #define TsValidateMetaCache _TsValidateMetaCache #else #define TsValidateMetaCache() #endif #define CMD_SIG 0x20444D43 // 'CMD ' #define METADATA_ERROR_TYPE 0 #define METADATA_ERROR_VALUE 1 #define METADATA_ERROR_WIN32 2 typedef struct _METADATA_ERROR_INFO { BOOL IsValid; DWORD ErrorParameter; DWORD ErrorReason; DWORD Win32Error; } METADATA_ERROR_INFO, *PMETADATA_ERROR_INFO; class COMMON_METADATA { public: dllexp COMMON_METADATA(VOID); dllexp virtual ~COMMON_METADATA(VOID); dllexp BOOL ReadMetaData( PIIS_SERVER_INSTANCE pInstance, MB * pmb, LPSTR pszURL, PMETADATA_ERROR_INFO pError ); dllexp BOOL BuildPhysicalPath( LPSTR pszURL, STR * pstrPhysicalPath ); dllexp BOOL BuildPhysicalPathWithAltRoot( LPSTR pszURL, STR * pstrPhysicalPath, PCSTR pstrAltRoot ); dllexp BOOL BuildApplPhysicalPath( MB * pmb, STR * pstrApplPhysicalPath ) const; dllexp virtual BOOL HandlePrivateProperty( LPSTR pszURL, PIIS_SERVER_INSTANCE pInstance, METADATA_GETALL_INTERNAL_RECORD *pMDRecord, PVOID pDataPointer, BUFFER *pBuffer, DWORD *pdwBytesUsed, PMETADATA_ERROR_INFO pError ) { return TRUE; } dllexp virtual BOOL FinishPrivateProperties( BUFFER *pBuffer, DWORD dwBytesUsed, BOOL bSucceeded ) { return TRUE; } // // This is not inline to avoid pulling-in metadata & mb declaration in // this header file. // dllexp VOID FreeMdTag( DWORD dwTag ); // // Query Methods // STR * QueryVrPath( VOID ) { return &m_strVrPath; } STR * QueryAppPath( VOID ) { return &m_strAppPath; } DWORD QueryAccessPerms( VOID ) const { return m_dwAccessPerm | m_dwSslAccessPerm; } DWORD QuerySslAccessPerms( VOID ) const { return m_dwSslAccessPerm; } PVOID QueryCacheInfo(VOID) const { return m_pCacheCookie; } BOOL DontLog( VOID ) const { return m_fDontLog; } PVOID QueryAcl(VOID) const { return m_pAcl; } LPVOID QueryIpDnsAccessCheckPtr() { return m_IpDnsAccessCheckPtr; } DWORD QueryIpDnsAccessCheckSize() { return m_IpDnsAccessCheckSize; } BOOL IsIpDnsAccessCheckPresent() { return m_IpDnsAccessCheckSize; } DWORD QueryVrLevel() const { return m_dwVrLevel; } DWORD QueryVrLen() const { return m_dwVrLen; } HANDLE QueryVrAccessToken() { return m_hVrToken ? TsTokenToImpHandle( m_hVrToken ) : NULL; } HANDLE QueryVrPrimaryAccessToken() { return m_hVrToken ? TsTokenToHandle( m_hVrToken ) : NULL; } BOOL QueryDoCache() const { return m_fDoCache; } BOOL ImpersonateVrAccessToken() { return m_hVrToken ? TsImpersonateUser( m_hVrToken ) : NULL; } BOOL QueryVrPassThrough() { return m_fVrPassThrough; } DWORD QueryVrError() { return m_dwVrError; } // // Set Methods // dllexp VOID SetAccessPerms( DWORD dwAccessPerm ) { m_dwAccessPerm = dwAccessPerm /*& MD_NONSLL_ACCESS_MASK*/; } VOID SetSslAccessPerms( DWORD dwAccessPerm ) { m_dwSslAccessPerm = dwAccessPerm & MD_SSL_ACCESS_MASK; } VOID SetCacheInfo( PVOID CacheInfo ) { m_pCacheCookie = CacheInfo; } BOOL SetIpDnsAccessCheck( LPVOID pV, DWORD dwV, DWORD dwTag ) { if ( dwTag == 0 ) { // If tag is 0, then the property didn't have the REFERENCE // attribute set. Allocate memory and copy the data. m_IpDnsAccessCheckPtr = LocalAlloc( LPTR, dwV ); if ( m_IpDnsAccessCheckPtr == NULL ) { return FALSE; } memcpy( m_IpDnsAccessCheckPtr, pV, dwV ); } else { m_IpDnsAccessCheckPtr = pV; } m_IpDnsAccessCheckSize = dwV; m_IpDnsAccessCheckTag = dwTag; return TRUE; } VOID SetAcl( LPVOID pV, DWORD dwV, DWORD dwTag ) { if ( dwV ) { m_pAcl = pV; m_dwAclTag = dwTag; } else { FreeMdTag( dwTag ); } } VOID SetDontLogFlag( BOOL fDontLog ) { m_fDontLog = fDontLog; } VOID SetVrLevelAndLen( DWORD dwL, DWORD dwVrLen ) { m_dwVrLevel = dwL; m_dwVrLen = dwVrLen; } BOOL SetVrUserNameAndPassword( PIIS_SERVER_INSTANCE, LPSTR pszUserName, LPSTR pszPassword ); VOID SetVrPassThrough( BOOL f ) { m_fVrPassThrough = f; } VOID SetDoCache( BOOL f ) { m_fDoCache = f; } VOID CheckSignature(VOID) const {DBG_ASSERT(m_Signature == CMD_SIG); } private: DWORD m_Signature; STR m_strVrPath; STR m_strAppPath; DWORD m_dwAccessPerm; DWORD m_dwSslAccessPerm; PVOID m_pCacheCookie; LPVOID m_IpDnsAccessCheckPtr; DWORD m_IpDnsAccessCheckSize; DWORD m_IpDnsAccessCheckTag; BOOL m_fDontLog; LPVOID m_pAcl; DWORD m_dwAclTag; DWORD m_dwVrLevel; DWORD m_dwVrLen; TS_TOKEN m_hVrToken; BOOL m_fVrPassThrough; DWORD m_dwVrError; BOOL m_fDoCache; PIIS_SERVER_INSTANCE m_pInstance; }; typedef COMMON_METADATA *PCOMMON_METADATA; class METADATA_REF_HANDLER { public: METADATA_REF_HANDLER() { m_dwMdDataTag = 0; m_pvMdData = NULL; } ~METADATA_REF_HANDLER() {} VOID Set( LPVOID pV, DWORD dwS, DWORD dwR ) { m_dwMdDataTag = dwR; m_pvMdData = pV; m_dwMdDataSize = dwS; m_fIsCopy = FALSE; } VOID Reset( IMDCOM* pIMDCOM ) { if ( m_dwMdDataTag ) { HRESULT hRes; if ( !m_fIsCopy ) { hRes = pIMDCOM->ComMDReleaseReferenceData( m_dwMdDataTag ); } else { m_fIsCopy = FALSE; } m_dwMdDataTag = 0; m_pvMdData = NULL; } } BOOL CopyFrom( METADATA_REF_HANDLER* pSrc ) { m_dwMdDataTag = pSrc->m_dwMdDataTag; m_pvMdData = pSrc->m_pvMdData; m_dwMdDataSize = pSrc->m_dwMdDataSize; m_fIsCopy = TRUE; return TRUE; } LPVOID GetPtr() { return m_pvMdData; } DWORD GetSize() { return m_dwMdDataSize; } private: DWORD m_dwMdDataTag; LPVOID m_pvMdData; DWORD m_dwMdDataSize; BOOL m_fIsCopy; } ; #endif