HttpRequest.h
上传用户:dengkfang
上传日期:2008-12-30
资源大小:5233k
文件大小:5k
源码类别:

CA认证

开发平台:

Visual C++

  1. /*
  2. Module : HttpRequest.h
  3. Purpose: Defines the interface for the CHttpRequest classes
  4. Created: PJN / 30-09-2001
  5. Copyright (c) 1999 - 2005 by PJ Naughter.  
  6. All rights reserved.
  7. Copyright / Usage Details:
  8. You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) 
  9. when your product is released in binary form. You are allowed to modify the source code in any way you want 
  10. except you cannot modify the copyright details at the top of each module. If you want to distribute source 
  11. code with your application, then you are only allowed to distribute versions released by the author. This is 
  12. to maintain a single distribution point for the source code. 
  13. */
  14. /////////////////////////////// Defines ///////////////////////////////////////
  15. #ifndef __HTTPREQUEST_H__
  16. #define __HTTPREQUEST_H__
  17. #ifndef W3MFC_EXT_CLASS
  18. #define W3MFC_EXT_CLASS
  19. #endif
  20. /////////////////////////////// Includes //////////////////////////////////////
  21. #ifndef W3MFC_NO_SSPI_SUPPORT
  22.   #ifndef __SSPI_H__
  23.   #include <sspi.h>
  24.   #pragma message("To avoid this message please put SSPI.h in your PCH (normally stdafx.h)")
  25.   #endif
  26. #endif
  27. /////////////////////////////// Classes ///////////////////////////////////////
  28. //Class which represents a request from a HTTP client
  29. class W3MFC_EXT_CLASS CHttpRequest
  30. {
  31. public:
  32. //Constructors / Destructors
  33.   CHttpRequest(int nHeaderHashSize = 53); //53 being a largish header value
  34.   virtual ~CHttpRequest();
  35. //Enums for m_Verb
  36. enum HttpVerb
  37.   {
  38. HTTP_VERB_POST      = 0,
  39. HTTP_VERB_GET       = 1,
  40. HTTP_VERB_HEAD      = 2,
  41. HTTP_VERB_PUT       = 3,
  42. HTTP_VERB_LINK      = 4,
  43. HTTP_VERB_DELETE    = 5,
  44. HTTP_VERB_UNLINK    = 6,
  45. HTTP_VERB_UNKNOWN   = 7,
  46. };
  47. //Enums for Authorization type
  48.   enum HttpAuthorization
  49.   {
  50.     HTTP_AUTHORIZATION_ANONYMOUS = 0,
  51.     HTTP_AUTHORIZATION_PLAINTEXT = 1,
  52.     HTTP_AUTHORIZATION_NTLM      = 2,
  53.   };  
  54. //Methods
  55.   CHttpRequest& operator=(const CHttpRequest& request);
  56. //Member variables
  57.   BYTE*              m_pRawRequest;                 //The raw request 
  58.   DWORD              m_dwRawRequestSize;            //The raw request size
  59.   BYTE*              m_pRawEntity;                  //The raw entity-body if any
  60.   DWORD              m_dwRawEntitySize;             //The raw entity-body size if any
  61.   int                m_nContentLength;              //The content length of the entity body
  62.   CString            m_sRequest;                    //The Full request line e.g. "GET / HTTP/1.0"
  63.   sockaddr_in        m_ClientAddress;               //The IP address where the request originated from
  64.   HttpVerb           m_Verb;                        //enum of the HTTP verb used e.g. GET, PUT etc
  65.   CString            m_sVerb;                       //String version of the HTTP verb used
  66.   CString            m_sURL;                        //The URL of the request (URL Decoded)
  67.   CString            m_sRawURL;                     //The URL of the request (before it is URL Decoded)
  68.   CString            m_sPathInfo;                   //Any data after the file name but before the first ?
  69.   CString            m_sExtra;                      //Any part of the URL after the "?"
  70.   CString            m_sRawExtra;                   //Any part of the URL after the "?" (before it is URL Decoded)
  71.   DWORD              m_dwHttpVersion;               //The HTTP Version Number of the HTTP client request
  72.                                                     //encoded as MAKELONG(Minor, Major)
  73.   BOOL               m_bIfModifiedSincePresent;     //Is the If-Modified-Since header present
  74.   SYSTEMTIME         m_IfModifiedSince;             //The actual If-Modified-Since header
  75.   HttpAuthorization  m_AuthorizationType;           //What authorization method is being used
  76.   CString            m_sUsername;                   //username if Authentication is being used
  77.   CString            m_sPassword;                   //password if plaintext authorization is being used
  78.   CString            m_sRemoteHost;                 //the domain name of the client (if reverse DNS is enabled otherwise empty)
  79.   CString            m_sContentType;                //the content type of the entity body
  80.   BOOL               m_bKeepAlive;                  //TRUE if the "Connection: Keep-Alive" header has been set 
  81.   CString            m_sAuthenticationResponse;     //The data to send down in Authentication responses
  82.   BOOL               m_bFirstAuthenticationRequest; //Is this the first part of an authenticating request which requires SSPI
  83.   BOOL               m_bLoggedOn;                   //Are we impersonated a user via LogonUser
  84. #ifndef W3MFC_NO_SSPI_SUPPORT
  85.   CtxtHandle         m_ContentHandle;               //The SSPI context handle for this request
  86. #endif
  87.   BOOL               m_bAuthenticationComplete;     //Is the Authentication phase complete
  88.   CString            m_sAuthorityName;              //The authenticating authority if using SSPI authentication e.g. this would be the domain name
  89.   CString            m_sLocalFile;                  //The local file this request maps to (if any)
  90.   CMapStringToString m_HeaderMap;                   //Hash table of all the headers
  91.   HANDLE             m_hImpersonation;              //The impersonation token the request is using if any
  92. };
  93. #endif //__HTTPREQUEST_H__