www.pudn.com > httpserve.rar > Reqsock.h


// ReqSock.h : interface of the CRequestSocket class 
// 
// This is a part of the Microsoft Foundation Classes C++ library. 
// Copyright (C) 1997-1998 Microsoft Corporation 
// All rights reserved. 
// 
// This source code is only intended as a supplement to the 
// Microsoft Foundation Classes Reference and related 
// electronic documentation provided with the library. 
// See these sources for detailed information regarding the 
// Microsoft Foundation Classes product. 
 
#define MAX_DIR_FILENAME    24 
class CRequest; 
class CHttpSvrDoc; 
 
class CRequestSocket : public CAsyncSocket 
{ 
	DECLARE_DYNCREATE(CRequestSocket) 
	CRequestSocket( void ); 
 
protected: 
	void StuffFileType( void ); 
	BOOL m_bKeepOpen; 
	BOOL m_bWantKeepOpen; 
	enum REQSTATUS 
	{ 
		REQ_REQUEST=0, REQ_HEADER, REQ_BODY, REQ_SIMPLE, REQ_DONE 
	}; 
 
	CRequest*   m_pRequest; // request object 
 
	CByteArray  m_buf; 
	int         m_cbOut; 
	CString     m_strLine; 
	REQSTATUS   m_reqStatus; 
	HANDLE      m_hFile; 
	int         m_nRefs; 
	BOOL        m_bKilled; 
 
public: 
	CHttpSvrDoc* m_pDoc; 
	BOOL CheckExt( const CString& strExt, CString& strAvail, DWORD dwType ); 
	BOOL IsSvrApp( void ); 
	BOOL CheckDefault( UINT uList, BOOL bExecute ); 
	CString StripLast( CString& strPath ); 
	int StuffStatus( const CString& strStatus ); 
	CRequestSocket( CHttpSvrDoc* pDoc ); 
	~CRequestSocket( void ); 
	virtual int AddRef( void ); 
	virtual int Release( void ); 
 
#ifdef IMPL_CGI 
	BOOL        CGIStart( void ); 
	void        CGIDone( void ); 
	CWinThread* m_pThread; 
	CEvent*     m_pCancel; 
#endif // IMPL_CGI 
 
protected: 
	BOOL StartSvrApp( void ); 
	BOOL FromHttpTime( const CString& strHttp, CTime& timeHttp ); 
	BOOL IfModSince( const CTime& timeIfMod ); 
	CString GetHttpDate( LPFILETIME pft = NULL ); 
	BOOL GetLine( const CByteArray& bytes, int nBytes, int& ndx ); 
	void ProcessLine( void ); 
	BOOL BodySent( void ); 
	void AddToBody( int nBytes, int ndx ); 
	BOOL StartResponse( void ); 
	BOOL FindTarget( CString& strFile ); 
	BOOL URLtoPath( CString& strFile ); 
	BOOL PathToURL( CString& strFile ); 
	BOOL StuffHeading( void ); 
	void StartTargetStuff( void ); 
 
	int StuffString( const CString& ); 
	int StuffString( UINT uId ); 
	int StuffStatus( UINT uMsg ); 
	int StuffError( UINT uMsg ); 
	int StuffHeader( CString strName, CString strValue ); 
	int StuffHeader( CString strName, int nValue ); 
 
	// methods not supported by Mac version.... 
	void StuffListing( void ); 
	int  StuffListingFile( WIN32_FIND_DATA* fd, const CString& strDir, BOOL bIcons ); 
 
protected: 
	virtual void OnReceive(int nErrorCode); 
	virtual void OnSend(int nErrorCode); 
	virtual void OnClose(int nErrorCode); 
 
	friend UINT CGIThread( LPVOID ); 
}; 
 
CString Decode( const CString& str, BOOL bQuery = FALSE ); 
 
#ifdef IMPL_CGI 
void HeaderToEnvVar( CString& strVar ); 
 
class CEnvironment 
{ 
public: 
	CStringList m_list; 
	int         m_nSize; 
 
	CEnvironment( void ); 
	~CEnvironment( void );  
	BOOL Add( CString name, CString value ); 
	LPVOID GetBlock( void ); 
}; 
#endif