From 86fdd48229dddc4a8d1bc2a719af70cdd4404e9a Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 12 Sep 2014 15:02:00 -0400 Subject: [PATCH] fixed POST methos --- HTTPProxy.cpp | 76 +++++++++++--------------------------------------- HTTPProxy.h | 2 +- HTTPServer.cpp | 2 +- 3 files changed, 18 insertions(+), 62 deletions(-) diff --git a/HTTPProxy.cpp b/HTTPProxy.cpp index fbda9d7c..dbb52b22 100644 --- a/HTTPProxy.cpp +++ b/HTTPProxy.cpp @@ -30,7 +30,7 @@ namespace proxy } } - void HTTPProxyConnection::ExtractRequest(request &m_Request) + void HTTPProxyConnection::ExtractRequest(request& r) { std::string requestString = m_Buffer; int idx=requestString.find(" "); @@ -52,72 +52,28 @@ namespace proxy path=m[4].str(); } LogPrint("server is: ",server, "\n path is: ",path); - m_Request.uri = path; - m_Request.method = method; - m_Request.host = server; + r.uri = path; + r.method = method; + r.host = server; } void HTTPProxyConnection::RunRequest() { - request m_Request; - ExtractRequest(m_Request); - parseHeaders(m_Buffer, m_Request.headers); - - LogPrint("Requesting ", m_Request.host, " with path ", m_Request.uri, " and method ", m_Request.method); - HandleDestinationRequest(m_Request.host, m_Request.uri); + request r; + ExtractRequest(r); + parseHeaders(m_Buffer, r.headers); + size_t len = 0; + const char * data = strstr (m_Buffer, "\r\n\r\n"); + if (data) + { + data += 4; + len = strlen (m_Buffer) - (data - m_Buffer); + } + LogPrint("Requesting ", r.host, " with path ", r.uri, " and method ", r.method); + HandleDestinationRequest(r.host, r.method, len > 0 ? std::string (data, len) : "" , r.uri); } - //void HTTPConnection::HandleDestinationRequest (const std::string& address, const std::string& uri) - //{ - // i2p::data::IdentHash destination; - // std::string fullAddress; - // if (address.find (".b32.i2p") != std::string::npos) - // { - // int li = address.find_first_of ("."); - // std::string newaddress = address.substr (0, li); - // if (i2p::data::Base32ToByteStream (newaddress.c_str (), newaddress.length (), (uint8_t *)destination, 32) != 32) - // { - // LogPrint ("Invalid Base32 address ", newaddress); - // return; - // } - // fullAddress = newaddress + ".b32.i2p"; - // } - // else - // { - // auto addr = i2p::data::netdb.FindAddress (address); - // if (!addr) - // { - // LogPrint ("Unknown address ", address); - // SendReply(""+ i2p::proxy::itoopieImage +"
Unknown address " + address + ""); - // return; - // } - // destination = *addr; - // fullAddress = address; - // } - // - // auto leaseSet = i2p::data::netdb.FindLeaseSet (destination); - // if (!leaseSet || !leaseSet->HasNonExpiredLeases ()) - // { - // i2p::data::netdb.Subscribe(destination); - // std::this_thread::sleep_for (std::chrono::seconds(10)); // wait for 10 seconds - // leaseSet = i2p::data::netdb.FindLeaseSet (destination); - // if (!leaseSet || !leaseSet->HasNonExpiredLeases ()) // still no LeaseSet - // { - // SendReply(leaseSet ? ""+ i2p::proxy::itoopieImage +"
Leases expired" : ""+ i2p::proxy::itoopieImage +"LeaseSet not found"); - // return; - // } - // } - // if (!m_Stream) - // m_Stream = i2p::stream::CreateStream (*leaseSet); - // if (m_Stream) - // { - // std::string request = "GET " + uri + " HTTP/1.1\n Host:" + fullAddress + "\n"; - // m_Stream->Send ((uint8_t *)request.c_str (), request.length (), 10); - // AsyncStreamReceive (); - // } - //} - } } diff --git a/HTTPProxy.h b/HTTPProxy.h index 497e90af..c9ccc31c 100644 --- a/HTTPProxy.h +++ b/HTTPProxy.h @@ -20,7 +20,7 @@ namespace proxy protected: void RunRequest(); void parseHeaders(const std::string& h, std::vector
& hm); - void ExtractRequest(request &m_Request); + void ExtractRequest(request& r); }; class HTTPProxy : public i2p::util::HTTPServer diff --git a/HTTPServer.cpp b/HTTPServer.cpp index 23d41683..c0fcd413 100644 --- a/HTTPServer.cpp +++ b/HTTPServer.cpp @@ -765,7 +765,7 @@ namespace util { // POST/PUT, apply body request += "Content-Length: " ; - request += request.size (); + request += data.size (); request += "\r\n" + data; } LogPrint("HTTP Client Request: ", request);