From f728e6016ba275577b7306bf61f42a89754f731b Mon Sep 17 00:00:00 2001 From: jeff Date: Sat, 25 Jan 2020 11:28:07 -0500 Subject: [PATCH] router version --- llarp/CMakeLists.txt | 1 + llarp/constants/version.cpp.in | 3 +++ llarp/constants/version.hpp | 9 +++++---- llarp/router/router.cpp | 5 +++++ llarp/router_contact.cpp | 24 +++++++++++++++++++++--- llarp/router_contact.hpp | 2 ++ 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/llarp/CMakeLists.txt b/llarp/CMakeLists.txt index 9eb2b7801..ca1d6eeb9 100644 --- a/llarp/CMakeLists.txt +++ b/llarp/CMakeLists.txt @@ -214,6 +214,7 @@ set(LIB_SRC router/router.cpp router_contact.cpp router_id.cpp + router_version.cpp routing/dht_message.cpp routing/handler.cpp routing/message_parser.cpp diff --git a/llarp/constants/version.cpp.in b/llarp/constants/version.cpp.in index 2ff04f380..f5bec8720 100644 --- a/llarp/constants/version.cpp.in +++ b/llarp/constants/version.cpp.in @@ -1,6 +1,8 @@ #include #include +#include +// clang-format off #define LLARP_STRINGIFY2(val) #val #define LLARP_STRINGIFY(val) LLARP_STRINGIFY2(val) @@ -10,6 +12,7 @@ namespace llarp { const std::array VERSION{{LLARP_VERSION_MAJ, LLARP_VERSION_MIN, LLARP_VERSION_PATCH}}; + const std::array ROUTER_VERSION{{LLARP_PROTO_VERSION, LLARP_VERSION_MAJ, LLARP_VERSION_MIN, LLARP_VERSION_PATCH}}; const char* const VERSION_STR = LLARP_VERSION_STR; const char* const VERSION_TAG = "@VERSIONTAG@"; const char* const VERSION_FULL = LLARP_NAME "-" LLARP_VERSION_STR "-@VERSIONTAG@"; diff --git a/llarp/constants/version.hpp b/llarp/constants/version.hpp index 7fb415ca1..2b8d4a60b 100644 --- a/llarp/constants/version.hpp +++ b/llarp/constants/version.hpp @@ -6,10 +6,11 @@ namespace llarp { // Given a full lokinet version of: lokinet-1.2.3-abc these are: - extern const std::array< uint16_t, 3 > VERSION; // [1, 2, 3] - extern const char* const VERSION_STR; // "1.2.3" - extern const char* const VERSION_TAG; // "abc" - extern const char* const VERSION_FULL; // "lokinet-1.2.3-abc" + extern const std::array< uint16_t, 3 > VERSION; // [1, 2, 3] + extern const std::array< uint64_t, 4 > ROUTER_VERSION; // [proto, 1, 2, 3] + extern const char* const VERSION_STR; // "1.2.3" + extern const char* const VERSION_TAG; // "abc" + extern const char* const VERSION_FULL; // "lokinet-1.2.3-abc" extern const char* const RELEASE_MOTTO; extern const char* const DEFAULT_NETID; diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index da526ccf4..9846fabe9 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -919,6 +919,11 @@ namespace llarp // set public signing key _rc.pubkey = seckey_topublic(identity()); + // set router version if service node + if(IsServiceNode()) + { + _rc.routerVersion = RouterVersion(llarp::ROUTER_VERSION); + } AddressInfo ai; _linkManager.ForEachInboundLink([&](LinkLayer_ptr link) { diff --git a/llarp/router_contact.cpp b/llarp/router_contact.cpp index 3580abd40..b0530a558 100644 --- a/llarp/router_contact.cpp +++ b/llarp/router_contact.cpp @@ -126,7 +126,12 @@ namespace llarp return false; if(!enckey.BEncode(buf)) return false; - + // write router version if present + if(routerVersion.has_value()) + { + if(not BEncodeWriteDictEntry("r", routerVersion.value(), buf)) + return false; + } /* write last updated */ if(!bencode_write_bytestring(buf, "u", 1)) return false; @@ -160,7 +165,8 @@ namespace llarp nickname.Zero(); enckey.Zero(); pubkey.Zero(); - last_updated = 0; + routerVersion = absl::optional< RouterVersion >{}; + last_updated = 0; } util::StatusObject @@ -176,7 +182,10 @@ namespace llarp { obj["nickname"] = Nick(); } - + if(routerVersion.has_value()) + { + obj["routerVersion"] = routerVersion->ToString(); + } return obj; } @@ -193,6 +202,15 @@ namespace llarp if(!BEncodeMaybeReadDictEntry("k", pubkey, read, key, buf)) return false; + if(key == "r") + { + RouterVersion r; + if(not r.BDecode(buf)) + return false; + routerVersion = r; + return true; + } + if(key == "n") { llarp_buffer_t strbuf; diff --git a/llarp/router_contact.hpp b/llarp/router_contact.hpp index 75ee21280..26d27e474 100644 --- a/llarp/router_contact.hpp +++ b/llarp/router_contact.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -104,6 +105,7 @@ namespace llarp uint64_t last_updated = 0; uint64_t version = LLARP_PROTO_VERSION; + absl::optional< RouterVersion > routerVersion; util::StatusObject ExtractStatus() const;