mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 21:37:17 +01:00
don't use explicit unreachable parameter anymore
This commit is contained in:
parent
3c10ba4511
commit
513dc2fcc5
|
@ -74,9 +74,6 @@ namespace i2p
|
||||||
if (host && host[0])
|
if (host && host[0])
|
||||||
i2p::context.UpdateAddress (boost::asio::ip::address::from_string (host));
|
i2p::context.UpdateAddress (boost::asio::ip::address::from_string (host));
|
||||||
|
|
||||||
if (i2p::util::config::GetArg("-unreachable", 0))
|
|
||||||
i2p::context.SetUnreachable ();
|
|
||||||
|
|
||||||
i2p::context.SetSupportsV6 (i2p::util::config::GetArg("-v6", 0));
|
i2p::context.SetSupportsV6 (i2p::util::config::GetArg("-v6", 0));
|
||||||
i2p::context.SetFloodfill (i2p::util::config::GetArg("-floodfill", 0));
|
i2p::context.SetFloodfill (i2p::util::config::GetArg("-floodfill", 0));
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,6 @@ Cmdline options
|
||||||
* --log= - Enable or disable logging to file. 1 for yes, 0 for no.
|
* --log= - Enable or disable logging to file. 1 for yes, 0 for no.
|
||||||
* --daemon= - Enable or disable daemon mode. 1 for yes, 0 for no.
|
* --daemon= - Enable or disable daemon mode. 1 for yes, 0 for no.
|
||||||
* --service= - 1 if uses system folders (/var/run/i2pd.pid, /var/log/i2pd.log, /var/lib/i2pd).
|
* --service= - 1 if uses system folders (/var/run/i2pd.pid, /var/log/i2pd.log, /var/lib/i2pd).
|
||||||
* --unreachable= - 1 if router is declared as unreachable and works through introducers.
|
|
||||||
* --v6= - 1 if supports communication through ipv6, off by default
|
* --v6= - 1 if supports communication through ipv6, off by default
|
||||||
* --floodfill= - 1 if router is floodfill, off by default
|
* --floodfill= - 1 if router is floodfill, off by default
|
||||||
* --httpproxyport= - The port to listen on (HTTP Proxy)
|
* --httpproxyport= - The port to listen on (HTTP Proxy)
|
||||||
|
|
|
@ -13,8 +13,8 @@ namespace i2p
|
||||||
RouterContext context;
|
RouterContext context;
|
||||||
|
|
||||||
RouterContext::RouterContext ():
|
RouterContext::RouterContext ():
|
||||||
m_LastUpdateTime (0), m_IsUnreachable (false), m_AcceptsTunnels (true),
|
m_LastUpdateTime (0), m_AcceptsTunnels (true), m_IsFloodfill (false),
|
||||||
m_IsFloodfill (false), m_StartupTime (0), m_Status (eRouterStatusOK )
|
m_StartupTime (0), m_Status (eRouterStatusOK )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,9 +119,13 @@ namespace i2p
|
||||||
UpdateRouterInfo ();
|
UpdateRouterInfo ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RouterContext::IsUnreachable () const
|
||||||
|
{
|
||||||
|
return m_RouterInfo.GetCaps () & i2p::data::RouterInfo::eUnreachable;
|
||||||
|
}
|
||||||
|
|
||||||
void RouterContext::SetUnreachable ()
|
void RouterContext::SetUnreachable ()
|
||||||
{
|
{
|
||||||
m_IsUnreachable = true;
|
|
||||||
// set caps
|
// set caps
|
||||||
m_RouterInfo.SetCaps (i2p::data::RouterInfo::eUnreachable | i2p::data::RouterInfo::eSSUTesting); // LU, B
|
m_RouterInfo.SetCaps (i2p::data::RouterInfo::eUnreachable | i2p::data::RouterInfo::eSSUTesting); // LU, B
|
||||||
// remove NTCP address
|
// remove NTCP address
|
||||||
|
@ -142,6 +146,36 @@ namespace i2p
|
||||||
UpdateRouterInfo ();
|
UpdateRouterInfo ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RouterContext::SetReachable ()
|
||||||
|
{
|
||||||
|
// update caps
|
||||||
|
uint8_t caps = m_RouterInfo.GetCaps ();
|
||||||
|
caps &= ~i2p::data::RouterInfo::eUnreachable;
|
||||||
|
caps |= i2p::data::RouterInfo::eReachable;
|
||||||
|
caps |= i2p::data::RouterInfo::eSSUIntroducer;
|
||||||
|
if (m_IsFloodfill)
|
||||||
|
caps |= i2p::data::RouterInfo::eFloodfill;
|
||||||
|
m_RouterInfo.SetCaps (caps);
|
||||||
|
|
||||||
|
// insert NTCP back
|
||||||
|
auto& addresses = m_RouterInfo.GetAddresses ();
|
||||||
|
for (size_t i = 0; i < addresses.size (); i++)
|
||||||
|
{
|
||||||
|
if (addresses[i].transportStyle == i2p::data::RouterInfo::eTransportSSU)
|
||||||
|
{
|
||||||
|
// insert NTCP address with host/port form SSU
|
||||||
|
m_RouterInfo.AddNTCPAddress (addresses[i].host.to_string ().c_str (), addresses[i].port);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// delete previous introducers
|
||||||
|
for (auto& addr : addresses)
|
||||||
|
addr.introducers.clear ();
|
||||||
|
|
||||||
|
// update
|
||||||
|
UpdateRouterInfo ();
|
||||||
|
}
|
||||||
|
|
||||||
void RouterContext::SetSupportsV6 (bool supportsV6)
|
void RouterContext::SetSupportsV6 (bool supportsV6)
|
||||||
{
|
{
|
||||||
if (supportsV6)
|
if (supportsV6)
|
||||||
|
@ -201,6 +235,9 @@ namespace i2p
|
||||||
m_RouterInfo.SetProperty ("coreVersion", I2P_VERSION);
|
m_RouterInfo.SetProperty ("coreVersion", I2P_VERSION);
|
||||||
m_RouterInfo.SetProperty ("router.version", I2P_VERSION);
|
m_RouterInfo.SetProperty ("router.version", I2P_VERSION);
|
||||||
|
|
||||||
|
if (IsUnreachable ())
|
||||||
|
SetReachable (); // we assume reachable until we discover firewall through peer tests
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,8 +47,9 @@ namespace i2p
|
||||||
void UpdateAddress (const boost::asio::ip::address& host); // called from SSU or Daemon
|
void UpdateAddress (const boost::asio::ip::address& host); // called from SSU or Daemon
|
||||||
bool AddIntroducer (const i2p::data::RouterInfo& routerInfo, uint32_t tag);
|
bool AddIntroducer (const i2p::data::RouterInfo& routerInfo, uint32_t tag);
|
||||||
void RemoveIntroducer (const boost::asio::ip::udp::endpoint& e);
|
void RemoveIntroducer (const boost::asio::ip::udp::endpoint& e);
|
||||||
bool IsUnreachable () const { return m_IsUnreachable || m_Status == eRouterStatusFirewalled; };
|
bool IsUnreachable () const;
|
||||||
void SetUnreachable ();
|
void SetUnreachable ();
|
||||||
|
void SetReachable ();
|
||||||
bool IsFloodfill () const { return m_IsFloodfill; };
|
bool IsFloodfill () const { return m_IsFloodfill; };
|
||||||
void SetFloodfill (bool floodfill);
|
void SetFloodfill (bool floodfill);
|
||||||
bool AcceptsTunnels () const { return m_AcceptsTunnels; };
|
bool AcceptsTunnels () const { return m_AcceptsTunnels; };
|
||||||
|
@ -81,7 +82,7 @@ namespace i2p
|
||||||
i2p::data::PrivateKeys m_Keys;
|
i2p::data::PrivateKeys m_Keys;
|
||||||
CryptoPP::AutoSeededRandomPool m_Rnd;
|
CryptoPP::AutoSeededRandomPool m_Rnd;
|
||||||
uint64_t m_LastUpdateTime;
|
uint64_t m_LastUpdateTime;
|
||||||
bool m_IsUnreachable, m_AcceptsTunnels, m_IsFloodfill;
|
bool m_AcceptsTunnels, m_IsFloodfill;
|
||||||
uint64_t m_StartupTime; // in seconds since epoch
|
uint64_t m_StartupTime; // in seconds since epoch
|
||||||
RouterStatus m_Status;
|
RouterStatus m_Status;
|
||||||
};
|
};
|
||||||
|
|
3
SSU.cpp
3
SSU.cpp
|
@ -427,7 +427,8 @@ namespace transport
|
||||||
if (ecode != boost::asio::error::operation_aborted)
|
if (ecode != boost::asio::error::operation_aborted)
|
||||||
{
|
{
|
||||||
// timeout expired
|
// timeout expired
|
||||||
if (!i2p::context.IsUnreachable ()) return; // we don't need introducers anymore
|
if (!i2p::context.GetStatus () != eRouterStatusFirewalled) return; // we don't need introducers anymore
|
||||||
|
if (!i2p::context.IsUnreachable ()) i2p::context.SetUnreachable ();
|
||||||
std::list<boost::asio::ip::udp::endpoint> newList;
|
std::list<boost::asio::ip::udp::endpoint> newList;
|
||||||
size_t numIntroducers = 0;
|
size_t numIntroducers = 0;
|
||||||
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
|
uint32_t ts = i2p::util::GetSecondsSinceEpoch ();
|
||||||
|
|
Loading…
Reference in a new issue