aboutsummaryrefslogtreecommitdiff
path: root/src/protocol.cpp
diff options
context:
space:
mode:
authorVasil Dimov <vd@FreeBSD.org>2020-05-29 18:52:59 +0200
committerVasil Dimov <vd@FreeBSD.org>2020-05-29 18:59:37 +0200
commit189ae0c38b7d4927c5c73b94664e9542b2b06ed9 (patch)
tree5c2e119d4e08d23351a53f15c558ebc6178a863b /src/protocol.cpp
parentfbacad1880341ace31f669530c66d4e322d19235 (diff)
downloadbitcoin-189ae0c38b7d4927c5c73b94664e9542b2b06ed9.tar.xz
util: dedup code in callers of serviceFlagToStr()
Introduce `serviceFlagsToStr()` which hides the internals of the bitmask and simplifies callers of `serviceFlagToStr()`.
Diffstat (limited to 'src/protocol.cpp')
-rw-r--r--src/protocol.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/protocol.cpp b/src/protocol.cpp
index 56071f4748..93e76f1f13 100644
--- a/src/protocol.cpp
+++ b/src/protocol.cpp
@@ -195,7 +195,12 @@ const std::vector<std::string> &getAllNetMessageTypes()
return allNetMessageTypesVec;
}
-std::string serviceFlagToStr(size_t bit)
+/**
+ * Convert a service flag (NODE_*) to a human readable string.
+ * It supports unknown service flags which will be returned as "UNKNOWN[...]".
+ * @param[in] bit the service flag is calculated as (1 << bit)
+ */
+static std::string serviceFlagToStr(size_t bit)
{
const uint64_t service_flag = 1ULL << bit;
switch ((ServiceFlags)service_flag) {
@@ -219,3 +224,16 @@ std::string serviceFlagToStr(size_t bit)
stream << "]";
return stream.str();
}
+
+std::vector<std::string> serviceFlagsToStr(uint64_t flags)
+{
+ std::vector<std::string> str_flags;
+
+ for (size_t i = 0; i < sizeof(flags) * 8; ++i) {
+ if (flags & (1ULL << i)) {
+ str_flags.emplace_back(serviceFlagToStr(i));
+ }
+ }
+
+ return str_flags;
+}