mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-28 01:44:14 +00:00
handle incoming datagramms
This commit is contained in:
parent
35d4692f5f
commit
2dfd351e7a
27
Datagram.cpp
27
Datagram.cpp
@ -67,6 +67,31 @@ namespace datagram
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DatagramDestination::HandleDatagram (const uint8_t * buf, size_t len)
|
||||||
|
{
|
||||||
|
i2p::data::IdentityEx identity;
|
||||||
|
size_t identityLen = identity.FromBuffer (buf, len);
|
||||||
|
const uint8_t * signature = buf + identityLen;
|
||||||
|
size_t headerLen = identityLen + identity.GetSignatureLen ();
|
||||||
|
|
||||||
|
bool verified = false;
|
||||||
|
if (identity.GetSigningKeyType () == i2p::data::SIGNING_KEY_TYPE_DSA_SHA1)
|
||||||
|
{
|
||||||
|
uint8_t hash[32];
|
||||||
|
CryptoPP::SHA256().CalculateDigest (hash, buf + headerLen, len - headerLen);
|
||||||
|
verified = identity.Verify (hash, 32, signature);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
verified = identity.Verify (buf + headerLen, len - headerLen, signature);
|
||||||
|
|
||||||
|
if (verified)
|
||||||
|
{
|
||||||
|
// TODO: invoke datagram handler
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LogPrint ("Datagram signature verification failed");
|
||||||
|
}
|
||||||
|
|
||||||
void DatagramDestination::HandleDataMessagePayload (const uint8_t * buf, size_t len)
|
void DatagramDestination::HandleDataMessagePayload (const uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
// unzip it
|
// unzip it
|
||||||
@ -78,7 +103,7 @@ namespace datagram
|
|||||||
if (uncompressedLen <= MAX_DATAGRAM_SIZE)
|
if (uncompressedLen <= MAX_DATAGRAM_SIZE)
|
||||||
{
|
{
|
||||||
decompressor.Get (uncompressed, uncompressedLen);
|
decompressor.Get (uncompressed, uncompressedLen);
|
||||||
//HandleNextPacket (uncompressed);
|
HandleDatagram (uncompressed, uncompressedLen);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LogPrint ("Received datagram size ", uncompressedLen, " exceeds max size");
|
LogPrint ("Received datagram size ", uncompressedLen, " exceeds max size");
|
||||||
|
@ -28,6 +28,7 @@ namespace datagram
|
|||||||
|
|
||||||
I2NPMessage * CreateDataMessage (const uint8_t * payload, size_t len);
|
I2NPMessage * CreateDataMessage (const uint8_t * payload, size_t len);
|
||||||
void SendMsg (I2NPMessage * msg, const i2p::data::LeaseSet& remote);
|
void SendMsg (I2NPMessage * msg, const i2p::data::LeaseSet& remote);
|
||||||
|
void HandleDatagram (const uint8_t * buf, size_t len);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user