windows-nt/Source/XPSP1/NT/admin/pchealth/upload/server/isapi/httpcontext.h
2020-09-26 16:20:57 +08:00

130 lines
3.9 KiB
C++

/******************************************************************************
Copyright (c) 2000 Microsoft Corporation
Module Name:
HttpContext.h
Abstract:
This file contains the declaration of the MPCHttpContext class,
which handles the interface with IIS.
Revision History:
Davide Massarenti (Dmassare) 04/20/99
created
******************************************************************************/
#if !defined(__INCLUDED___ULSERVER___HTTPCONTEXT_H___)
#define __INCLUDED___ULSERVER___HTTPCONTEXT_H___
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//
// Forward declarations.
//
class MPCServer;
class MPCHttpPipe;
class MPCHttpContext
{
enum FSMstate
{
FSM_REGISTER,
FSM_INPUT ,
FSM_PROCESS ,
FSM_OUTPUT ,
FSM_DELETE
};
enum IOstate
{
IO_IDLE ,
IO_READING,
IO_WRITING
};
LPEXTENSION_CONTROL_BLOCK m_pECB;
MPCServer* m_mpcsServer;
DWORD m_dwSkippedInput;
BOOL m_fRequestProcessed;
BOOL m_fKeepConnection;
BOOL m_fAsync;
FSMstate m_FSMstate;
IOstate m_IOstate;
MPC::Serializer_Memory m_hsInput;
MPC::Serializer_Memory m_hsOutput;
BYTE m_rgBuffer[4096];
DWORD m_dwIOcount;
//////////////////////////////////////////////////////////////////
protected:
DWORD AsyncRead();
DWORD AsyncWrite();
DWORD AdvanceFSM();
DWORD Fsm_Register();
DWORD Fsm_ReceiveInput();
DWORD Fsm_Process();
DWORD Fsm_SendOutput();
static VOID WINAPI IOCompletion( /*[in]*/ EXTENSION_CONTROL_BLOCK* pECB ,
/*[in]*/ PVOID pContext ,
/*[in]*/ DWORD cbIO ,
/*[in]*/ DWORD dwError );
//////////////////////////////////////////////////////////////////
public:
MPCHttpContext();
virtual ~MPCHttpContext();
DWORD Init( /*[in]*/ LPEXTENSION_CONTROL_BLOCK pECB );
HRESULT GetServerVariable ( /*[in]*/ LPCSTR szVar , /*[out]*/ MPC::wstring& szValue );
HRESULT GetRequestSize ( /*[out]*/ DWORD& dwCount );
HRESULT CheckDataAvailable( /*[in] */ DWORD dwCount, /*[out]*/ bool& fAvailable );
HRESULT Read ( /*[in]*/ void* pBuffer, /*[in] */ DWORD dwCount );
HRESULT Write ( /*[in]*/ const void* pBuffer, /*[in] */ DWORD dwCount );
//////////////////////////////////////////////////////////////////
#ifdef DEBUG
bool m_Debug_NO_RESPONSE_TO_OPEN;
bool m_Debug_NO_RESPONSE_TO_WRITE;
bool m_Debug_RESPONSE_TO_OPEN;
DWORD m_Debug_RESPONSE_TO_OPEN_response;
DWORD m_Debug_RESPONSE_TO_OPEN_position;
DWORD m_Debug_RESPONSE_TO_OPEN_protocol;
bool m_Debug_RESPONSE_TO_WRITE;
DWORD m_Debug_RESPONSE_TO_WRITE_response;
DWORD m_Debug_RESPONSE_TO_WRITE_position;
DWORD m_Debug_RESPONSE_TO_WRITE_protocol;
bool m_Debug_RANDOM_POINTER_ERROR;
DWORD m_Debug_RANDOM_POINTER_ERROR_pos_low;
DWORD m_Debug_RANDOM_POINTER_ERROR_pos_high;
bool m_Debug_FIXED_POINTER_ERROR;
DWORD m_Debug_FIXED_POINTER_ERROR_pos;
#endif
//////////////////////////////////////////////////////////////////
};
#endif // !defined(__INCLUDED___ULSERVER___HTTPCONTEXT_H___)