Ejemplo n.º 1
0
tstring FilterSubstitution(tstring aString) {
  tstring result = aString;
  tstring::size_type start = 0, end = tstring::npos;
  TCHAR *envData;
  while (true) {
    start = result.find(tstring::value_type('$'), start);
    if (start == tstring::npos) {
      break;
    }
    end = result.find(tstring::value_type('$'), start + 1);
    if (end == tstring::npos) {
      break;
    }
    // Try to substitute $APPDIR$
    tstring variable = result.substr(start + 1, end - start - 1);
    if (variable == _T("APPDIR")) {
      tstring appdir = GetAppResoucesDirectory();
      DebugMessage("AppDir: %s", appdir.c_str());
      result.replace(start, end-start+1, appdir);
      start += appdir.length();
      continue;
    }
    // Try to substitute $XXX$ with environment variable %DISTHELPER_XXX%
    tstring envName(_T("DISTHELPER_"));
    envName.append(variable);
    envData = _tgetenv(envName.c_str());
    if (envData && *envData) {
      tstring envValue(envData);
      DebugMessage("Environment %s: %s", envName.c_str(), envValue.c_str());
      result.replace(start, end-start+1, envValue.c_str());
      start += envValue.length();
      continue;
    }
    // Try to substitute $XXX$ with environment variable %XXX%
    envData = _tgetenv(variable.c_str());
    if (envData && *envData) {
      tstring envValue(envData);
      DebugMessage("Environment %s: %s", envName.c_str(), envValue.c_str());
      result.replace(start, end-start+1, envValue.c_str());
      start += envValue.length();
      continue;
    }
    start = end + 1;
  }
  return result;
}
Ejemplo n.º 2
0
std::string HTTPRequest::envValue(const std::string& name) const
{
  if (name == "CONTENT_TYPE") {
    return headerValue("Content-Type");
  } else if (name == "CONTENT_LENGTH") {
    return headerValue("Content-Length");
  } else if (name == "SERVER_SIGNATURE") {
    return "<address>Wt httpd Server ("
      + envValue("SERVER_SOFTWARE")
      + ")</address>";
  } else if (name == "SERVER_SOFTWARE") {
    return "Wthttpd/"
      + boost::lexical_cast<std::string>(WT_SERIES) + '.'
      + boost::lexical_cast<std::string>(WT_MAJOR) + '.'
      + boost::lexical_cast<std::string>(WT_MINOR);
  } else if (name == "SERVER_ADMIN") {
    return "webmaster@localhost"; // FIXME
  } else if (name == "REMOTE_ADDR") {
    return remoteAddr();
  } else if (name == "DOCUMENT_ROOT") {
    return reply_->configuration().docRoot();
  } else
    return std::string();
}