mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-07 06:09:42 +00:00
CreateSessionMessage
This commit is contained in:
28
I2CP.cpp
28
I2CP.cpp
@@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <openssl/rand.h>
|
||||||
#include "I2PEndian.h"
|
#include "I2PEndian.h"
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
#include "Timestamp.h"
|
#include "Timestamp.h"
|
||||||
@@ -202,8 +203,31 @@ namespace client
|
|||||||
|
|
||||||
void I2CPSession::CreateSessionMessageHandler (const uint8_t * buf, size_t len)
|
void I2CPSession::CreateSessionMessageHandler (const uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
// TODO
|
auto identity = std::make_shared<i2p::data::IdentityEx>();
|
||||||
m_Destination = std::make_shared<I2CPDestination>(*this, nullptr, false);
|
size_t offset = identity->FromBuffer (buf, len);
|
||||||
|
uint16_t optionsSize = bufbe16toh (buf + offset);
|
||||||
|
// TODO: extract options
|
||||||
|
offset += optionsSize;
|
||||||
|
offset += 8; // date
|
||||||
|
if (identity->Verify (buf, offset, buf + offset)) // signature
|
||||||
|
{
|
||||||
|
m_Destination = std::make_shared<I2CPDestination>(*this, identity, false);
|
||||||
|
RAND_bytes ((uint8_t *)&m_SessionID, 2);
|
||||||
|
SendSessionStatusMessage (1); // created
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LogPrint (eLogError, "I2CP: create session signature verification falied");
|
||||||
|
SendSessionStatusMessage (3); // invalid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void I2CPSession::SendSessionStatusMessage (uint8_t status)
|
||||||
|
{
|
||||||
|
uint8_t buf[3];
|
||||||
|
htobe16buf (buf, m_SessionID);
|
||||||
|
buf[2] = status;
|
||||||
|
SendI2CPMessage (I2CP_SESSION_STATUS_MESSAGE, buf, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void I2CPSession::CreateLeaseSetMessageHandler (const uint8_t * buf, size_t len)
|
void I2CPSession::CreateLeaseSetMessageHandler (const uint8_t * buf, size_t len)
|
||||||
|
|||||||
3
I2CP.h
3
I2CP.h
@@ -29,6 +29,7 @@ namespace client
|
|||||||
const uint8_t I2CP_GET_DATE_MESSAGE = 32;
|
const uint8_t I2CP_GET_DATE_MESSAGE = 32;
|
||||||
const uint8_t I2CP_SET_DATE_MESSAGE = 33;
|
const uint8_t I2CP_SET_DATE_MESSAGE = 33;
|
||||||
const uint8_t I2CP_CREATE_SESSION_MESSAGE = 1;
|
const uint8_t I2CP_CREATE_SESSION_MESSAGE = 1;
|
||||||
|
const uint8_t I2CP_SESSION_STATUS_MESSAGE = 20;
|
||||||
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;
|
||||||
@@ -91,6 +92,8 @@ namespace client
|
|||||||
std::string ExtractString (const uint8_t * buf, size_t len);
|
std::string ExtractString (const uint8_t * buf, size_t len);
|
||||||
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);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
I2CPServer& m_Owner;
|
I2CPServer& m_Owner;
|
||||||
|
|||||||
Reference in New Issue
Block a user