REQSOCK.H
上传用户:btxinjin
上传日期:2007-01-04
资源大小:83k
文件大小:3k
源码类别:

Web服务器

开发平台:

Visual C++

  1. // ReqSock.h : interface of the CRequestSocket class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1997-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12. #define MAX_DIR_FILENAME    24
  13. class CRequest;
  14. class CHttpSvrDoc;
  15. class CRequestSocket : public CAsyncSocket
  16. {
  17. DECLARE_DYNCREATE(CRequestSocket)
  18. CRequestSocket( void );
  19. protected:
  20. void StuffFileType( void );
  21. BOOL m_bKeepOpen;
  22. BOOL m_bWantKeepOpen;
  23. enum REQSTATUS
  24. {
  25. REQ_REQUEST=0, REQ_HEADER, REQ_BODY, REQ_SIMPLE, REQ_DONE
  26. };
  27. CRequest*   m_pRequest; // request object
  28. CByteArray  m_buf;
  29. int         m_cbOut;
  30. CString     m_strLine;
  31. REQSTATUS   m_reqStatus;
  32. HANDLE      m_hFile;
  33. int         m_nRefs;
  34. BOOL        m_bKilled;
  35. public:
  36. CHttpSvrDoc* m_pDoc;
  37. BOOL CheckExt( const CString& strExt, CString& strAvail, DWORD dwType );
  38. BOOL IsSvrApp( void );
  39. BOOL CheckDefault( UINT uList, BOOL bExecute );
  40. CString StripLast( CString& strPath );
  41. int StuffStatus( const CString& strStatus );
  42. CRequestSocket( CHttpSvrDoc* pDoc );
  43. ~CRequestSocket( void );
  44. virtual int AddRef( void );
  45. virtual int Release( void );
  46. #ifdef IMPL_CGI
  47. BOOL        CGIStart( void );
  48. void        CGIDone( void );
  49. CWinThread* m_pThread;
  50. CEvent*     m_pCancel;
  51. #endif // IMPL_CGI
  52. protected:
  53. BOOL StartSvrApp( void );
  54. BOOL FromHttpTime( const CString& strHttp, CTime& timeHttp );
  55. BOOL IfModSince( const CTime& timeIfMod );
  56. CString GetHttpDate( LPFILETIME pft = NULL );
  57. BOOL GetLine( const CByteArray& bytes, int nBytes, int& ndx );
  58. void ProcessLine( void );
  59. BOOL BodySent( void );
  60. void AddToBody( int nBytes, int ndx );
  61. BOOL StartResponse( void );
  62. BOOL FindTarget( CString& strFile );
  63. BOOL URLtoPath( CString& strFile );
  64. BOOL PathToURL( CString& strFile );
  65. BOOL StuffHeading( void );
  66. void StartTargetStuff( void );
  67. int StuffString( const CString& );
  68. int StuffString( UINT uId );
  69. int StuffStatus( UINT uMsg );
  70. int StuffError( UINT uMsg );
  71. int StuffHeader( CString strName, CString strValue );
  72. int StuffHeader( CString strName, int nValue );
  73. // methods not supported by Mac version....
  74. void StuffListing( void );
  75. int  StuffListingFile( WIN32_FIND_DATA* fd, const CString& strDir, BOOL bIcons );
  76. protected:
  77. virtual void OnReceive(int nErrorCode);
  78. virtual void OnSend(int nErrorCode);
  79. virtual void OnClose(int nErrorCode);
  80. friend UINT CGIThread( LPVOID );
  81. };
  82. CString Decode( const CString& str, BOOL bQuery = FALSE );
  83. #ifdef IMPL_CGI
  84. void HeaderToEnvVar( CString& strVar );
  85. class CEnvironment
  86. {
  87. public:
  88. CStringList m_list;
  89. int         m_nSize;
  90. CEnvironment( void );
  91. ~CEnvironment( void );
  92. BOOL Add( CString name, CString value );
  93. LPVOID GetBlock( void );
  94. };
  95. #endif