bool HTTPProxyHandler::CreateHTTPRequest(uint8_t *http_buff, std::size_t len) { ExtractRequest(); //TODO: parse earlier if (!ValidateHTTPRequest()) return false; HandleJumpServices(); m_request = m_method; m_request.push_back(' '); m_request += m_path; m_request.push_back(' '); m_request += m_version; m_request.push_back('\r'); m_request.push_back('\n'); m_request.append("Connection: close\r\n"); m_request.append(reinterpret_cast<const char *>(http_buff),len); return true; }
void HTTPProxyConnection::RunRequest() { request r; ExtractRequest(r); parseHeaders(m_Buffer, r.headers); size_t addressHelperPos = r.uri.find ("i2paddresshelper"); if (addressHelperPos != std::string::npos) { // jump service size_t addressPos = r.uri.find ("=", addressHelperPos); if (addressPos != std::string::npos) { LogPrint ("Jump service for ", r.host, " found. Inserting to address book"); auto base64 = r.uri.substr (addressPos + 1); i2p::client::context.GetAddressBook ().InsertAddress (r.host, base64); } } LogPrint("Requesting ", r.host, ":", r.port, " with path ", r.uri, " and method ", r.method); SendToAddress (r.host, r.port, m_Buffer, m_BufferLen); }