mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-07 06:09:42 +00:00
DestLookupMessage
This commit is contained in:
40
I2CP.cpp
40
I2CP.cpp
@@ -307,7 +307,7 @@ namespace client
|
|||||||
if (identity->Verify (buf, offset, buf + offset)) // signature
|
if (identity->Verify (buf, offset, buf + offset)) // signature
|
||||||
{
|
{
|
||||||
bool isPublic = true;
|
bool isPublic = true;
|
||||||
if (params[I2CP_PARAM_DONT_PUBLISH_LEASESET] == "false") isPublic = false;
|
if (params[I2CP_PARAM_DONT_PUBLISH_LEASESET] == "true") isPublic = false;
|
||||||
m_Destination = std::make_shared<I2CPDestination>(*this, identity, isPublic, params);
|
m_Destination = std::make_shared<I2CPDestination>(*this, identity, isPublic, params);
|
||||||
m_Destination->Start ();
|
m_Destination->Start ();
|
||||||
SendSessionStatusMessage (1); // created
|
SendSessionStatusMessage (1); // created
|
||||||
@@ -459,6 +459,43 @@ namespace client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void I2CPSession::DestLookupMessageHandler (const uint8_t * buf, size_t len)
|
||||||
|
{
|
||||||
|
if (m_Destination)
|
||||||
|
{
|
||||||
|
auto ls = m_Destination->FindLeaseSet (buf);
|
||||||
|
if (ls)
|
||||||
|
{
|
||||||
|
auto l = ls->GetIdentity ()->GetFullLen ();
|
||||||
|
uint8_t * identBuf = new uint8_t[l];
|
||||||
|
ls->GetIdentity ()->ToBuffer (identBuf, l);
|
||||||
|
SendI2CPMessage (I2CP_DEST_REPLY_MESSAGE, identBuf, l);
|
||||||
|
delete[] identBuf;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto s = shared_from_this ();
|
||||||
|
i2p::data::IdentHash ident (buf);
|
||||||
|
m_Destination->RequestDestination (ident,
|
||||||
|
[s, ident](std::shared_ptr<i2p::data::LeaseSet> leaseSet)
|
||||||
|
{
|
||||||
|
if (leaseSet) // found
|
||||||
|
{
|
||||||
|
auto l = leaseSet->GetIdentity ()->GetFullLen ();
|
||||||
|
uint8_t * identBuf = new uint8_t[l];
|
||||||
|
leaseSet->GetIdentity ()->ToBuffer (identBuf, l);
|
||||||
|
s->SendI2CPMessage (I2CP_DEST_REPLY_MESSAGE, identBuf, l);
|
||||||
|
delete[] identBuf;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
s->SendI2CPMessage (I2CP_DEST_REPLY_MESSAGE, ident, 32); // not found
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SendI2CPMessage (I2CP_DEST_REPLY_MESSAGE, buf, 32);
|
||||||
|
}
|
||||||
|
|
||||||
void I2CPSession::SendMessagePayloadMessage (const uint8_t * payload, size_t len)
|
void I2CPSession::SendMessagePayloadMessage (const uint8_t * payload, size_t len)
|
||||||
{
|
{
|
||||||
// we don't use SendI2CPMessage to eliminate additional copy
|
// we don't use SendI2CPMessage to eliminate additional copy
|
||||||
@@ -486,6 +523,7 @@ namespace client
|
|||||||
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;
|
m_MessagesHandlers[I2CP_HOST_LOOKUP_MESSAGE] = &I2CPSession::HostLookupMessageHandler;
|
||||||
|
m_MessagesHandlers[I2CP_DEST_LOOKUP_MESSAGE] = &I2CPSession::DestLookupMessageHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
I2CPServer::~I2CPServer ()
|
I2CPServer::~I2CPServer ()
|
||||||
|
|||||||
3
I2CP.h
3
I2CP.h
@@ -40,6 +40,8 @@ namespace client
|
|||||||
const uint8_t I2CP_MESSAGE_STATUS_MESSAGE = 22;
|
const uint8_t I2CP_MESSAGE_STATUS_MESSAGE = 22;
|
||||||
const uint8_t I2CP_HOST_LOOKUP_MESSAGE = 38;
|
const uint8_t I2CP_HOST_LOOKUP_MESSAGE = 38;
|
||||||
const uint8_t I2CP_HOST_REPLY_MESSAGE = 39;
|
const uint8_t I2CP_HOST_REPLY_MESSAGE = 39;
|
||||||
|
const uint8_t I2CP_DEST_LOOKUP_MESSAGE = 34;
|
||||||
|
const uint8_t I2CP_DEST_REPLY_MESSAGE = 35;
|
||||||
|
|
||||||
enum I2CPMessageStatus
|
enum I2CPMessageStatus
|
||||||
{
|
{
|
||||||
@@ -111,6 +113,7 @@ namespace client
|
|||||||
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);
|
void HostLookupMessageHandler (const uint8_t * buf, size_t len);
|
||||||
|
void DestLookupMessageHandler (const uint8_t * buf, size_t len);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user