⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpisapi.cpp

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "REQUEST_METHOD") == 0)
  {
    char* szVerb = T2A((LPTSTR) (LPCTSTR) pClient->m_Request.m_sVerb);
    DWORD dwSize = strlen(szVerb) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, szVerb);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "SERVER_NAME") == 0)
  {
    char* szServerName = NULL;
    char szHostName[256];
    if (pSettings->m_sBindAddress.GetLength())
      szServerName = T2A((LPTSTR) (LPCTSTR) pSettings->m_sBindAddress);
    else
    {
      if (gethostname(szHostName, 256) == 0)
        szServerName = szHostName; 
      else
        szServerName = "";
    }

    DWORD dwSize = strlen(szServerName) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, szServerName);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "HTTPS") == 0)
  {
    char szHTTPS[10];
  #ifdef W3MFC_SSL_SUPPORT
    if (pSettings->m_SSLProtocol == CHttpServerSettings::SSL_NONE)
      strcpy(szHTTPS, "off");
    else
      strcpy(szHTTPS, "on");
  #else
    strcpy(szHTTPS, "off");
  #endif

    DWORD dwSize = strlen(szHTTPS) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, szHTTPS);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "AUTH_TYPE") == 0)
  {
    char szType[10];
    if (pClient->m_Request.m_AuthorizationType == CHttpRequest::HTTP_AUTHORIZATION_PLAINTEXT)
      strcpy(szType, "Basic");
    else if (pClient->m_Request.m_AuthorizationType == CHttpRequest::HTTP_AUTHORIZATION_NTLM)
      strcpy(szType, "NTLM");
    else
      strcpy(szType, "");

    DWORD dwSize = strlen(szType) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, szType);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if ((strcmpi(lpszVariableName, "AUTH_PASSWORD") == 0) ||
           (strcmpi(lpszVariableName, "REMOTE_PASSWORD") == 0))
  {
    if (pClient->m_Request.m_sPassword.GetLength())
    {
      char* szPassword = T2A((LPTSTR) (LPCTSTR) pClient->m_Request.m_sPassword);
      DWORD dwSize = strlen(szPassword) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szPassword);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "AUTH_REALM") == 0)
  {
    if (pClient->m_Request.m_AuthorizationType == CHttpRequest::HTTP_AUTHORIZATION_PLAINTEXT)
    {
      char* szRealm = T2A((LPTSTR) (LPCTSTR) pClient->m_Request.m_sURL);
      DWORD dwSize = strlen(szRealm) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szRealm);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "CONTENT_LENGTH") == 0)
  {
    if (pClient->m_Request.m_nContentLength)
    {
      char szContentLength[10];
      sprintf(szContentLength, "%d", pClient->m_Request.m_nContentLength);
      DWORD dwSize = strlen(szContentLength) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szContentLength);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "CONTENT_TYPE") == 0)
  {
    if (pClient->m_Request.m_sContentType.GetLength())
    {
      char* szContentType = T2A((LPTSTR) (LPCTSTR) pClient->m_Request.m_sContentType);
      DWORD dwSize = strlen(szContentType) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szContentType);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "LOGON_USER") == 0)
  {
    if (pClient->m_Request.m_bLoggedOn)
    {
      char* szUser = T2A((LPTSTR) (LPCTSTR) pClient->m_Request.m_sUsername);
      DWORD dwSize = strlen(szUser) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szUser);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else if (pSettings->m_sUsername.GetLength())
    {
      char* szUser = T2A((LPTSTR) (LPCTSTR) pSettings->m_sUsername);
      DWORD dwSize = strlen(szUser) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szUser);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if ((strcmpi(lpszVariableName, "HTTPS_SERVER_SUBJECT") == 0) ||
           (strcmpi(lpszVariableName, "CERT_SERVER_SUBJECT") == 0))
  {
    char* szSubject = NULL;
    if (pClient->GetCertIssuerServerVariable(szSubject))
    {
      DWORD dwSize = strlen(szSubject) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szSubject);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if ((strcmpi(lpszVariableName, "HTTPS_SERVER_ISSUER") == 0) ||
           (strcmpi(lpszVariableName, "CERT_SERVER_ISSUER") == 0))
  { 
    char* szIssuer = NULL;
    if (pClient->GetCertIssuerServerVariable(szIssuer))
    {
      DWORD dwSize = strlen(szIssuer) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szIssuer);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "CERT_SERIALNUMBER") == 0)
  {
    long nSerialNumber = 0;
    if (pClient->GetCertSerialNumberServerVariable(nSerialNumber))
    {
      char szSerialNumber[10];
      sprintf(szSerialNumber, "%d", nSerialNumber);
      DWORD dwSize = strlen(szSerialNumber) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szSerialNumber);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if ((strcmpi(lpszVariableName, "HTTPS_SECRETKEYSIZE") == 0) ||
           (strcmpi(lpszVariableName, "CERT_SECRETKEYSIZE") == 0))
  {
    int nBits = 0;
    if (pClient->GetServerKeySizeServerVariable(nBits))
    {
      char szBits[10];
      sprintf(szBits, "%d", nBits);
      DWORD dwSize = strlen(szBits) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szBits);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if ((strcmpi(lpszVariableName, "HTTPS_KEYSIZE") == 0) ||
           (strcmpi(lpszVariableName, "CERT_KEYSIZE") == 0)) 
  {
    int nBits = 0;
    if (pClient->GetKeySizeServerVariable(nBits))
    {
      char szBits[10];
      sprintf(szBits, "%d", nBits);
      DWORD dwSize = strlen(szBits) + 1;
      if (*lpdwBufferSize >= dwSize)
      {
        strcpy((char*) lpBuffer, szBits);
        *lpdwBufferSize = dwSize;
      }
      else
      { 
        SetLastError(ERROR_INSUFFICIENT_BUFFER);
        bSuccess = FALSE;
      }
    }
    else
    {
      SetLastError(ERROR_NO_DATA);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "PATH_TRANSLATED") == 0)
  {
    LPTSTR pszFilePart;
    TCHAR pszAbsolutePath[_MAX_PATH];
    GetFullPathName(pClient->m_Request.m_sLocalFile, _MAX_PATH, pszAbsolutePath, &pszFilePart);
    char* szAbsolutePath = T2A(pszAbsolutePath);
    DWORD dwSize = strlen(szAbsolutePath) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, szAbsolutePath);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "SCRIPT_NAME") == 0)
  {
    CString sScriptName = pClient->m_Request.m_sLocalFile;
    sScriptName.Replace(_T('\\'), _T('/')); //Ensure we use unix directory separators
    if (sScriptName.GetLength() && sScriptName.GetAt(0) != _T('/'))
      sScriptName = _T("/") + sScriptName;

    char* szScriptName = T2A((LPTSTR) (LPCTSTR) sScriptName);
    DWORD dwSize = strlen(szScriptName) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, szScriptName);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "REQUEST_LINE") == 0)
  {
    char* szRequest = T2A((LPTSTR) (LPCTSTR) pClient->m_Request.m_sRequest);
    DWORD dwSize = strlen(szRequest) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, szRequest);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "ALL_HTTP") == 0)
  {
    CString sAllHeaders;
    POSITION posMap = pClient->m_Request.m_HeaderMap.GetStartPosition();
    while (posMap)
    {
      CString sKey;
      CString sValue;
      pClient->m_Request.m_HeaderMap.GetNextAssoc(posMap, sKey, sValue);

      CString sLine;
      if (posMap)  
        sLine.Format(_T("HTTP_%s=%s\n"), sKey, sValue);
      else
        sLine.Format(_T("HTTP_%s=%s"), sKey, sValue);
        
      sAllHeaders += sLine;
    }
    
    char* pszAllHeaders = T2A((LPTSTR) (LPCTSTR) sAllHeaders);
    DWORD dwSize = strlen(pszAllHeaders) + 1;
    if (*lpdwBufferSize >= dwSize)
    {
      strcpy((char*) lpBuffer, pszAllHeaders);
      *lpdwBufferSize = dwSize;
    }
    else
    { 
      SetLastError(ERROR_INSUFFICIENT_BUFFER);
      bSuccess = FALSE;
    }
  }
  else if (strcmpi(lpszVariableName, "ALL_RAW") == 0)
  {
    DWORD dwSize = 0;
    if (pClient->m_Request.m_pRawEntity)
      dwSize = pClient->m_Request.m_pRawEntity - pClient->m_Request.m_pRawRequest + 1;
    else
      dwSize = pClient->m_Request.m_dwRawRequestSize;
    if (*lpdwBufferSize >= dwSize)
    {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -