From c0482319e5a412c5d18345486709c3bf68e258e3 Mon Sep 17 00:00:00 2001
From: orignal <i2porignal@yandex.ru>
Date: Thu, 30 Oct 2014 10:07:39 -0400
Subject: [PATCH] always specify mtu for ipv6 address

---
 RouterContext.cpp |  2 +-
 RouterInfo.cpp    | 12 +++++++++++-
 RouterInfo.h      |  2 +-
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/RouterContext.cpp b/RouterContext.cpp
index 94d73081..9e17af0e 100644
--- a/RouterContext.cpp
+++ b/RouterContext.cpp
@@ -162,7 +162,7 @@ namespace i2p
 		{
 			// create new address
 			m_RouterInfo.AddNTCPAddress (host.to_string ().c_str (), port);
-			m_RouterInfo.AddSSUAddress (host.to_string ().c_str (), port, GetIdentHash ()); // TODO
+			m_RouterInfo.AddSSUAddress (host.to_string ().c_str (), port, GetIdentHash (), 1472); // TODO
 			updated = true;
 		}
 		if (updated)
diff --git a/RouterInfo.cpp b/RouterInfo.cpp
index a782c219..0b7fc714 100644
--- a/RouterInfo.cpp
+++ b/RouterInfo.cpp
@@ -374,6 +374,14 @@ namespace data
 				value[l] = 0;
 				WriteString (value, properties);
 				properties << ';';
+				// write mtu
+				if (address.mtu)
+				{
+					WriteString ("mtu", properties);
+					properties << '=';
+					WriteString (boost::lexical_cast<std::string>(address.mtu), properties);
+					properties << ';';
+				}	
 			}	
 			WriteString ("port", properties);
 			properties << '=';
@@ -466,11 +474,12 @@ namespace data
 		addr.transportStyle = eTransportNTCP;
 		addr.cost = 2;
 		addr.date = 0;
+		addr.mtu = 0;
 		m_Addresses.push_back(addr);	
 		m_SupportedTransports |= addr.host.is_v6 () ? eNTCPV6 : eNTCPV4;
 	}	
 
-	void RouterInfo::AddSSUAddress (const char * host, int port, const uint8_t * key)
+	void RouterInfo::AddSSUAddress (const char * host, int port, const uint8_t * key, int mtu)
 	{
 		Address addr;
 		addr.host = boost::asio::ip::address::from_string (host);
@@ -478,6 +487,7 @@ namespace data
 		addr.transportStyle = eTransportSSU;
 		addr.cost = 10; // NTCP should have priority over SSU
 		addr.date = 0;
+		addr.mtu = mtu; 
 		memcpy (addr.key, key, 32);
 		m_Addresses.push_back(addr);	
 		m_SupportedTransports |= addr.host.is_v6 () ? eNTCPV6 : eSSUV4;
diff --git a/RouterInfo.h b/RouterInfo.h
index 75cdd51b..c33a5bb2 100644
--- a/RouterInfo.h
+++ b/RouterInfo.h
@@ -101,7 +101,7 @@ namespace data
 			const Address * GetSSUV6Address () const;
 			
 			void AddNTCPAddress (const char * host, int port);
-			void AddSSUAddress (const char * host, int port, const uint8_t * key);
+			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);