From c7edc361060f82fc281905ddd89092d081e9f1ef Mon Sep 17 00:00:00 2001
From: orignal <i2porignal@yandex.ru>
Date: Thu, 12 Mar 2015 16:26:08 -0400
Subject: [PATCH] reduce memory usage

---
 NetDb.cpp      | 10 ++++++++--
 RouterInfo.cpp |  8 --------
 RouterInfo.h   |  4 ++--
 3 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/NetDb.cpp b/NetDb.cpp
index 1bb3b822..fbddb57f 100644
--- a/NetDb.cpp
+++ b/NetDb.cpp
@@ -356,6 +356,7 @@ namespace data
 					if (!r->IsUnreachable () && (!r->UsesIntroducer () || ts < r->GetTimestamp () + 3600*1000LL)) // 1 hour
 					{	
 						r->DeleteBuffer ();
+						r->ClearProperties (); // properties are not used for regular routers
 						m_RouterInfos[r->GetIdentHash ()] = r;
 						if (r->IsFloodfill ())
 							m_Floodfills.push_back (r);
@@ -566,8 +567,13 @@ namespace data
 				decompressor.MessageEnd();
 				uint8_t uncompressed[2048];
 				size_t uncomressedSize = decompressor.MaxRetrievable ();
-				decompressor.Get (uncompressed, uncomressedSize);
-				AddRouterInfo (buf + DATABASE_STORE_KEY_OFFSET, uncompressed, uncomressedSize);
+				if (uncomressedSize <= 2048)
+				{
+					decompressor.Get (uncompressed, uncomressedSize);
+					AddRouterInfo (buf + DATABASE_STORE_KEY_OFFSET, uncompressed, uncomressedSize);
+				}
+				else
+					LogPrint ("Invalid RouterInfo uncomressed length ", (int)uncomressedSize);
 			}
 			catch (CryptoPP::Exception& ex)
 			{
diff --git a/RouterInfo.cpp b/RouterInfo.cpp
index 56a9327a..e9105db1 100644
--- a/RouterInfo.cpp
+++ b/RouterInfo.cpp
@@ -553,14 +553,6 @@ namespace data
 		m_Properties[key] = value;
 	}	
 
-	const char * RouterInfo::GetProperty (const char * key) const
-	{
-		auto it = m_Properties.find (key);
-		if (it != m_Properties.end ())
-			return it->second.c_str ();
-		return 0;
-	}	
-
 	bool RouterInfo::IsFloodfill () const
 	{
 		return m_Caps & Caps::eFloodfill;
diff --git a/RouterInfo.h b/RouterInfo.h
index bf1a9dc6..1211a257 100644
--- a/RouterInfo.h
+++ b/RouterInfo.h
@@ -105,8 +105,8 @@ namespace data
 			void AddSSUAddress (const char * host, int port, const uint8_t * key, int mtu = 0);
 			bool AddIntroducer (const Address * address, uint32_t tag);
 			bool RemoveIntroducer (const boost::asio::ip::udp::endpoint& e);
-			void SetProperty (const char * key, const char * value);
-			const char * GetProperty (const char * key) const;
+			void SetProperty (const char * key, const char * value); // called from RouterContext only
+			void ClearProperties () { m_Properties.clear (); };
 			bool IsFloodfill () const;
 			bool IsNTCP (bool v4only = true) const;
 			bool IsSSU (bool v4only = true) const;