mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-02-02 11:04:00 +01:00
remove dead routers
This commit is contained in:
parent
6341b10556
commit
5d9f292506
|
@ -9,6 +9,14 @@ namespace i2p
|
||||||
{
|
{
|
||||||
namespace data
|
namespace data
|
||||||
{
|
{
|
||||||
|
Identity& Identity::operator=(const Keys& keys)
|
||||||
|
{
|
||||||
|
// copy public and signing keys together
|
||||||
|
memcpy (publicKey, keys.publicKey, sizeof (publicKey) + sizeof (signingKey));
|
||||||
|
memset (certificate, 0, sizeof (certificate));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
IdentHash CalculateIdentHash (const Identity& identity)
|
IdentHash CalculateIdentHash (const Identity& identity)
|
||||||
{
|
{
|
||||||
IdentHash hash;
|
IdentHash hash;
|
||||||
|
|
|
@ -23,6 +23,8 @@ namespace data
|
||||||
uint8_t publicKey[256];
|
uint8_t publicKey[256];
|
||||||
uint8_t signingKey[128];
|
uint8_t signingKey[128];
|
||||||
uint8_t certificate[3];
|
uint8_t certificate[3];
|
||||||
|
|
||||||
|
Identity& operator=(const Keys& keys);
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
|
@ -20,12 +20,10 @@ namespace i2p
|
||||||
{
|
{
|
||||||
namespace ntcp
|
namespace ntcp
|
||||||
{
|
{
|
||||||
NTCPSession::NTCPSession (boost::asio::io_service& service, i2p::data::RouterInfo * in_RemoteRouterInfo):
|
NTCPSession::NTCPSession (boost::asio::io_service& service, i2p::data::RouterInfo& in_RemoteRouterInfo):
|
||||||
m_Socket (service), m_TerminationTimer (service), m_IsEstablished (false),
|
m_Socket (service), m_TerminationTimer (service), m_IsEstablished (false),
|
||||||
m_ReceiveBufferOffset (0), m_NextMessage (nullptr)
|
m_RemoteRouterInfo (in_RemoteRouterInfo), m_ReceiveBufferOffset (0), m_NextMessage (nullptr)
|
||||||
{
|
{
|
||||||
if (in_RemoteRouterInfo)
|
|
||||||
m_RemoteRouterInfo = *in_RemoteRouterInfo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NTCPSession::CreateAESKey (uint8_t * pubKey, uint8_t * aesKey)
|
void NTCPSession::CreateAESKey (uint8_t * pubKey, uint8_t * aesKey)
|
||||||
|
@ -521,7 +519,8 @@ namespace ntcp
|
||||||
|
|
||||||
|
|
||||||
NTCPClient::NTCPClient (boost::asio::io_service& service, const char * address,
|
NTCPClient::NTCPClient (boost::asio::io_service& service, const char * address,
|
||||||
int port, i2p::data::RouterInfo& in_RouterInfo): NTCPSession (service, &in_RouterInfo),
|
int port, i2p::data::RouterInfo& in_RouterInfo):
|
||||||
|
NTCPSession (service, in_RouterInfo),
|
||||||
m_Endpoint (boost::asio::ip::address::from_string (address), port)
|
m_Endpoint (boost::asio::ip::address::from_string (address), port)
|
||||||
{
|
{
|
||||||
Connect ();
|
Connect ();
|
||||||
|
|
|
@ -66,7 +66,7 @@ namespace ntcp
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
NTCPSession (boost::asio::io_service& service, i2p::data::RouterInfo * in_RemoteRouterInfo = 0);
|
NTCPSession (boost::asio::io_service& service, i2p::data::RouterInfo& in_RemoteRouterInfo);
|
||||||
virtual ~NTCPSession () {};
|
virtual ~NTCPSession () {};
|
||||||
|
|
||||||
boost::asio::ip::tcp::socket& GetSocket () { return m_Socket; };
|
boost::asio::ip::tcp::socket& GetSocket () { return m_Socket; };
|
||||||
|
@ -126,7 +126,7 @@ namespace ntcp
|
||||||
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption m_Encryption;
|
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption m_Encryption;
|
||||||
CryptoPP::Adler32 m_Adler;
|
CryptoPP::Adler32 m_Adler;
|
||||||
|
|
||||||
i2p::data::RouterInfo m_RemoteRouterInfo;
|
i2p::data::RouterInfo& m_RemoteRouterInfo;
|
||||||
|
|
||||||
NTCPPhase1 m_Phase1;
|
NTCPPhase1 m_Phase1;
|
||||||
NTCPPhase2 m_Phase2;
|
NTCPPhase2 m_Phase2;
|
||||||
|
@ -163,11 +163,16 @@ namespace ntcp
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
NTCPServerConnection (boost::asio::io_service& service): NTCPSession (service) {};
|
NTCPServerConnection (boost::asio::io_service& service):
|
||||||
|
NTCPSession (service, m_DummyRemoteRouterInfo) {};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual void Connected ();
|
virtual void Connected ();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
i2p::data::RouterInfo m_DummyRemoteRouterInfo;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
39
NetDb.cpp
39
NetDb.cpp
|
@ -129,6 +129,15 @@ namespace data
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LeaseSet * NetDb::FindLeaseSet (const IdentHash& destination) const
|
||||||
|
{
|
||||||
|
auto it = m_LeaseSets.find (destination);
|
||||||
|
if (it != m_LeaseSets.end ())
|
||||||
|
return it->second;
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
void NetDb::Load (const char * directory)
|
void NetDb::Load (const char * directory)
|
||||||
{
|
{
|
||||||
boost::filesystem::path p (directory);
|
boost::filesystem::path p (directory);
|
||||||
|
@ -156,19 +165,36 @@ namespace data
|
||||||
|
|
||||||
void NetDb::SaveUpdated (const char * directory)
|
void NetDb::SaveUpdated (const char * directory)
|
||||||
{
|
{
|
||||||
int count = 0;
|
auto GetFilePath = [](const char * directory, const RouterInfo * routerInfo)
|
||||||
|
{
|
||||||
|
return std::string (directory) + "/r" +
|
||||||
|
routerInfo->GetIdentHashBase64 ()[0] + "/routerInfo-" +
|
||||||
|
routerInfo->GetIdentHashBase64 () + ".dat";
|
||||||
|
};
|
||||||
|
|
||||||
|
int count = 0, deletedCount = 0;
|
||||||
for (auto it: m_RouterInfos)
|
for (auto it: m_RouterInfos)
|
||||||
|
{
|
||||||
if (it.second->IsUpdated ())
|
if (it.second->IsUpdated ())
|
||||||
{
|
{
|
||||||
std::ofstream r (std::string (directory) + "/r" +
|
std::ofstream r (GetFilePath(directory, it.second));
|
||||||
it.second->GetIdentHashBase64 ()[0] + "/routerInfo-" +
|
|
||||||
it.second->GetIdentHashBase64 () + ".dat");
|
|
||||||
r.write ((char *)it.second->GetBuffer (), it.second->GetBufferLen ());
|
r.write ((char *)it.second->GetBuffer (), it.second->GetBufferLen ());
|
||||||
it.second->SetUpdated (false);
|
it.second->SetUpdated (false);
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
else if (it.second->IsUnreachable ())
|
||||||
|
{
|
||||||
|
if (boost::filesystem::exists (GetFilePath (directory, it.second)))
|
||||||
|
{
|
||||||
|
boost::filesystem::remove (GetFilePath (directory, it.second));
|
||||||
|
deletedCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (count > 0)
|
if (count > 0)
|
||||||
LogPrint (count," new/updated routers saved");
|
LogPrint (count," new/updated routers saved");
|
||||||
|
if (deletedCount > 0)
|
||||||
|
LogPrint (deletedCount," routers deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetDb::RequestDestination (const char * b32, const uint8_t * router)
|
void NetDb::RequestDestination (const char * b32, const uint8_t * router)
|
||||||
|
@ -197,6 +223,11 @@ namespace data
|
||||||
LogPrint ("No outbound tunnels found");
|
LogPrint ("No outbound tunnels found");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetDb::RequestDestination (const IdentHash& destination)
|
||||||
|
{
|
||||||
|
RequestDestination ((const uint8_t *)destination, GetRandomNTCPRouter (true)->GetIdentHash ());
|
||||||
|
}
|
||||||
|
|
||||||
void NetDb::HandleDatabaseStoreMsg (uint8_t * buf, size_t len)
|
void NetDb::HandleDatabaseStoreMsg (uint8_t * buf, size_t len)
|
||||||
{
|
{
|
||||||
I2NPDatabaseStoreMsg * msg = (I2NPDatabaseStoreMsg *)buf;
|
I2NPDatabaseStoreMsg * msg = (I2NPDatabaseStoreMsg *)buf;
|
||||||
|
|
3
NetDb.h
3
NetDb.h
|
@ -27,9 +27,12 @@ namespace data
|
||||||
void AddRouterInfo (uint8_t * buf, int len);
|
void AddRouterInfo (uint8_t * buf, int len);
|
||||||
void AddLeaseSet (uint8_t * buf, int len);
|
void AddLeaseSet (uint8_t * buf, int len);
|
||||||
RouterInfo * FindRouter (const IdentHash& ident) const;
|
RouterInfo * FindRouter (const IdentHash& ident) const;
|
||||||
|
LeaseSet * FindLeaseSet (const IdentHash& destination) const;
|
||||||
|
|
||||||
void RequestDestination (const char * b32, const uint8_t * router); // in base32
|
void RequestDestination (const char * b32, const uint8_t * router); // in base32
|
||||||
void RequestDestination (const uint8_t * destination, const uint8_t * router);
|
void RequestDestination (const uint8_t * destination, const uint8_t * router);
|
||||||
|
void RequestDestination (const IdentHash& destination);
|
||||||
|
|
||||||
void HandleDatabaseStoreMsg (uint8_t * buf, size_t len);
|
void HandleDatabaseStoreMsg (uint8_t * buf, size_t len);
|
||||||
void HandleDatabaseSearchReplyMsg (I2NPMessage * msg);
|
void HandleDatabaseSearchReplyMsg (I2NPMessage * msg);
|
||||||
|
|
||||||
|
|
|
@ -26,9 +26,7 @@ namespace i2p
|
||||||
CryptoPP::Integer (m_Keys.signingPrivateKey, 20));
|
CryptoPP::Integer (m_Keys.signingPrivateKey, 20));
|
||||||
|
|
||||||
i2p::data::Identity ident;
|
i2p::data::Identity ident;
|
||||||
// copy public and signing keys together
|
ident = m_Keys;
|
||||||
memcpy (ident.publicKey, m_Keys.publicKey, sizeof (ident.publicKey) + sizeof (ident.signingKey));
|
|
||||||
memset (ident.certificate, 0, sizeof (ident.certificate));
|
|
||||||
m_RouterInfo.SetRouterIdentity (ident);
|
m_RouterInfo.SetRouterIdentity (ident);
|
||||||
|
|
||||||
m_RouterInfo.AddNTCPAddress ("127.0.0.1", 17007); // TODO:
|
m_RouterInfo.AddNTCPAddress ("127.0.0.1", 17007); // TODO:
|
||||||
|
|
Loading…
Reference in a new issue