From 8cf18fd2e3c995f14573672e0eff0e3208a53ecd Mon Sep 17 00:00:00 2001 From: hakunamtu Date: Mon, 5 Mar 2018 14:01:28 +0300 Subject: [PATCH] Making necessary changes to RouterInfo class --- libi2pd/RouterInfo.cpp | 27 +++++++++++++++++++++++---- libi2pd/RouterInfo.h | 2 ++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/libi2pd/RouterInfo.cpp b/libi2pd/RouterInfo.cpp index e9c2a384..52aa0bfb 100644 --- a/libi2pd/RouterInfo.cpp +++ b/libi2pd/RouterInfo.cpp @@ -34,14 +34,19 @@ namespace data ReadFromFile (); } - RouterInfo::RouterInfo (const uint8_t * buf, int len): - m_IsUpdated (true), m_IsUnreachable (false), m_SupportedTransports (0), m_Caps (0) + RouterInfo::RouterInfo (const uint8_t * buf, int len, bool checkSig): + m_IsUpdated (false), m_IsUnreachable (false), m_SupportedTransports (0), m_Caps (0) { m_Addresses = boost::make_shared(); // create empty list m_Buffer = new uint8_t[MAX_RI_BUFFER_SIZE]; memcpy (m_Buffer, buf, len); m_BufferLen = len; - ReadFromBuffer (true); + ReadFromBuffer (checkSig); + } + + RouterInfo::RouterInfo (const uint8_t * buf, int len): RouterInfo(buf, len, true) + { + m_IsUpdated = true; } RouterInfo::~RouterInfo () @@ -337,7 +342,7 @@ namespace data } bool RouterInfo::IsFamily(const std::string & fam) const { - return m_Family == fam; + return m_Family == fam; } void RouterInfo::ExtractCaps (const char * value) @@ -553,6 +558,20 @@ namespace data return bufbe64toh (buf + size) > m_Timestamp; } + const uint8_t * RouterInfo::LoadBuffer(const uint8_t *buf, size_t len) //TODO: error handling + { + m_BufferLen = len; + if (m_BufferLen < 40 || m_BufferLen > MAX_RI_BUFFER_SIZE) + { + LogPrint(eLogError, "RouterInfo: File", m_FullPath, " is malformed"); + return nullptr; + } + if (!m_Buffer) + m_Buffer = new uint8_t[MAX_RI_BUFFER_SIZE]; + memcpy(m_Buffer, buf, len); + return m_Buffer; + } + const uint8_t * RouterInfo::LoadBuffer () { if (!m_Buffer) diff --git a/libi2pd/RouterInfo.h b/libi2pd/RouterInfo.h index 09e2c015..d2e3b48c 100644 --- a/libi2pd/RouterInfo.h +++ b/libi2pd/RouterInfo.h @@ -120,6 +120,7 @@ namespace data RouterInfo (const std::string& fullPath); RouterInfo (const RouterInfo& ) = default; RouterInfo& operator=(const RouterInfo& ) = default; + RouterInfo (const uint8_t * buf, int len, bool); RouterInfo (const uint8_t * buf, int len); ~RouterInfo (); @@ -167,6 +168,7 @@ namespace data const uint8_t * GetBuffer () const { return m_Buffer; }; const uint8_t * LoadBuffer (); // load if necessary + const uint8_t * LoadBuffer(const uint8_t *buf, size_t len); //load from memory int GetBufferLen () const { return m_BufferLen; }; void CreateBuffer (const PrivateKeys& privateKeys);