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

CA认证

开发平台:

Visual C++

  1. /*
  2. Module : HttpRequest.cpp
  3. Purpose: Implementation for the CHttpRequest class
  4. Created: PJN / 30-09-1999
  5. History: None
  6. Copyright (c) 1999 - 2005 by PJ Naughter.  (Web: www.naughter.com, Email: pjna@naughter.com)
  7. All rights reserved.
  8. Copyright / Usage Details:
  9. You are allowed to include the source code in any product (commercial, shareware, freeware or otherwise) 
  10. when your product is released in binary form. You are allowed to modify the source code in any way you want 
  11. except you cannot modify the copyright details at the top of each module. If you want to distribute source 
  12. code with your application, then you are only allowed to distribute versions released by the author. This is 
  13. to maintain a single distribution point for the source code. 
  14. */
  15. //////////////// Includes ////////////////////////////////////////////
  16. #include "stdafx.h"
  17. #include "HttpRequest.h"
  18. //////////////// Macros //////////////////////////////////////////////
  19. //Taken from the winuser.h file in the Platform SDK.
  20. #ifndef RT_HTML
  21. #define RT_HTML         MAKEINTRESOURCE(23)
  22. #endif
  23. #ifdef _DEBUG
  24. #define new DEBUG_NEW
  25. #undef THIS_FILE
  26. static char THIS_FILE[] = __FILE__;
  27. #endif
  28. //////////////// Implementation //////////////////////////////////////
  29. CHttpRequest::CHttpRequest(int nHeaderHashTable)
  30. {
  31.   m_Verb = HTTP_VERB_UNKNOWN;
  32.   m_dwHttpVersion = 0;
  33.   m_bIfModifiedSincePresent = FALSE; 
  34.   ZeroMemory(&m_IfModifiedSince, sizeof(SYSTEMTIME));
  35.   m_AuthorizationType = HTTP_AUTHORIZATION_ANONYMOUS;
  36.   m_pRawRequest = NULL;
  37.   m_dwRawRequestSize = 0;
  38.   m_pRawEntity = NULL;
  39.   m_dwRawEntitySize = 0;
  40.   m_nContentLength = 0;
  41.   m_bKeepAlive = FALSE;
  42.   m_bFirstAuthenticationRequest = TRUE;
  43. #ifndef W3MFC_NO_SSPI_SUPPORT
  44.   ZeroMemory(&m_ContentHandle, sizeof(CtxtHandle));
  45. #endif
  46.   m_bAuthenticationComplete = FALSE;
  47.   m_bLoggedOn = FALSE;
  48.   m_HeaderMap.InitHashTable(nHeaderHashTable);
  49.   m_hImpersonation = NULL;
  50. }
  51. CHttpRequest::~CHttpRequest()
  52. {
  53. }
  54. CHttpRequest& CHttpRequest::operator=(const CHttpRequest& request)
  55. {
  56.   //Free up any existing memory before we copy over
  57.   if (m_pRawRequest)
  58.   {
  59.     delete [] m_pRawRequest;
  60.     m_pRawRequest = NULL;
  61.   }
  62.   m_nContentLength          = request.m_nContentLength;
  63.   m_sRequest                = request.m_sRequest;
  64.   m_Verb                    = request.m_Verb;
  65.   m_sVerb                   = request.m_sVerb;
  66.   m_ClientAddress           = request.m_ClientAddress;
  67.   m_sURL                    = request.m_sURL;
  68.   m_sRawURL                 = request.m_sRawURL;
  69.   m_sPathInfo               = request.m_sPathInfo;
  70.   m_sExtra                  = request.m_sExtra;
  71.   m_sRawExtra               = request.m_sRawExtra;
  72.   m_dwHttpVersion           = request.m_dwHttpVersion;
  73.   m_bIfModifiedSincePresent = request.m_bIfModifiedSincePresent; 
  74.   CopyMemory(&m_IfModifiedSince, &request.m_IfModifiedSince, sizeof(SYSTEMTIME));
  75.   m_AuthorizationType       = request.m_AuthorizationType;
  76.   m_sUsername               = request.m_sUsername;
  77.   m_sPassword               = request.m_sPassword;
  78.   m_sRemoteHost             = request.m_sRemoteHost;
  79.   m_sContentType            = request.m_sContentType;
  80.   m_bKeepAlive              = request.m_bKeepAlive;
  81.   m_sAuthenticationResponse = request.m_sAuthenticationResponse;
  82.   //Note: we deliberatly do not copy across context handle or the first authentication request boolean
  83.   m_bAuthenticationComplete = request.m_bAuthenticationComplete;
  84.   m_sAuthorityName          = request.m_sAuthorityName;
  85.   m_sLocalFile              = request.m_sLocalFile;
  86.   if (request.m_pRawRequest)
  87.   {
  88.     m_pRawRequest     = new BYTE[request.m_dwRawRequestSize];
  89.     m_dwRawRequestSize  = request.m_dwRawRequestSize;
  90.     m_dwRawEntitySize   = request.m_dwRawEntitySize;
  91.     CopyMemory(m_pRawRequest, request.m_pRawRequest, m_dwRawRequestSize);
  92.     if (m_dwRawEntitySize)
  93.       m_pRawEntity = m_pRawRequest + (m_dwRawRequestSize - m_dwRawEntitySize);
  94.     else
  95.       m_pRawEntity = NULL;
  96.   }
  97.   else
  98.   {
  99.     m_pRawRequest = NULL;
  100.     m_dwRawRequestSize = 0;
  101.     m_pRawEntity = NULL;
  102.     m_dwRawEntitySize = 0;
  103.   }
  104.   m_HeaderMap.RemoveAll();
  105.   m_HeaderMap.InitHashTable(request.m_HeaderMap.GetHashTableSize());
  106.   POSITION posMap = request.m_HeaderMap.GetStartPosition();
  107.   while (posMap)
  108.   {
  109.     CString sKey;
  110.     CString sValue;
  111.     request.m_HeaderMap.GetNextAssoc(posMap, sKey, sValue);
  112.     m_HeaderMap.SetAt(sKey, sValue);
  113.   }
  114.   m_hImpersonation = request.m_hImpersonation;
  115.   return *this;
  116. }