From 09c6faf9232935bdf9adb8e0e5974ca6a0d71e2b Mon Sep 17 00:00:00 2001 From: orignal Date: Fri, 3 Aug 2018 21:16:35 -0400 Subject: [PATCH] don't overwrite NTCP2 keys --- libi2pd/RouterContext.cpp | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/libi2pd/RouterContext.cpp b/libi2pd/RouterContext.cpp index d34acc57..a1ce6838 100644 --- a/libi2pd/RouterContext.cpp +++ b/libi2pd/RouterContext.cpp @@ -95,7 +95,7 @@ namespace i2p if (ntcp2) // TODO: should update routerInfo, but we ignore upublished NTCP2 addresses for now { - NewNTCP2Keys (); + if (!m_NTCP2Keys) NewNTCP2Keys (); UpdateNTCP2Address (true); } } @@ -473,7 +473,21 @@ namespace i2p m_Keys.FromBuffer (buf, len); delete[] buf; } - + // read NTCP2 keys if available + std::ifstream n2k (i2p::fs::DataDirPath (NTCP2_KEYS), std::ifstream::in | std::ifstream::binary); + if (n2k) + { + n2k.seekg (0, std::ios::end); + len = n2k.tellg(); + n2k.seekg (0, std::ios::beg); + if (len == sizeof (NTCP2PrivateKeys)) + { + m_NTCP2Keys.reset (new NTCP2PrivateKeys ()); + n2k.read ((char *)m_NTCP2Keys.get (), sizeof (NTCP2PrivateKeys)); + } + n2k.close (); + } + // read RouterInfo m_RouterInfo.SetRouterIdentity (GetIdentity ()); i2p::data::RouterInfo routerInfo(i2p::fs::DataDirPath (ROUTER_INFO)); if (!routerInfo.IsUnreachable ()) // router.info looks good @@ -499,24 +513,8 @@ namespace i2p bool ntcp2; i2p::config::GetOption("ntcp2.enabled", ntcp2); if (ntcp2) { - std::ifstream n2k (i2p::fs::DataDirPath (NTCP2_KEYS), std::ifstream::in | std::ifstream::binary); - if (n2k) - { - n2k.seekg (0, std::ios::end); - len = n2k.tellg(); - n2k.seekg (0, std::ios::beg); - if (len == sizeof (NTCP2PrivateKeys)) - { - m_NTCP2Keys.reset (new NTCP2PrivateKeys ()); - n2k.read ((char *)m_NTCP2Keys.get (), sizeof (NTCP2PrivateKeys)); - } - n2k.close (); - } - if (!m_NTCP2Keys) - { - NewNTCP2Keys (); - UpdateNTCP2Address (true); // enable NTCP2 - } + if (!m_NTCP2Keys) NewNTCP2Keys (); + UpdateNTCP2Address (true); // enable NTCP2 } else UpdateNTCP2Address (false); // disable NTCP2