mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-23 00:54:14 +00:00
set reply code for short tunnel build messages
This commit is contained in:
parent
3e281d4790
commit
dbe427d5eb
@ -608,7 +608,24 @@ namespace i2p
|
|||||||
LogPrint (eLogError, "I2NP: ShortTunnelBuild message of ", num, " records is too short ", len);
|
LogPrint (eLogError, "I2NP: ShortTunnelBuild message of ", num, " records is too short ", len);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO: check replyMsgID
|
auto tunnel = i2p::tunnel::tunnels.GetPendingInboundTunnel (replyMsgID);
|
||||||
|
if (tunnel)
|
||||||
|
{
|
||||||
|
// endpoint of inbound tunnel
|
||||||
|
LogPrint (eLogDebug, "I2NP: ShortTunnelBuild reply for tunnel ", tunnel->GetTunnelID ());
|
||||||
|
if (tunnel->HandleTunnelBuildResponse (buf, len))
|
||||||
|
{
|
||||||
|
LogPrint (eLogInfo, "I2NP: Inbound tunnel ", tunnel->GetTunnelID (), " has been created");
|
||||||
|
tunnel->SetState (i2p::tunnel::eTunnelStateEstablished);
|
||||||
|
i2p::tunnel::tunnels.AddInboundTunnel (tunnel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogPrint (eLogInfo, "I2NP: Inbound tunnel ", tunnel->GetTunnelID (), " has been declined");
|
||||||
|
tunnel->SetState (i2p::tunnel::eTunnelStateBuildFailed);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
const uint8_t * record = buf + 1;
|
const uint8_t * record = buf + 1;
|
||||||
for (int i = 0; i < num; i++)
|
for (int i = 0; i < num; i++)
|
||||||
{
|
{
|
||||||
@ -688,7 +705,8 @@ namespace i2p
|
|||||||
nonce[4] = j; // nonce is record #
|
nonce[4] = j; // nonce is record #
|
||||||
if (j == i)
|
if (j == i)
|
||||||
{
|
{
|
||||||
// TODO: fill reply
|
memset (reply + SHORT_RESPONSE_RECORD_OPTIONS_OFFSET, 0, 2); // no options
|
||||||
|
reply[SHORT_RESPONSE_RECORD_RET_OFFSET] = 0; // TODO: correct ret code
|
||||||
if (!i2p::crypto::AEADChaCha20Poly1305 (reply, SHORT_TUNNEL_BUILD_RECORD_SIZE - 16,
|
if (!i2p::crypto::AEADChaCha20Poly1305 (reply, SHORT_TUNNEL_BUILD_RECORD_SIZE - 16,
|
||||||
noiseState.m_H, 32, replyKey, nonce, reply, SHORT_TUNNEL_BUILD_RECORD_SIZE, true)) // encrypt
|
noiseState.m_H, 32, replyKey, nonce, reply, SHORT_TUNNEL_BUILD_RECORD_SIZE, true)) // encrypt
|
||||||
{
|
{
|
||||||
|
@ -115,6 +115,10 @@ namespace i2p
|
|||||||
const size_t SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET = SHORT_REQUEST_RECORD_REQUEST_EXPIRATION_OFFSET + 4;
|
const size_t SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET = SHORT_REQUEST_RECORD_REQUEST_EXPIRATION_OFFSET + 4;
|
||||||
const size_t SHORT_REQUEST_RECORD_PADDING_OFFSET = SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET + 4;
|
const size_t SHORT_REQUEST_RECORD_PADDING_OFFSET = SHORT_REQUEST_RECORD_SEND_MSG_ID_OFFSET + 4;
|
||||||
const size_t SHORT_REQUEST_RECORD_CLEAR_TEXT_SIZE = 154;
|
const size_t SHORT_REQUEST_RECORD_CLEAR_TEXT_SIZE = 154;
|
||||||
|
|
||||||
|
// ShortResponseRecord
|
||||||
|
const size_t SHORT_RESPONSE_RECORD_OPTIONS_OFFSET = 0;
|
||||||
|
const size_t SHORT_RESPONSE_RECORD_RET_OFFSET = 201;
|
||||||
|
|
||||||
enum I2NPMessageType
|
enum I2NPMessageType
|
||||||
{
|
{
|
||||||
|
@ -79,7 +79,7 @@ namespace tunnel
|
|||||||
ShortECIESTunnelHopConfig (std::shared_ptr<const i2p::data::IdentityEx> r):
|
ShortECIESTunnelHopConfig (std::shared_ptr<const i2p::data::IdentityEx> r):
|
||||||
ECIESTunnelHopConfig (r) {};
|
ECIESTunnelHopConfig (r) {};
|
||||||
uint8_t GetRetCode (const uint8_t * records) const
|
uint8_t GetRetCode (const uint8_t * records) const
|
||||||
{ return (records + recordIndex*SHORT_TUNNEL_BUILD_RECORD_SIZE)[ECIES_BUILD_RESPONSE_RECORD_RET_OFFSET]; }; // TODO
|
{ return (records + recordIndex*SHORT_TUNNEL_BUILD_RECORD_SIZE)[SHORT_RESPONSE_RECORD_RET_OFFSET]; };
|
||||||
void CreateBuildRequestRecord (uint8_t * records, uint32_t replyMsgID);
|
void CreateBuildRequestRecord (uint8_t * records, uint32_t replyMsgID);
|
||||||
bool DecryptBuildResponseRecord (uint8_t * records) const;
|
bool DecryptBuildResponseRecord (uint8_t * records) const;
|
||||||
void DecryptRecord (uint8_t * records, int index) const override; // Chacha20
|
void DecryptRecord (uint8_t * records, int index) const override; // Chacha20
|
||||||
|
Loading…
x
Reference in New Issue
Block a user