From 09a80ed6541ad69ad8a47c29cba14c056aea148d Mon Sep 17 00:00:00 2001 From: orignal Date: Sun, 29 May 2016 16:35:57 -0400 Subject: [PATCH] RequestVariableLeaseSetMessage --- I2CP.cpp | 17 +++++++++++++++-- I2CP.h | 13 ++++++++----- LeaseSet.cpp | 1 + LeaseSet.h | 5 ++++- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/I2CP.cpp b/I2CP.cpp index ee329d37..bb7c956b 100644 --- a/I2CP.cpp +++ b/I2CP.cpp @@ -2,6 +2,7 @@ #include "I2PEndian.h" #include "Log.h" #include "Timestamp.h" +#include "LeaseSet.h" #include "I2CP.h" namespace i2p @@ -14,13 +15,25 @@ namespace client { } + void I2CPDestination::CreateNewLeaseSet (std::vector > tunnels) + { + i2p::data::LocalLeaseSet ls (m_Identity, m_EncryptionPublicKey, tunnels); + uint8_t * leases = ls.GetLeases (); + leases[-1] = tunnels.size (); + htobe16buf (leases - 3, m_Owner.GetSessionID ()); + size_t l = 2/*sessionID*/ + 1/*num leases*/ + i2p::data::LEASE_SIZE*tunnels.size (); + m_Owner.SendI2CPMessage (I2CP_REQUEST_VARIABLE_LEASESET_MESSAGE, leases - 3, l); + + } + I2CPSession::I2CPSession (I2CPServer& owner, std::shared_ptr socket): m_Owner (owner), m_Socket (socket), - m_NextMessage (nullptr), m_NextMessageLen (0), m_NextMessageOffset (0) + m_NextMessage (nullptr), m_NextMessageLen (0), m_NextMessageOffset (0), + m_SessionID (0) { ReadProtocolByte (); } - + I2CPSession::~I2CPSession () { delete[] m_NextMessage; diff --git a/I2CP.h b/I2CP.h index f677b9ee..3de7d73e 100644 --- a/I2CP.h +++ b/I2CP.h @@ -21,7 +21,8 @@ namespace client const uint8_t I2CP_GET_DATE_MESSAGE = 32; const uint8_t I2CP_SET_DATE_MESSAGE = 33; const uint8_t I2CP_CREATE_SESSION_MESSAGE = 1; - + const uint8_t I2CP_REQUEST_VARIABLE_LEASESET_MESSAGE = 37; + class I2CPSession; class I2CPDestination: public LeaseSetDestination { @@ -38,7 +39,7 @@ namespace client // I2CP void HandleDataMessage (const uint8_t * buf, size_t len) { /* TODO */ }; - void CreateNewLeaseSet (std::vector > tunnels) { /* TODO */ }; + void CreateNewLeaseSet (std::vector > tunnels); private: @@ -55,6 +56,9 @@ namespace client I2CPSession (I2CPServer& owner, std::shared_ptr socket); ~I2CPSession (); + uint16_t GetSessionID () const { return m_SessionID; }; + void SendI2CPMessage (uint8_t type, const uint8_t * payload, size_t len); + // message handlers void GetDateMessageHandler (const uint8_t * buf, size_t len); void CreateSessionMessageHandler (const uint8_t * buf, size_t len); @@ -66,10 +70,8 @@ namespace client void HandleReceived (const boost::system::error_code& ecode, std::size_t bytes_transferred); void HandleNextMessage (const uint8_t * buf); void Terminate (); - - void SendI2CPMessage (uint8_t type, const uint8_t * payload, size_t len); + void HandleI2CPMessageSent (const boost::system::error_code& ecode, std::size_t bytes_transferred, const uint8_t * buf); - std::string ExtractString (const uint8_t * buf, size_t len); size_t PutString (uint8_t * buf, size_t len, const std::string& str); @@ -81,6 +83,7 @@ namespace client size_t m_NextMessageLen, m_NextMessageOffset; std::shared_ptr m_Destination; + uint16_t m_SessionID; }; typedef void (I2CPSession::*I2CPMessageHandler)(const uint8_t * buf, size_t len); diff --git a/LeaseSet.cpp b/LeaseSet.cpp index 5efe2b16..20861677 100644 --- a/LeaseSet.cpp +++ b/LeaseSet.cpp @@ -213,6 +213,7 @@ namespace data m_Buffer[offset] = num; offset++; // leases + m_Leases = m_Buffer + offset; auto currentTime = i2p::util::GetMillisecondsSinceEpoch (); for (int i = 0; i < num; i++) { diff --git a/LeaseSet.h b/LeaseSet.h index 289ae25c..6688fbf8 100644 --- a/LeaseSet.h +++ b/LeaseSet.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "Identity.h" @@ -94,6 +95,8 @@ namespace data uint8_t * GetSignature () { return m_Buffer + m_BufferLen - GetSignatureLen (); }; size_t GetBufferLen () const { return m_BufferLen; }; size_t GetSignatureLen () const { return m_Identity->GetSignatureLen (); }; + uint8_t * GetLeases () { return m_Leases; }; + const IdentHash& GetIdentHash () const { return m_Identity->GetIdentHash (); }; bool IsExpired () const; bool operator== (const LeaseSet& other) const @@ -104,7 +107,7 @@ namespace data uint64_t m_ExpirationTime; // in milliseconds std::shared_ptr m_Identity; - uint8_t * m_Buffer; + uint8_t * m_Buffer, * m_Leases; size_t m_BufferLen; }; }