mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
load host.txt via HTTPProxy
This commit is contained in:
parent
cdbcf0db76
commit
0c36925b87
@ -33,18 +33,13 @@ const IdentHash * AddressBook::FindAddress (const std::string& address)
|
||||
void AddressBook::LoadHostsFromI2P ()
|
||||
{
|
||||
std::string content;
|
||||
|
||||
std::stringstream url_ss;
|
||||
// TODO: hosts link in config
|
||||
// TODO: url download via HTTPProxy
|
||||
url_ss << "http://127.0.0.1:" << i2p::util::config::GetArg("-httpport", 7070) << "/udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna/hosts.txt";
|
||||
while (true)
|
||||
{
|
||||
content = i2p::util::http::httpRequest(url_ss.str());
|
||||
|
||||
// TODO: check http errors
|
||||
if (! boost::starts_with(content, "<html>") && content.size() > 0)
|
||||
break;
|
||||
// TODO: hosts link in config
|
||||
int http_code = i2p::util::http::httpRequestViaI2pProxy("http://udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p/hosts.txt", content);
|
||||
if (http_code ==200)
|
||||
if (!boost::starts_with(content, "<html>") && !content.empty()) // TODO: test and remove
|
||||
break;
|
||||
std::this_thread::sleep_for(std::chrono::seconds(5));
|
||||
}
|
||||
|
||||
|
@ -133,7 +133,7 @@ namespace util
|
||||
case 500: buffers.push_back(boost::asio::buffer("HTTP/1.0 500 Internal Server Error\r\n")); break;
|
||||
case 502: buffers.push_back(boost::asio::buffer("HTTP/1.0 502 Bad Gateway\r\n")); break;
|
||||
case 503: buffers.push_back(boost::asio::buffer("HTTP/1.0 503 Not Implemented\r\n")); break;
|
||||
case 504: buffers.push_back(boost::asio::buffer("HTTP/1.0 504 Gateway Timeou\r\n")); break;
|
||||
case 504: buffers.push_back(boost::asio::buffer("HTTP/1.0 504 Gateway Timeout\r\n")); break;
|
||||
default:
|
||||
buffers.push_back(boost::asio::buffer("HTTP/1.0 200 OK\r\n"));
|
||||
}
|
||||
|
59
util.cpp
59
util.cpp
@ -248,6 +248,65 @@ namespace http
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
int httpRequestViaI2pProxy(const std::string& address, std::string &content)
|
||||
{
|
||||
content = "";
|
||||
try
|
||||
{
|
||||
boost::asio::ip::tcp::iostream site;
|
||||
// please don't uncomment following line because it's not compatible with boost 1.46
|
||||
// 1.46 is default boost for Ubuntu 12.04 LTS
|
||||
//site.expires_from_now (boost::posix_time::seconds(30));
|
||||
{
|
||||
std::stringstream ss; ss << i2p::util::config::GetArg("-httpproxyport", 4446);
|
||||
site.connect("127.0.0.1", ss.str());
|
||||
}
|
||||
if (site)
|
||||
{
|
||||
i2p::util::http::url u(address);
|
||||
std::stringstream ss;
|
||||
ss << "GET " << address << " HTTP/1.0" << std::endl;
|
||||
ss << "Host: " << u.host_ << std::endl;
|
||||
ss << "Accept: */*" << std::endl;
|
||||
ss << "User - Agent: Wget / 1.11.4" << std::endl;
|
||||
ss << "Connection: close" << std::endl;
|
||||
ss << std::endl;
|
||||
site << ss.str();
|
||||
|
||||
// read response
|
||||
std::string version, statusMessage;
|
||||
site >> version; // HTTP version
|
||||
int status;
|
||||
site >> status; // status
|
||||
std::getline(site, statusMessage);
|
||||
if (status == 200) // OK
|
||||
{
|
||||
std::string header;
|
||||
while (std::getline(site, header) && header != "\r"){}
|
||||
std::stringstream ss;
|
||||
ss << site.rdbuf();
|
||||
content = ss.str();
|
||||
return status;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogPrint("HTTP response ", status);
|
||||
return status;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LogPrint("Can't connect to proxy");
|
||||
return 408;
|
||||
}
|
||||
}
|
||||
catch (std::exception& ex)
|
||||
{
|
||||
LogPrint("Failed to download ", address, " : ", ex.what());
|
||||
return 408;
|
||||
}
|
||||
}
|
||||
|
||||
url::url(const std::string& url_s)
|
||||
{
|
||||
|
2
util.h
2
util.h
@ -35,6 +35,8 @@ namespace util
|
||||
namespace http
|
||||
{
|
||||
std::string httpRequest(const std::string& address);
|
||||
int httpRequestViaI2pProxy(const std::string& address, std::string &content); // return http code
|
||||
|
||||
struct url {
|
||||
url(const std::string& url_s); // omitted copy, ==, accessors, ...
|
||||
private:
|
||||
|
Loading…
x
Reference in New Issue
Block a user