void HttpRequestHandler::processRequest() { HttpRequest httpRequest(m_dataInput); httpRequest.readHeader(); StringStorage request; request.fromAnsiString(httpRequest.getRequest()); if (!httpRequest.parseHeader()) { Log::warning(_T("invalid http request from %s"), m_peerHost.getString()); return ; } request.replaceChar(_T('\n'), _T(' ')); request.replaceChar(_T('\t'), _T(' ')); Log::message(_T("\"%s\" from %s"), request.getString(), m_peerHost.getString()); HttpReply reply(m_dataOutput); bool pageFound = false; if (strcmp(httpRequest.getFilename(), "/") == 0) { CharString paramsString("\n"); bool isAppletArgsValid = true; bool paramsInUrlIsEnabled = Configurator::getInstance()->getServerConfig()->isAppletParamInUrlEnabled(); if (httpRequest.hasArguments() && paramsInUrlIsEnabled) { ArgList *args = httpRequest.getArguments(); for (size_t i = 0; i < args->getCount(); i++) { const char *key = args->getKey(i); AppletParameter parameter(key, args->getValue(key)); if (!parameter.isValid()) { isAppletArgsValid = false; break; } paramsString.format("%s%s", paramsString.getString(), parameter.getFormattedString()); } } reply.send200(); if (!isAppletArgsValid) { m_dataOutput->writeFully(HTTP_MSG_BADPARAMS, strlen(HTTP_MSG_BADPARAMS)); } else { CharString page; StringStorage computerName(_T("TightVNC Server")); Environment::getComputerName(&computerName); size_t computerNameANSILength = computerName.getLength() + 1; char *computerNameANSI = new char[computerNameANSILength]; computerName.toAnsiString(computerNameANSI, computerNameANSILength); page.format(HTTP_INDEX_PAGE_FORMAT, computerNameANSI, Configurator::getInstance()->getServerConfig()->getRfbPort(), paramsString.getString()); delete[] computerNameANSI; m_dataOutput->writeFully(page.getString(), page.getLength()); } pageFound = true; } else if ((strcmp(httpRequest.getFilename(), "/VncViewer.jar") == 0)) { reply.send200(); m_dataOutput->writeFully(VNC_VIEWER_JAR_BODY, sizeof(VNC_VIEWER_JAR_BODY)); pageFound = true; } if (!pageFound) { reply.send404(); } }