From 624173f7cfd78ea953dc99bb8529db2cfe833ebf Mon Sep 17 00:00:00 2001 From: /dev/urandom Date: Sat, 27 Aug 2016 21:20:08 +0200 Subject: [PATCH] Update load/save code, set TTL to 1 hour and remove node storage. --- src/Components/Modules/BitMessage.cpp | 117 +------------------------- src/Components/Modules/BitMessage.hpp | 15 +--- 2 files changed, 7 insertions(+), 125 deletions(-) diff --git a/src/Components/Modules/BitMessage.cpp b/src/Components/Modules/BitMessage.cpp index 50954878..c4753f73 100644 --- a/src/Components/Modules/BitMessage.cpp +++ b/src/Components/Modules/BitMessage.cpp @@ -19,8 +19,9 @@ namespace Components Singleton = this; Logger::Print("Initializing BitMessage...\n"); - this->LoadObjectsAndKeys(); - this->LoadNodes(); + this->BMClient = new BitMRC(BITMESSAGE_OBJECT_STORAGE_FILENAME, BITMESSAGE_KEYS_FILENAME); + this->BMClient->init(); + this->BMClient->defaultTTL = 1 * 60 * 60; // 1 hour if (this->BMClient->PrivAddresses.empty()) { @@ -29,7 +30,7 @@ namespace Components // Generate a random address ready to use throw std::runtime_error("Failed to prepare source address for exception handling"); } - this->SaveObjectsAndKeys(); + this->BMClient->save(); } this->BMClient->start(); @@ -124,9 +125,6 @@ namespace Components Command::Add("bm_save", [](Command::Params) { Singleton->BMClient->save(BITMESSAGE_OBJECT_STORAGE_FILENAME); }); - Command::Add("bm_save_nodes", [](Command::Params) { - Singleton->SaveNodes(); - }); Command::Add("bm_address_public", [](Command::Params params) { if (params.Length() < 2) return; @@ -173,113 +171,6 @@ namespace Components BMClient->addAddr(myAddress); return true; } - - void BitMessage::LoadObjectsAndKeys() - { - Logger::Print("Loading BM objects and keys...\n"); - this->BMClient->load(BITMESSAGE_OBJECT_STORAGE_FILENAME); - } - - void BitMessage::SaveObjectsAndKeys() - { - Logger::Print("Saving BM objects and keys...\n"); - this->BMClient->save(BITMESSAGE_OBJECT_STORAGE_FILENAME); - } - - void BitMessage::SaveNodes() - { - Logger::Print("Saving BM nodes...\n"); - Proto::Node::List list; - std::vector nodeList; // keep track of dupes - - std::shared_lock mlock(Singleton->BMClient->mutex_nodes); - - for (auto& node : Singleton->BMClient->Nodes) - { - std::string nodeStr = String::VA("%s:%s", node->Ip.c_str(), node->Port.c_str()); - switch (node->state) { - case 0: // Not connected - break; - case 1: // Connecting - break; - case 2: // Connected - if (std::find(nodeList.begin(), nodeList.end(), nodeStr) == nodeList.end()) - { - // This allows us to keep track of duplicates - nodeList.push_back(nodeStr); - - DWORD ip = 0; - unsigned short port = 0; - sscanf_s(nodeStr.c_str(), "%d.%d.%d.%d:%hu", &ip, &ip + 1, &ip + 2, &ip + 3, &port); - - Network::Address address; - address.SetIP(ip); - address.SetPort(port); - - address.Serialize(list.add_address()); - - Logger::Print("Saved node: %s\n", address.GetCString()); - } - break; - case 3: // Reconnecting - break; - } - } - - mlock.unlock(); - - if (list.address_size() <= 0) - return; - - // Create directory if it doesn't exist yet - auto dirName = const_cast(BITMESSAGE_NODE_STORAGE_FILENAME.c_str()); - PathRemoveFileSpecA(dirName); - CreateDirectoryA(dirName, NULL); - - // Now write the actual file - Utils::IO::WriteFile(BITMESSAGE_NODE_STORAGE_FILENAME, list.SerializeAsString()); - } - - void BitMessage::LoadNodes() - { - Logger::Print("Loading BM nodes...\n"); - // Load nodes stored in file - Proto::Node::List list; - std::string nodes = IO::ReadFile(BITMESSAGE_NODE_STORAGE_FILENAME); - if (!nodes.empty() && list.ParseFromString(nodes)) - { - for (int i = 0; i < list.address_size(); ++i) - { - Network::Address address = list.address(i); - - this->BMClient->connectNode(new NodeConnection( - String::VA("%d.%d.%d.%d", address.GetIP().bytes[0], address.GetIP().bytes[1], address.GetIP().bytes[2], address.GetIP().bytes[3]), // urgh. - String::VA("%d", address.GetPort()), this->BMClient)); - } - } - - // Load default nodes if not connected to yet - for (auto addr : bitmessageKnownNodes) { - auto portStr = std::string(String::VA("%d", addr.second)); - if (!this->HasNode(addr.first, portStr)) - { - this->BMClient->connectNode(new NodeConnection(addr.first, portStr, this->BMClient)); - } - } - } - - bool BitMessage::HasNode(std::string ip, std::string port) - { - for (auto& node : this->BMClient->Nodes) - { - if (node->Ip == ip && node->Port == port) - { - return true; - } - } - - return false; - } } #endif \ No newline at end of file diff --git a/src/Components/Modules/BitMessage.hpp b/src/Components/Modules/BitMessage.hpp index 8eb67952..7f4c49cd 100644 --- a/src/Components/Modules/BitMessage.hpp +++ b/src/Components/Modules/BitMessage.hpp @@ -2,8 +2,8 @@ #ifndef DISABLE_BITMESSAGE -#define BITMESSAGE_NODE_STORAGE_FILENAME std::string("players/bmnodes.dat") -#define BITMESSAGE_OBJECT_STORAGE_FILENAME std::string("save") +#define BITMESSAGE_KEYS_FILENAME std::string("players/bmkey.dat") +#define BITMESSAGE_OBJECT_STORAGE_FILENAME std::string("players/bmstore.dat") static const std::map bitmessageKnownNodes = { // https://github.com/Bitmessage/PyBitmessage/blob/4622d952e47a7dbb3a90aa79f4d20163aa14b041/src/defaultKnownNodes.py#L15-L23 @@ -37,18 +37,9 @@ namespace Components #endif static BitMessage* Singleton; - BitMRC* BMClient = new BitMRC(); - - void SaveNodes(); - bool HasNode(std::string ip, std::string port); - - void SaveObjectsAndKeys(); + BitMRC* BMClient; private: - void LoadNodes(); - - void LoadObjectsAndKeys(); - bool InitAddr(); }; }