mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-09 11:27:53 +00:00
HostLookupMessage
This commit is contained in:
parent
153d883aeb
commit
6538a2e673
63
I2CP.cpp
63
I2CP.cpp
@ -287,6 +287,66 @@ namespace client
|
|||||||
LogPrint (eLogError, "I2CP: unexpected sessionID ", sessionID);
|
LogPrint (eLogError, "I2CP: unexpected sessionID ", sessionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void I2CPSession::HostLookupMessageHandler (const uint8_t * buf, size_t len)
|
||||||
|
{
|
||||||
|
uint16_t sessionID = bufbe16toh (buf);
|
||||||
|
if (sessionID == m_SessionID)
|
||||||
|
{
|
||||||
|
uint32_t requestID = bufbe32toh (buf + 2);
|
||||||
|
//uint32_t timeout = bufbe32toh (buf + 6);
|
||||||
|
if (!buf[10]) // request type = 0 (hash)
|
||||||
|
{
|
||||||
|
if (m_Destination)
|
||||||
|
{
|
||||||
|
auto ls = m_Destination->FindLeaseSet (buf + 11);
|
||||||
|
if (ls)
|
||||||
|
SendHostReplyMessage (requestID, ls->GetIdentity ());
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto s = shared_from_this ();
|
||||||
|
m_Destination->RequestDestination (buf + 11,
|
||||||
|
[s, requestID](std::shared_ptr<i2p::data::LeaseSet> leaseSet)
|
||||||
|
{
|
||||||
|
s->SendHostReplyMessage (requestID, leaseSet ? leaseSet->GetIdentity () : nullptr);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SendHostReplyMessage (requestID, nullptr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogPrint (eLogError, "I2CP: request type ", (int)buf[8], " is not supported");
|
||||||
|
SendHostReplyMessage (requestID, nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LogPrint (eLogError, "I2CP: unexpected sessionID ", sessionID);
|
||||||
|
}
|
||||||
|
|
||||||
|
void I2CPSession::SendHostReplyMessage (uint32_t requestID, std::shared_ptr<const i2p::data::IdentityEx> identity)
|
||||||
|
{
|
||||||
|
if (identity)
|
||||||
|
{
|
||||||
|
size_t l = identity->GetFullLen () + 7;
|
||||||
|
uint8_t * buf = new uint8_t[l];
|
||||||
|
htobe16buf (buf, m_SessionID);
|
||||||
|
htobe32buf (buf + 2, requestID);
|
||||||
|
buf[6] = 0; // result code
|
||||||
|
identity->ToBuffer (buf + 7, l - 7);
|
||||||
|
SendI2CPMessage (I2CP_HOST_REPLY_MESSAGE, buf, l);
|
||||||
|
delete[] buf;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uint8_t buf[7];
|
||||||
|
htobe16buf (buf, m_SessionID);
|
||||||
|
htobe32buf (buf + 2, requestID);
|
||||||
|
buf[6] = 1; // result code
|
||||||
|
SendI2CPMessage (I2CP_HOST_REPLY_MESSAGE, buf, 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
I2CPServer::I2CPServer (const std::string& interface, int port):
|
I2CPServer::I2CPServer (const std::string& interface, int port):
|
||||||
m_IsRunning (false), m_Thread (nullptr),
|
m_IsRunning (false), m_Thread (nullptr),
|
||||||
m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(interface), port))
|
m_Acceptor (m_Service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(interface), port))
|
||||||
@ -296,7 +356,8 @@ namespace client
|
|||||||
m_MessagesHandlers[I2CP_CREATE_SESSION_MESSAGE] = &I2CPSession::CreateSessionMessageHandler;
|
m_MessagesHandlers[I2CP_CREATE_SESSION_MESSAGE] = &I2CPSession::CreateSessionMessageHandler;
|
||||||
m_MessagesHandlers[I2CP_DESTROY_SESSION_MESSAGE] = &I2CPSession::DestroySessionMessageHandler;
|
m_MessagesHandlers[I2CP_DESTROY_SESSION_MESSAGE] = &I2CPSession::DestroySessionMessageHandler;
|
||||||
m_MessagesHandlers[I2CP_CREATE_LEASESET_MESSAGE] = &I2CPSession::CreateLeaseSetMessageHandler;
|
m_MessagesHandlers[I2CP_CREATE_LEASESET_MESSAGE] = &I2CPSession::CreateLeaseSetMessageHandler;
|
||||||
m_MessagesHandlers[I2CP_SEND_MESSAGE_MESSAGE] = &I2CPSession::SendMessageMessageHandler;
|
m_MessagesHandlers[I2CP_SEND_MESSAGE_MESSAGE] = &I2CPSession::SendMessageMessageHandler;
|
||||||
|
m_MessagesHandlers[I2CP_HOST_LOOKUP_MESSAGE] = &I2CPSession::HostLookupMessageHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
I2CPServer::~I2CPServer ()
|
I2CPServer::~I2CPServer ()
|
||||||
|
6
I2CP.h
6
I2CP.h
@ -35,7 +35,9 @@ namespace client
|
|||||||
const uint8_t I2CP_DESTROY_SESSION_MESSAGE = 3;
|
const uint8_t I2CP_DESTROY_SESSION_MESSAGE = 3;
|
||||||
const uint8_t I2CP_REQUEST_VARIABLE_LEASESET_MESSAGE = 37;
|
const uint8_t I2CP_REQUEST_VARIABLE_LEASESET_MESSAGE = 37;
|
||||||
const uint8_t I2CP_CREATE_LEASESET_MESSAGE = 4;
|
const uint8_t I2CP_CREATE_LEASESET_MESSAGE = 4;
|
||||||
const uint8_t I2CP_SEND_MESSAGE_MESSAGE = 5;
|
const uint8_t I2CP_SEND_MESSAGE_MESSAGE = 5;
|
||||||
|
const uint8_t I2CP_HOST_LOOKUP_MESSAGE = 38;
|
||||||
|
const uint8_t I2CP_HOST_REPLY_MESSAGE = 39;
|
||||||
|
|
||||||
class I2CPSession;
|
class I2CPSession;
|
||||||
class I2CPDestination: public LeaseSetDestination
|
class I2CPDestination: public LeaseSetDestination
|
||||||
@ -85,6 +87,7 @@ namespace client
|
|||||||
void DestroySessionMessageHandler (const uint8_t * buf, size_t len);
|
void DestroySessionMessageHandler (const uint8_t * buf, size_t len);
|
||||||
void CreateLeaseSetMessageHandler (const uint8_t * buf, size_t len);
|
void CreateLeaseSetMessageHandler (const uint8_t * buf, size_t len);
|
||||||
void SendMessageMessageHandler (const uint8_t * buf, size_t len);
|
void SendMessageMessageHandler (const uint8_t * buf, size_t len);
|
||||||
|
void HostLookupMessageHandler (const uint8_t * buf, size_t len);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@ -99,6 +102,7 @@ namespace client
|
|||||||
size_t PutString (uint8_t * buf, size_t len, const std::string& str);
|
size_t PutString (uint8_t * buf, size_t len, const std::string& str);
|
||||||
|
|
||||||
void SendSessionStatusMessage (uint8_t status);
|
void SendSessionStatusMessage (uint8_t status);
|
||||||
|
void SendHostReplyMessage (uint32_t requestID, std::shared_ptr<const i2p::data::IdentityEx> identity);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user