From 26de037e9491d4b4ca4de70c840d8e062e3d9d35 Mon Sep 17 00:00:00 2001
From: weekendi2p <weekendi2p@i2pmail.org>
Date: Tue, 26 Apr 2016 21:48:42 +0200
Subject: [PATCH 1/6] show family name in webiface

---
 HTTPServer.cpp    |  1 +
 RouterContext.cpp | 11 +++++++++++
 RouterContext.h   |  2 ++
 3 files changed, 14 insertions(+)

diff --git a/HTTPServer.cpp b/HTTPServer.cpp
index 6c2c6112..1c268613 100644
--- a/HTTPServer.cpp
+++ b/HTTPServer.cpp
@@ -405,6 +405,7 @@ namespace util
 
 	void HTTPConnection::FillContent (std::stringstream& s)
 	{
+		s << "<b>Family:</b> " << i2p::context.GetFamilyString() << "<br>\r\n";
 		s << "<b>Uptime:</b> " << boost::posix_time::to_simple_string (
 			boost::posix_time::time_duration (boost::posix_time::seconds (
 			i2p::context.GetUptime ()))) << "<br>\r\n";
diff --git a/RouterContext.cpp b/RouterContext.cpp
index f35d8426..4cc45b80 100644
--- a/RouterContext.cpp
+++ b/RouterContext.cpp
@@ -149,18 +149,29 @@ namespace i2p
 		UpdateRouterInfo ();
 	}
 
+	std::string RouterContext::GetFamilyString () const
+	{
+		return m_FamilyString;
+	}
+
 	void RouterContext::SetFamily (const std::string& family)
 	{
+
 		std::string signature;
 		if (family.length () > 0)
+		{
+			m_FamilyString = family;
 			signature = i2p::data::CreateFamilySignature (family, GetIdentHash ());
+		}
 		if (signature.length () > 0)
 		{
+			m_FamilyString = "<none>";
 			m_RouterInfo.SetProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY, family);
 			m_RouterInfo.SetProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY_SIG, signature);
 		}	
 		else
 		{
+			m_FamilyString = "<???>";
 			m_RouterInfo.DeleteProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY);
 			m_RouterInfo.DeleteProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY_SIG);
 		}	
diff --git a/RouterContext.h b/RouterContext.h
index 9766c66e..f2ece677 100644
--- a/RouterContext.h
+++ b/RouterContext.h
@@ -59,6 +59,7 @@ namespace i2p
 			bool IsFloodfill () const { return m_IsFloodfill; };	
 			void SetFloodfill (bool floodfill);	
 			void SetFamily (const std::string& family);
+			std::string GetFamilyString () const { return m_FamilyString; };
 			void SetBandwidth (int limit); /* in kilobytes */
 			void SetBandwidth (char L); /* by letter */
 			bool AcceptsTunnels () const { return m_AcceptsTunnels; };
@@ -100,6 +101,7 @@ namespace i2p
 			i2p::data::PrivateKeys m_Keys; 
 			uint64_t m_LastUpdateTime;
 			bool m_AcceptsTunnels, m_IsFloodfill;
+			std::string m_FamilyString;
 			uint64_t m_StartupTime; // in seconds since epoch
 			uint32_t m_BandwidthLimit; // allowed bandwidth
 			RouterStatus m_Status;

From 6e8303c5a420b06a0247dc52603a82195ee73923 Mon Sep 17 00:00:00 2001
From: weekendi2p <weekendi2p@i2pmail.org>
Date: Tue, 26 Apr 2016 21:59:28 +0200
Subject: [PATCH 2/6] wip

---
 RouterContext.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/RouterContext.h b/RouterContext.h
index f2ece677..fad5203d 100644
--- a/RouterContext.h
+++ b/RouterContext.h
@@ -59,7 +59,7 @@ namespace i2p
 			bool IsFloodfill () const { return m_IsFloodfill; };	
 			void SetFloodfill (bool floodfill);	
 			void SetFamily (const std::string& family);
-			std::string GetFamilyString () const { return m_FamilyString; };
+			//std::string GetFamilyString () const { return m_FamilyString; };
 			void SetBandwidth (int limit); /* in kilobytes */
 			void SetBandwidth (char L); /* by letter */
 			bool AcceptsTunnels () const { return m_AcceptsTunnels; };

From 8dc77c0e804ee03a2f4218375b10ac581dbfc174 Mon Sep 17 00:00:00 2001
From: weekendi2p <weekendi2p@i2pmail.org>
Date: Tue, 26 Apr 2016 22:05:27 +0200
Subject: [PATCH 3/6] wip

---
 RouterContext.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/RouterContext.h b/RouterContext.h
index fad5203d..1b0f7ed2 100644
--- a/RouterContext.h
+++ b/RouterContext.h
@@ -59,7 +59,7 @@ namespace i2p
 			bool IsFloodfill () const { return m_IsFloodfill; };	
 			void SetFloodfill (bool floodfill);	
 			void SetFamily (const std::string& family);
-			//std::string GetFamilyString () const { return m_FamilyString; };
+			std::string GetFamilyString () const;
 			void SetBandwidth (int limit); /* in kilobytes */
 			void SetBandwidth (char L); /* by letter */
 			bool AcceptsTunnels () const { return m_AcceptsTunnels; };

From cfbea33c99c0594cb810560ab780d3de3bbf6959 Mon Sep 17 00:00:00 2001
From: weekendi2p <weekendi2p@i2pmail.org>
Date: Tue, 26 Apr 2016 22:34:12 +0200
Subject: [PATCH 4/6] family

---
 RouterContext.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/RouterContext.cpp b/RouterContext.cpp
index 4cc45b80..c6cac3ee 100644
--- a/RouterContext.cpp
+++ b/RouterContext.cpp
@@ -157,21 +157,22 @@ namespace i2p
 	void RouterContext::SetFamily (const std::string& family)
 	{
 
+		m_FamilyString = family;
+		if (m_FamilyString.length() == 0)
+			m_FamilyString = "&lt;undefined&gt;
+
 		std::string signature;
 		if (family.length () > 0)
 		{
-			m_FamilyString = family;
 			signature = i2p::data::CreateFamilySignature (family, GetIdentHash ());
 		}
 		if (signature.length () > 0)
 		{
-			m_FamilyString = "<none>";
 			m_RouterInfo.SetProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY, family);
 			m_RouterInfo.SetProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY_SIG, signature);
 		}	
 		else
 		{
-			m_FamilyString = "<???>";
 			m_RouterInfo.DeleteProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY);
 			m_RouterInfo.DeleteProperty (i2p::data::ROUTER_INFO_PROPERTY_FAMILY_SIG);
 		}	

From 67343b4a272090ebb2c95d6149cf9bfa3e5fe22d Mon Sep 17 00:00:00 2001
From: weekendi2p <weekendi2p@i2pmail.org>
Date: Tue, 26 Apr 2016 22:37:53 +0200
Subject: [PATCH 5/6] typo

---
 RouterContext.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/RouterContext.cpp b/RouterContext.cpp
index c6cac3ee..4cdf13fe 100644
--- a/RouterContext.cpp
+++ b/RouterContext.cpp
@@ -159,7 +159,7 @@ namespace i2p
 
 		m_FamilyString = family;
 		if (m_FamilyString.length() == 0)
-			m_FamilyString = "&lt;undefined&gt;
+			m_FamilyString = "&lt;undefined&gt;";
 
 		std::string signature;
 		if (family.length () > 0)

From 3cc8bcf8d511b3c13a4af77015a754d27528c028 Mon Sep 17 00:00:00 2001
From: weekendi2p <weekendi2p@i2pmail.org>
Date: Tue, 26 Apr 2016 23:06:45 +0200
Subject: [PATCH 6/6] shows family name in webiface (moved under status line)

---
 HTTPServer.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/HTTPServer.cpp b/HTTPServer.cpp
index 1c268613..08b67e22 100644
--- a/HTTPServer.cpp
+++ b/HTTPServer.cpp
@@ -405,7 +405,6 @@ namespace util
 
 	void HTTPConnection::FillContent (std::stringstream& s)
 	{
-		s << "<b>Family:</b> " << i2p::context.GetFamilyString() << "<br>\r\n";
 		s << "<b>Uptime:</b> " << boost::posix_time::to_simple_string (
 			boost::posix_time::time_duration (boost::posix_time::seconds (
 			i2p::context.GetUptime ()))) << "<br>\r\n";
@@ -418,6 +417,7 @@ namespace util
 			default: s << "Unknown";
 		} 
 		s << "<br>\r\n";
+		s << "<b>Family:</b> " << i2p::context.GetFamilyString() << "<br>\r\n";
 		s << "<b>Tunnel creation success rate:</b> " << i2p::tunnel::tunnels.GetTunnelCreationSuccessRate () << "%<br>\r\n";
 		s << "<b>Received:</b> ";
 		s << std::fixed << std::setprecision(2);