bool f_dangling_server_proxy_new_request(const String& host) { if (host.empty()) { raise_warning("proxy new request needs host name"); return false; } Transport *transport = g_context->getTransport(); if (transport == NULL) { return false; } if (!transport->getHeader(DANGLING_HEADER).empty()) { // if we are processing a dangling server request, do not do it again return false; } std::string url = std::string("http://") + host.data() + ":" + boost::lexical_cast<std::string>(RuntimeOption::ServerPort) + transport->getServerObject(); int code = 0; std::string error; StringBuffer response; HeaderMap headers; headers[DANGLING_HEADER].push_back("1"); if (!HttpProtocol::ProxyRequest(transport, false, url, code, error, response, &headers)) { return false; } transport->setResponse(code, "dangling_server_proxy_new_request"); echo(response.detach()); return true; }
bool f_dangling_server_proxy_old_request() { static bool s_detected_dangling_server = true; if (!s_detected_dangling_server || SatelliteServerInfo::DanglingServerPort == 0) { return false; } Transport *transport = g_context->getTransport(); if (transport == NULL) { return false; } if (!transport->getHeader(DANGLING_HEADER).empty()) { // if we are processing a dangling server request, do not do it again return false; } std::string url = "http://localhost:" + boost::lexical_cast<std::string>(SatelliteServerInfo::DanglingServerPort) + transport->getServerObject(); int code = 0; std::string error; StringBuffer response; HeaderMap headers; headers[DANGLING_HEADER].push_back("1"); if (!HttpProtocol::ProxyRequest(transport, false, url, code, error, response, &headers)) { s_detected_dangling_server = false; return false; } transport->setResponse(code, "dangling_server_proxy_old_request"); echo(response.detach()); return true; }