Browse Source

CreateSessionMessage

pull/509/merge
orignal 9 years ago
parent
commit
eeffcea69e
  1. 28
      I2CP.cpp
  2. 3
      I2CP.h

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

@ -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;

Loading…
Cancel
Save