130 lines
3.9 KiB
C++
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___)
|