mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-03 16:14:15 +00:00
check for existing addressbook record
This commit is contained in:
parent
7477d2c219
commit
9c97ee6407
@ -54,7 +54,7 @@ namespace proxy {
|
|||||||
void HandleSockRecv(const boost::system::error_code & ecode, std::size_t bytes_transfered);
|
void HandleSockRecv(const boost::system::error_code & ecode, std::size_t bytes_transfered);
|
||||||
void Terminate();
|
void Terminate();
|
||||||
void AsyncSockRead();
|
void AsyncSockRead();
|
||||||
bool ExtractAddressHelper(i2p::http::URL & url, std::string & b64);
|
bool ExtractAddressHelper(i2p::http::URL & url, std::string & b64, bool & confirm);
|
||||||
void SanitizeHTTPRequest(i2p::http::HTTPReq & req);
|
void SanitizeHTTPRequest(i2p::http::HTTPReq & req);
|
||||||
void SentHTTPFailed(const boost::system::error_code & ecode);
|
void SentHTTPFailed(const boost::system::error_code & ecode);
|
||||||
void HandleStreamRequestComplete (std::shared_ptr<i2p::stream::Stream> stream);
|
void HandleStreamRequestComplete (std::shared_ptr<i2p::stream::Stream> stream);
|
||||||
@ -182,13 +182,15 @@ namespace proxy {
|
|||||||
std::bind(&HTTPReqHandler::SentHTTPFailed, shared_from_this(), std::placeholders::_1));
|
std::bind(&HTTPReqHandler::SentHTTPFailed, shared_from_this(), std::placeholders::_1));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HTTPReqHandler::ExtractAddressHelper(i2p::http::URL & url, std::string & b64)
|
bool HTTPReqHandler::ExtractAddressHelper(i2p::http::URL & url, std::string & b64, bool & confirm)
|
||||||
{
|
{
|
||||||
|
confirm = false;
|
||||||
const char *param = "i2paddresshelper=";
|
const char *param = "i2paddresshelper=";
|
||||||
std::size_t pos = url.query.find(param);
|
std::size_t pos = url.query.find(param);
|
||||||
std::size_t len = std::strlen(param);
|
std::size_t len = std::strlen(param);
|
||||||
std::map<std::string, std::string> params;
|
std::map<std::string, std::string> params;
|
||||||
|
|
||||||
|
|
||||||
if (pos == std::string::npos)
|
if (pos == std::string::npos)
|
||||||
return false; /* not found */
|
return false; /* not found */
|
||||||
if (!url.parse_query(params))
|
if (!url.parse_query(params))
|
||||||
@ -197,6 +199,8 @@ namespace proxy {
|
|||||||
std::string value = params["i2paddresshelper"];
|
std::string value = params["i2paddresshelper"];
|
||||||
len += value.length();
|
len += value.length();
|
||||||
b64 = i2p::http::UrlDecode(value);
|
b64 = i2p::http::UrlDecode(value);
|
||||||
|
// if we need update exists, request formed with update param
|
||||||
|
if (params["update"] == "true") { len += std::strlen("&update=true"); confirm = true; }
|
||||||
url.query.replace(pos, len, "");
|
url.query.replace(pos, len, "");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -242,24 +246,36 @@ namespace proxy {
|
|||||||
/* parsing success, now let's look inside request */
|
/* parsing success, now let's look inside request */
|
||||||
LogPrint(eLogDebug, "HTTPProxy: requested: ", m_ClientRequest.uri);
|
LogPrint(eLogDebug, "HTTPProxy: requested: ", m_ClientRequest.uri);
|
||||||
m_RequestURL.parse(m_ClientRequest.uri);
|
m_RequestURL.parse(m_ClientRequest.uri);
|
||||||
|
bool m_Confirm;
|
||||||
|
|
||||||
if (ExtractAddressHelper(m_RequestURL, b64))
|
if (ExtractAddressHelper(m_RequestURL, b64, m_Confirm))
|
||||||
{
|
{
|
||||||
bool addresshelper; i2p::config::GetOption("httpproxy.addresshelper", addresshelper);
|
bool addresshelper; i2p::config::GetOption("httpproxy.addresshelper", addresshelper);
|
||||||
if (!addresshelper)
|
if (!addresshelper)
|
||||||
{
|
{
|
||||||
LogPrint(eLogWarning, "HTTPProxy: addresshelper disabled");
|
LogPrint(eLogWarning, "HTTPProxy: addresshelper request rejected");
|
||||||
GenericProxyError("Invalid request", "adddresshelper is not supported");
|
GenericProxyError("Invalid request", "addresshelper is not supported");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
i2p::client::context.GetAddressBook ().InsertAddress (m_RequestURL.host, b64);
|
if (!i2p::client::context.GetAddressBook ().FindAddress (m_RequestURL.host) || m_Confirm)
|
||||||
LogPrint (eLogInfo, "HTTPProxy: added b64 from addresshelper for ", m_RequestURL.host);
|
{
|
||||||
std::string full_url = m_RequestURL.to_string();
|
i2p::client::context.GetAddressBook ().InsertAddress (m_RequestURL.host, b64);
|
||||||
std::stringstream ss;
|
LogPrint (eLogInfo, "HTTPProxy: added b64 from addresshelper for ", m_RequestURL.host);
|
||||||
ss << "Host " << m_RequestURL.host << " added to router's addressbook from helper. "
|
std::string full_url = m_RequestURL.to_string();
|
||||||
<< "Click <a href=\"" << full_url << "\">here</a> to proceed.";
|
std::stringstream ss;
|
||||||
GenericProxyInfo("Addresshelper found", ss.str().c_str());
|
ss << "Host " << m_RequestURL.host << " added to router's addressbook from helper. "
|
||||||
return true; /* request processed */
|
<< "Click <a href=\"" << full_url << "\">here</a> to proceed.";
|
||||||
|
GenericProxyInfo("Addresshelper found", ss.str().c_str());
|
||||||
|
return true; /* request processed */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << "Host " << m_RequestURL.host << " <font color=red>already in router's addressbook</font>. "
|
||||||
|
<< "Click <a href=\"" << m_RequestURL.query << "?i2paddresshelper=" << b64 << "&update=true\">here</a> to update record.";
|
||||||
|
GenericProxyInfo("Addresshelper found", ss.str().c_str());
|
||||||
|
return true; /* request processed */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
std::string dest_host;
|
std::string dest_host;
|
||||||
uint16_t dest_port;
|
uint16_t dest_port;
|
||||||
@ -570,7 +586,7 @@ namespace proxy {
|
|||||||
{
|
{
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
LogPrint (eLogError, "HTTPProxy: error when creating the stream, check the previous warnings for more info");
|
LogPrint (eLogError, "HTTPProxy: error when creating the stream, check the previous warnings for more info");
|
||||||
GenericProxyError("Host is down", "Can't create connection to requested host, it may be down");
|
GenericProxyError("Host is down", "Can't create connection to requested host, it may be down. Please try again later.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Kill())
|
if (Kill())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user