1
0
mirror of https://github.com/PurpleI2P/i2pd.git synced 2025-03-13 08:11:11 +00:00

* Reseed.cpp : use new response parsing

This commit is contained in:
hagen 2016-07-19 00:00:00 +00:00
parent 25ba08abcf
commit 19f3c75a8d

View File

@ -15,7 +15,6 @@
#include "Identity.h" #include "Identity.h"
#include "NetDb.h" #include "NetDb.h"
#include "HTTP.h" #include "HTTP.h"
#include "util.h"
namespace i2p namespace i2p
{ {
@ -405,15 +404,31 @@ namespace data
s.write_some (boost::asio::buffer (req.to_string())); s.write_some (boost::asio::buffer (req.to_string()));
// read response // read response
std::stringstream rs; std::stringstream rs;
char response[1024]; size_t l = 0; char recv_buf[1024]; size_t l = 0;
do do {
{ l = s.read_some (boost::asio::buffer (recv_buf, sizeof(recv_buf)), ecode);
l = s.read_some (boost::asio::buffer (response, 1024), ecode); if (l) rs.write (recv_buf, l);
if (l) rs.write (response, l); } while (!ecode && l);
}
while (!ecode && l);
// process response // process response
return i2p::util::http::GetHttpContent (rs); std::string data = rs.str();
i2p::http::HTTPRes res;
int len = res.parse(data);
if (len <= 0) {
LogPrint(eLogWarning, "Reseed: incomplete/broken response from ", url.host);
return "";
}
data.erase(0, len); /* drop http headers from response */
LogPrint(eLogDebug, "Reseed: got ", data.length(), " bytes of data from ", url.host);
if (res.is_chunked()) {
std::stringstream in(data), out;
if (!i2p::http::MergeChunkedResponse(in, out)) {
LogPrint(eLogWarning, "Reseed: failed to merge chunked response from ", url.host);
return "";
}
LogPrint(eLogDebug, "Reseed: got ", data.length(), "(", out.tellg(), ") bytes of data from ", url.host);
data = out.str();
}
return data;
} }
else else
LogPrint (eLogError, "Reseed: SSL handshake failed: ", ecode.message ()); LogPrint (eLogError, "Reseed: SSL handshake failed: ", ecode.message ());