diff --git a/I2NPProtocol.cpp b/I2NPProtocol.cpp index 9367220a..f0833986 100644 --- a/I2NPProtocol.cpp +++ b/I2NPProtocol.cpp @@ -200,7 +200,7 @@ namespace i2p msg->replyToken = 0; CryptoPP::Gzip compressor; - compressor.Put ((uint8_t *)context.GetRouterInfo ().GetBuffer (), context.GetRouterInfo ().GetBufferLen ()); + compressor.Put (context.GetRouterInfo ().GetBuffer (), context.GetRouterInfo ().GetBufferLen ()); compressor.MessageEnd(); // WARNING!!! MaxRetrievable() return uint64_t. Есть подозрение, что что-то не так int size = compressor.MaxRetrievable (); diff --git a/NetDb.cpp b/NetDb.cpp index c8b0dac2..3a9a7332 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -307,8 +307,7 @@ namespace data { if (it.second->IsUpdated ()) { - std::ofstream r (GetFilePath(fullDirectory, it.second), std::ofstream::binary); - r.write ((char *)it.second->GetBuffer (), it.second->GetBufferLen ()); + it.second->SaveToFile (GetFilePath(fullDirectory, it.second)); it.second->SetUpdated (false); count++; } diff --git a/RouterContext.cpp b/RouterContext.cpp index 727781f5..ac77ad2c 100644 --- a/RouterContext.cpp +++ b/RouterContext.cpp @@ -92,7 +92,6 @@ namespace i2p fk.write ((char *)&m_Keys, sizeof (m_Keys)); } - std::ofstream fi (i2p::util::filesystem::GetFullPath (ROUTER_INFO).c_str (), std::ofstream::binary | std::ofstream::out); - fi.write ((char *)m_RouterInfo.GetBuffer (), m_RouterInfo.GetBufferLen ()); + m_RouterInfo.SaveToFile (i2p::util::filesystem::GetFullPath (ROUTER_INFO)); } } diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 9ffe7edf..935691d0 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -53,7 +53,7 @@ namespace data return; } s.seekg(0, std::ios::beg); - s.read(m_Buffer,m_BufferLen); + s.read((char *)m_Buffer, m_BufferLen); ReadFromBuffer (); } else @@ -62,7 +62,7 @@ namespace data void RouterInfo::ReadFromBuffer () { - std::stringstream str (std::string (m_Buffer, m_BufferLen)); + std::stringstream str (std::string ((char *)m_Buffer, m_BufferLen)); ReadFromStream (str); // verify signature CryptoPP::DSA::PublicKey pubKey; @@ -322,6 +322,12 @@ namespace data i2p::context.Sign ((uint8_t *)m_Buffer, m_BufferLen, (uint8_t *)m_Buffer + m_BufferLen); m_BufferLen += 40; } + + void RouterInfo::SaveToFile (const std::string& fullPath) + { + std::ofstream f (fullPath, std::ofstream::binary | std::ofstream::out); + f.write ((char *)m_Buffer, m_BufferLen); + } size_t RouterInfo::ReadString (char * str, std::istream& s) { diff --git a/RouterInfo.h b/RouterInfo.h index 9ce9b006..d27c4829 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -13,6 +13,7 @@ namespace i2p { namespace data { + const int MAX_RI_BUFFER_SIZE = 2048; class RouterInfo: public RoutingDestination { public: @@ -95,14 +96,16 @@ namespace data void SetUnreachable (bool unreachable) { m_IsUnreachable = unreachable; }; bool IsUnreachable () const { return m_IsUnreachable; }; + + const uint8_t * GetBuffer () const { return m_Buffer; }; + int GetBufferLen () const { return m_BufferLen; }; void CreateBuffer (); void UpdateRoutingKey (); - const char * GetBuffer () const { return m_Buffer; }; - int GetBufferLen () const { return m_BufferLen; }; bool IsUpdated () const { return m_IsUpdated; }; void SetUpdated (bool updated) { m_IsUpdated = updated; }; + void SaveToFile (const std::string& fullPath); // implements RoutingDestination const IdentHash& GetIdentHash () const { return m_IdentHash; }; @@ -127,7 +130,7 @@ namespace data IdentHash m_IdentHash; RoutingKey m_RoutingKey; char m_IdentHashBase64[48], m_IdentHashAbbreviation[5]; - char m_Buffer[2048]; + uint8_t m_Buffer[MAX_RI_BUFFER_SIZE]; int m_BufferLen; uint64_t m_Timestamp; std::vector
m_Addresses;