/*=================================================================== Microsoft Denali Microsoft Confidential. Copyright 1996 Microsoft Corporation. All Rights Reserved. Component: CIsapiReqInfo Object File: IsapiReq.h Owner: AndyMorr ===================================================================*/ #ifndef ISAPIREQ_H #define ISAPIREQ_H #include #if _IIS_5_1 #include #else #include #endif #include "memcls.h" /* Mappings of CIsapiReqInfo methods to the proper routines based on the UNICODE setting */ #ifdef UNICODE #define QueryPszPathInfo QueryPszPathInfoW #define QueryCchPathInfo QueryCchPathInfoW #define QueryPszPathTranslated QueryPszPathTranslatedW #define QueryCchPathTranslated QueryCchPathTranslatedW #define QueryPszApplnMDPath QueryPszApplnMDPathW #define QueryCchApplnMDPath QueryCchApplnMDPathW #define MapUrlToPath MapUrlToPathW #define GetCustomError GetCustomErrorW #define GetAspMDData GetAspMDDataW #define GetAspMDAllData GetAspMDAllDataW #define GetServerVariable GetServerVariableW #else #define QueryPszPathInfo QueryPszPathInfoA #define QueryCchPathInfo QueryCchPathInfoA #define QueryPszPathTranslated QueryPszPathTranslatedA #define QueryCchPathTranslated QueryCchPathTranslatedA #define QueryPszApplnMDPath QueryPszApplnMDPathA #define QueryCchApplnMDPath QueryCchApplnMDPathA #define MapUrlToPath MapUrlToPathA #define GetCustomError GetCustomErrorA #define GetAspMDData GetAspMDDataA #define GetAspMDAllData GetAspMDAllDataA #define GetServerVariable GetServerVariableA #endif /*=================================================================== C I s a p i R e q I n f o Class which encapsulates Request info we need from the ISAPI interface. Information either comes from the public ISAPI interfaces (SSE and ServerVariables) or from the private WAM_EXEC_INFO. ===================================================================*/ class CIsapiReqInfo { private: LONG m_cRefs; #if _IIS_5_1 // Associated WAM_EXEC_INFO (for browser requests) WAM_EXEC_INFO *m_pWXI; #endif EXTENSION_CONTROL_BLOCK *m_pECB; int m_cchQueryString; int m_cchApplnMDPathA; int m_cchPathTranslatedA; int m_cchPathInfoA; int m_cchApplnMDPathW; int m_cchPathTranslatedW; int m_cchPathInfoW; DWORD m_fApplnMDPathAInited : 1; DWORD m_fApplnMDPathWInited : 1; DWORD m_fPathInfoWInited : 1; DWORD m_fPathTranslatedWInited : 1; DWORD m_fCookieInited : 1; DWORD m_fUserAgentInited : 1; DWORD m_fInstanceIDInited : 1; DWORD m_fVersionInited : 1; DWORD m_fFKeepConnInited : 1; DWORD m_dwInstanceID; DWORD m_dwVersionMajor; DWORD m_dwVersionMinor; BOOL m_fKeepConn; BUFFER m_ApplnMDPathA; BUFFER m_ApplnMDPathW; BUFFER m_PathInfoW; BUFFER m_PathTranslatedW; BUFFER m_Cookie; BUFFER m_UserAgent; IMSAdminBase *m_pIAdminBase; public: CIsapiReqInfo(EXTENSION_CONTROL_BLOCK *pECB) { m_cRefs = 1; m_fApplnMDPathAInited = 0; m_fApplnMDPathWInited = 0; m_fPathInfoWInited = 0; m_fPathTranslatedWInited = 0; m_fCookieInited = 0; m_fUserAgentInited = 0; m_fInstanceIDInited = 0; m_fVersionInited = 0; m_fFKeepConnInited = 0; m_dwInstanceID = 0; m_dwVersionMajor = 1; m_dwVersionMinor = 0; m_cchQueryString = -1; m_cchApplnMDPathA = -1; m_cchPathTranslatedA = -1; m_cchPathInfoA = -1; m_cchApplnMDPathW = -1; m_cchPathTranslatedW = -1; m_cchPathInfoW = -1; m_fKeepConn = FALSE; m_pIAdminBase = NULL; #if _IIS_5_1 m_pWXI = QueryPWAM_EXEC_INFOfromPECB(pECB); #endif m_pECB = pECB; } ~CIsapiReqInfo() { if (m_pIAdminBase != NULL) { m_pIAdminBase->Release(); m_pIAdminBase = NULL; } } LONG AddRef() { return InterlockedIncrement(&m_cRefs); } LONG Release() { LONG cRefs = InterlockedDecrement(&m_cRefs); if (cRefs == 0) { delete this; } return cRefs; } #if _IIS_5_1 EXTENSION_CONTROL_BLOCK *ECB() { return &m_pWXI->ecb; } #else EXTENSION_CONTROL_BLOCK *ECB() { return m_pECB; } #endif LPSTR QueryPszQueryString(); DWORD QueryCchQueryString(); LPSTR QueryPszApplnMDPathA(); DWORD QueryCchApplnMDPathA(); LPWSTR QueryPszApplnMDPathW(); DWORD QueryCchApplnMDPathW(); LPSTR QueryPszPathInfoA(); DWORD QueryCchPathInfoA(); LPWSTR QueryPszPathInfoW(); DWORD QueryCchPathInfoW(); LPSTR QueryPszPathTranslatedA(); DWORD QueryCchPathTranslatedA(); LPWSTR QueryPszPathTranslatedW(); DWORD QueryCchPathTranslatedW(); LPSTR QueryPszCookie(); VOID SetDwHttpStatusCode( DWORD dwStatus ); LPBYTE QueryPbData(); DWORD QueryCbAvailable(); DWORD QueryCbTotalBytes(); LPSTR QueryPszContentType(); LPSTR QueryPszMethod(); LPSTR QueryPszUserAgent(); DWORD QueryInstanceId(); BOOL IsChild(); BOOL FInPool(); DWORD QueryHttpVersionMajor(); DWORD QueryHttpVersionMinor(); HRESULT ISAThreadNotify( BOOL fStart ); HRESULT GetAspMDDataA(CHAR * pszMDPath, DWORD dwMDIdentifier, DWORD dwMDAttributes, DWORD dwMDUserType, DWORD dwMDDataType, DWORD dwMDDataLen, DWORD dwMDDataTag, unsigned char * pbMDData, DWORD * pdwRequiredBufferSize); HRESULT GetAspMDDataW(WCHAR * pszMDPath, DWORD dwMDIdentifier, DWORD dwMDAttributes, DWORD dwMDUserType, DWORD dwMDDataType, DWORD dwMDDataLen, DWORD dwMDDataTag, unsigned char * pbMDData, DWORD * pdwRequiredBufferSize); HRESULT GetAspMDAllDataA(CHAR * pszMDPath, DWORD dwMDUserType, DWORD dwDefaultBufferSize, LPVOID pvBuffer, DWORD * pdwRequiredBufferSize, DWORD * pdwNumDataEntries); HRESULT GetAspMDAllDataW(WCHAR * pszMDPath, DWORD dwMDUserType, DWORD dwDefaultBufferSize, LPVOID pvBuffer, DWORD * pdwRequiredBufferSize, DWORD * pdwNumDataEntries); BOOL GetCustomErrorA(DWORD dwError, DWORD dwSubError, DWORD dwBufferSize, CHAR *pvBuffer, DWORD *pdwRequiredBufferSize, BOOL *pfIsFileError); BOOL GetCustomErrorW(DWORD dwError, DWORD dwSubError, DWORD dwBufferSize, WCHAR *pvBuffer, DWORD *pdwRequiredBufferSize, BOOL *pfIsFileError); HANDLE QueryImpersonationToken(); HRESULT AppendLogParameter( LPSTR szExtraParam ); BOOL SendHeader(LPVOID pvStatus, DWORD cchStatus, LPVOID pvHeader, DWORD cchHeader, BOOL fIsaKeepConn); BOOL GetServerVariableA(LPSTR szVarName, LPSTR pBuffer, LPDWORD pdwSize ); BOOL GetServerVariableW(LPSTR szVarName, LPWSTR pBuffer, LPDWORD pdwSize); BOOL ServerSupportFunction(DWORD dwHSERequest, LPVOID pvData, LPDWORD pdwSize, LPDWORD pdwDataType); BOOL SendEntireResponseOop(IN HSE_SEND_ENTIRE_RESPONSE_INFO * pHseResponseInfo); BOOL SendEntireResponse(IN HSE_SEND_ENTIRE_RESPONSE_INFO * pHseResponseInfo); BOOL TestConnection(BOOL *pfIsConnected); BOOL MapUrlToPathA(LPSTR pBuffer, LPDWORD pdwBytes); BOOL MapUrlToPathW(LPWSTR pBuffer, LPDWORD pdwBytes); BOOL SyncReadClient(LPVOID pvBuffer, LPDWORD pdwBytes ); BOOL SyncWriteClient(LPVOID pvBuffer, LPDWORD pdwBytes); private: void InitVersionInfo(); IMSAdminBase *GetMetabaseIF(); BOOL InternalGetServerVariable(LPSTR pszVar, BUFFER *pBuffer); BOOL FKeepConn(); // Cache on per-class basis ACACHE_INCLASS_DEFINITIONS() }; #endif