diff --git a/llarp/dht/bucket.hpp b/llarp/dht/bucket.hpp index ab2e069e9..549011fbe 100644 --- a/llarp/dht/bucket.hpp +++ b/llarp/dht/bucket.hpp @@ -30,7 +30,7 @@ namespace llarp util::StatusObject obj{}; for(const auto& item : nodes) { - obj.Put(item.first.ToHex(), item.second.ExtractStatus()); + obj[item.first.ToHex()] = item.second.ExtractStatus(); } return obj; } diff --git a/llarp/dht/tx.hpp b/llarp/dht/tx.hpp index e8b4239fa..47b696b6b 100644 --- a/llarp/dht/tx.hpp +++ b/llarp/dht/tx.hpp @@ -50,12 +50,12 @@ namespace llarp return item.ExtractStatus(); }); - obj.Put("found", foundObjs); + obj["found"] = foundObjs; std::vector< std::string > asked; std::transform( peersAsked.begin(), peersAsked.end(), std::back_inserter(asked), [](const auto& item) -> std::string { return item.ToHex(); }); - obj.Put("asked", asked); + obj["asked"] = asked; return obj; } diff --git a/llarp/dht/txholder.hpp b/llarp/dht/txholder.hpp index 3f57f465d..e8b31e32e 100644 --- a/llarp/dht/txholder.hpp +++ b/llarp/dht/txholder.hpp @@ -40,14 +40,14 @@ namespace llarp {"owner", item.first.ExtractStatus()}, {"tx", item.second->ExtractStatus()}}; }); - obj.Put("tx", txObjs); + obj["tx"] = txObjs; std::transform( timeouts.begin(), timeouts.end(), std::back_inserter(timeoutsObjs), [](const auto& item) -> util::StatusObject { return util::StatusObject{{"time", item.second}, {"target", item.first.ToHex()}}; }); - obj.Put("timeouts", timeoutsObjs); + obj["timeouts"] = timeoutsObjs; std::transform(waiting.begin(), waiting.end(), std::back_inserter(waitingObjs), [](const auto& item) -> util::StatusObject { @@ -55,7 +55,7 @@ namespace llarp {"target", item.first.ToHex()}, {"whoasked", item.second.ExtractStatus()}}; }); - obj.Put("waiting", waitingObjs); + obj["waiting"] = waitingObjs; return obj; } diff --git a/llarp/exit/context.cpp b/llarp/exit/context.cpp index b8560ba2c..fceafb040 100644 --- a/llarp/exit/context.cpp +++ b/llarp/exit/context.cpp @@ -52,7 +52,7 @@ namespace llarp auto itr = m_Exits.begin(); while(itr != m_Exits.end()) { - obj.Put(itr->first, itr->second->ExtractStatus()); + obj[itr->first] = itr->second->ExtractStatus(); ++itr; } return obj; diff --git a/llarp/exit/session.cpp b/llarp/exit/session.cpp index 4d4296b90..2a0ecba36 100644 --- a/llarp/exit/session.cpp +++ b/llarp/exit/session.cpp @@ -37,10 +37,10 @@ namespace llarp util::StatusObject BaseSession::ExtractStatus() const { - auto obj = path::Builder::ExtractStatus(); - obj.Put("lastExitUse", m_LastUse); - auto pub = m_ExitIdentity.toPublic(); - obj.Put("exitIdentity", pub.ToString()); + auto obj = path::Builder::ExtractStatus(); + obj["lastExitUse"] = m_LastUse; + auto pub = m_ExitIdentity.toPublic(); + obj["exitIdentity"] = pub.ToString(); return obj; } diff --git a/llarp/handlers/exit.cpp b/llarp/handlers/exit.cpp index 4ec317e00..8ce8ddc1f 100644 --- a/llarp/handlers/exit.cpp +++ b/llarp/handlers/exit.cpp @@ -51,9 +51,9 @@ namespace llarp util::StatusObject exitsObj{}; for(const auto &item : m_ActiveExits) { - exitsObj.Put(item.first.ToHex(), item.second->ExtractStatus()); + exitsObj[item.first.ToHex()] = item.second->ExtractStatus(); } - obj.Put("exits", exitsObj); + obj["exits"] = exitsObj; return obj; } diff --git a/llarp/handlers/tun.cpp b/llarp/handlers/tun.cpp index 2292ff1ee..ca54318e6 100644 --- a/llarp/handlers/tun.cpp +++ b/llarp/handlers/tun.cpp @@ -66,14 +66,14 @@ namespace llarp util::StatusObject TunEndpoint::ExtractStatus() const { - auto obj = service::Endpoint::ExtractStatus(); - obj.Put("ifaddr", m_OurRange.ToString()); + auto obj = service::Endpoint::ExtractStatus(); + obj["ifaddr"] = m_OurRange.ToString(); std::vector< std::string > resolvers; for(const auto &addr : m_UpstreamResolvers) resolvers.emplace_back(addr.ToString()); - obj.Put("ustreamResolvers", resolvers); - obj.Put("localResolver", m_LocalResolverAddr.ToString()); + obj["ustreamResolvers"] = resolvers; + obj["localResolver"] = m_LocalResolverAddr.ToString(); util::StatusObject ips{}; for(const auto &item : m_IPActivity) { @@ -84,14 +84,14 @@ namespace llarp remoteStr = RouterID(addr.as_array()).ToString(); else remoteStr = service::Address(addr.as_array()).ToString(); - ipObj.Put("remote", remoteStr); + ipObj["remote"] = remoteStr; std::string ipaddr = item.first.ToString(); - ips.Put(ipaddr.c_str(), ipObj); + ips[ipaddr] = ipObj; } - obj.Put("addrs", ips); - obj.Put("ourIP", m_OurIP.ToString()); - obj.Put("nextIP", m_NextIP.ToString()); - obj.Put("maxIP", m_MaxIP.ToString()); + obj["addrs"] = ips; + obj["ourIP"] = m_OurIP.ToString(); + obj["nextIP"] = m_NextIP.ToString(); + obj["maxIP"] = m_MaxIP.ToString(); return obj; } diff --git a/llarp/link/i_link_manager.hpp b/llarp/link/i_link_manager.hpp index 7ba246980..8af30e7aa 100644 --- a/llarp/link/i_link_manager.hpp +++ b/llarp/link/i_link_manager.hpp @@ -18,11 +18,6 @@ namespace llarp struct IOutboundSessionMaker; struct RouterID; - namespace util - { - struct StatusObject; - } // namespace util - struct ILinkManager { virtual ~ILinkManager() = default; diff --git a/llarp/path/path.cpp b/llarp/path/path.cpp index 7b56876c2..e9021de50 100644 --- a/llarp/path/path.cpp +++ b/llarp/path/path.cpp @@ -272,30 +272,30 @@ namespace llarp [](const auto& hop) -> util::StatusObject { return hop.ExtractStatus(); }); - obj.Put("hops", hopsObj); + obj["hops"] = hopsObj; switch(_status) { case ePathBuilding: - obj.Put("status", "building"); + obj["status"] = "building"; break; case ePathEstablished: - obj.Put("status", "established"); + obj["status"] = "established"; break; case ePathTimeout: - obj.Put("status", "timeout"); + obj["status"] = "timeout"; break; case ePathExpired: - obj.Put("status", "expired"); + obj["status"] = "expired"; break; case ePathFailed: - obj.Put("status", "failed"); + obj["status"] = "failed"; break; case ePathIgnore: - obj.Put("status", "ignored"); + obj["status"] = "ignored"; break; default: - obj.Put("status", "unknown"); + obj["status"] = "unknown"; break; } return obj; diff --git a/llarp/path/pathbuilder.cpp b/llarp/path/pathbuilder.cpp index 7b4bff011..a1026cca7 100644 --- a/llarp/path/pathbuilder.cpp +++ b/llarp/path/pathbuilder.cpp @@ -186,13 +186,11 @@ namespace llarp util::StatusObject obj{{"buildStats", m_BuildStats.ExtractStatus()}, {"numHops", uint64_t(numHops)}, {"numPaths", uint64_t(numPaths)}}; - std::vector< util::StatusObject > pathObjs; std::transform(m_Paths.begin(), m_Paths.end(), - std::back_inserter(pathObjs), + std::back_inserter(obj["paths"]), [](const auto& item) -> util::StatusObject { return item.second->ExtractStatus(); }); - obj.Put("paths", pathObjs); return obj; } diff --git a/llarp/router/i_outbound_message_handler.hpp b/llarp/router/i_outbound_message_handler.hpp index 4789c1bf9..931207c8b 100644 --- a/llarp/router/i_outbound_message_handler.hpp +++ b/llarp/router/i_outbound_message_handler.hpp @@ -1,6 +1,8 @@ #ifndef LLARP_ROUTER_I_OUTBOUND_MESSAGE_HANDLER_HPP #define LLARP_ROUTER_I_OUTBOUND_MESSAGE_HANDLER_HPP +#include + #include #include @@ -19,11 +21,6 @@ namespace llarp struct ILinkMessage; struct RouterID; - namespace util - { - struct StatusObject; - } - using SendStatusHandler = std::function< void(SendStatus) >; struct IOutboundMessageHandler diff --git a/llarp/router/i_outbound_session_maker.hpp b/llarp/router/i_outbound_session_maker.hpp index e5bb1ce98..746897d2e 100644 --- a/llarp/router/i_outbound_session_maker.hpp +++ b/llarp/router/i_outbound_session_maker.hpp @@ -1,17 +1,13 @@ #ifndef LLARP_ROUTER_I_OUTBOUND_SESSION_MAKER_HPP #define LLARP_ROUTER_I_OUTBOUND_SESSION_MAKER_HPP +#include #include #include namespace llarp { - namespace util - { - struct StatusObject; - } // namespace util - struct ILinkSession; struct RouterID; struct RouterContact; diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index 5fae4bc3c..22841d17f 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -110,13 +110,11 @@ namespace llarp util::StatusObject Router::ExtractStatus() const { - util::StatusObject obj{{"dht", _dht->impl->ExtractStatus()}, - {"services", _hiddenServiceContext.ExtractStatus()}, - {"exit", _exitContext.ExtractStatus()}}; - - obj.Put("links", _linkManager.ExtractStatus()); - - return obj; + return util::StatusObject{ + {"dht", _dht->impl->ExtractStatus()}, + {"services", _hiddenServiceContext.ExtractStatus()}, + {"exit", _exitContext.ExtractStatus()}, + {"links", _linkManager.ExtractStatus()}}; } bool diff --git a/llarp/router_contact.cpp b/llarp/router_contact.cpp index 7ab78174d..7428a1359 100644 --- a/llarp/router_contact.cpp +++ b/llarp/router_contact.cpp @@ -165,7 +165,7 @@ namespace llarp {"publicRouter", IsPublicRouter()}, {"identity", pubkey.ToHex()}}; if(HasNick()) - obj.Put("nickname", Nick()); + obj["nickname"] = Nick(); return obj; } diff --git a/llarp/router_contact.hpp b/llarp/router_contact.hpp index e7eb10bc7..8ec3730da 100644 --- a/llarp/router_contact.hpp +++ b/llarp/router_contact.hpp @@ -111,7 +111,7 @@ namespace llarp nlohmann::json ToJson() const { - return ExtractStatus().get(); + return ExtractStatus(); } bool diff --git a/llarp/rpc/rpc.cpp b/llarp/rpc/rpc.cpp index 8760aeece..c7cb7a1b8 100644 --- a/llarp/rpc/rpc.cpp +++ b/llarp/rpc/rpc.cpp @@ -197,8 +197,7 @@ namespace llarp Response DumpState() const { - const util::StatusObject dump = router->ExtractStatus(); - return dump.get(); + return router->ExtractStatus(); } Response diff --git a/llarp/service/context.cpp b/llarp/service/context.cpp index 6afaa75a5..072f178d1 100644 --- a/llarp/service/context.cpp +++ b/llarp/service/context.cpp @@ -71,7 +71,7 @@ namespace llarp auto itr = m_Endpoints.begin(); while(itr != m_Endpoints.end()) { - obj.Put(itr->first, itr->second->ExtractStatus()); + obj[itr->first] = itr->second->ExtractStatus(); ++itr; } return obj; diff --git a/llarp/service/endpoint.cpp b/llarp/service/endpoint.cpp index c8ff71eef..67e300995 100644 --- a/llarp/service/endpoint.cpp +++ b/llarp/service/endpoint.cpp @@ -162,8 +162,8 @@ namespace llarp util::StatusObject Endpoint::ExtractStatus() const { - auto obj = path::Builder::ExtractStatus(); - obj.Put("identity", m_Identity.pub.Addr().ToString()); + auto obj = path::Builder::ExtractStatus(); + obj["identity"] = m_Identity.pub.Addr().ToString(); return m_state->ExtractStatus(obj); } diff --git a/llarp/service/endpoint_state.cpp b/llarp/service/endpoint_state.cpp index 0e0e31c00..d60e5d566 100644 --- a/llarp/service/endpoint_state.cpp +++ b/llarp/service/endpoint_state.cpp @@ -116,31 +116,40 @@ namespace llarp util::StatusObject EndpointState::ExtractStatus(util::StatusObject& obj) const { - obj.Put("lastPublished", m_LastPublish); - obj.Put("lastPublishAttempt", m_LastPublishAttempt); - obj.Put("introset", m_IntroSet.ExtractStatus()); + obj["lastPublished"] = m_LastPublish; + obj["lastPublishAttempt"] = m_LastPublishAttempt; + obj["introset"] = m_IntroSet.ExtractStatus(); if(!m_Tag.IsZero()) - obj.Put("tag", m_Tag.ToString()); - static auto getSecond = [](const auto& item) -> const auto& { - return item.second; + obj["tag"] = m_Tag.ToString(); + } + + static auto getSecond = [](const auto& item) -> auto + { + return item.second->ExtractStatus(); }; - obj.PutContainer("deadSessions", m_DeadSessions, getSecond); - obj.PutContainer("remoteSessions", m_RemoteSessions, getSecond); - obj.PutContainer("lookups", m_PendingLookups, getSecond); - obj.PutContainer("snodeSessions", m_SNodeSessions, - [](const auto& item) { return item.second.first; }); + + std::transform(m_DeadSessions.begin(), m_DeadSessions.end(), + std::back_inserter(obj["deadSessions"]), getSecond); + std::transform(m_RemoteSessions.begin(), m_RemoteSessions.end(), + std::back_inserter(obj["remoteSessions"]), getSecond); + std::transform(m_PendingLookups.begin(), m_PendingLookups.end(), + std::back_inserter(obj["lookups"]), getSecond); + std::transform( + m_SNodeSessions.begin(), m_SNodeSessions.end(), + std::back_inserter(obj["snodeSessions"]), + [](const auto& item) { return item.second.first->ExtractStatus(); }); util::StatusObject sessionObj{}; for(const auto& item : m_Sessions) { std::string k = item.first.ToHex(); - sessionObj.Put(k, item.second.ExtractStatus()); + sessionObj[k] = item.second.ExtractStatus(); } - obj.Put("converstations", sessionObj); + obj["converstations"] = sessionObj; return obj; } } // namespace service diff --git a/llarp/service/intro_set.cpp b/llarp/service/intro_set.cpp index 5f9ae1fd7..cc403856b 100644 --- a/llarp/service/intro_set.cpp +++ b/llarp/service/intro_set.cpp @@ -15,9 +15,9 @@ namespace llarp [](const auto& intro) -> util::StatusObject { return intro.ExtractStatus(); }); - obj.Put("intros", introsObjs); + obj["intros"] = introsObjs; if(!topic.IsZero()) - obj.Put("topic", topic.ToString()); + obj["topic"] = topic.ToString(); return obj; } diff --git a/llarp/service/outbound_context.cpp b/llarp/service/outbound_context.cpp index f975c486c..2b6c708e7 100644 --- a/llarp/service/outbound_context.cpp +++ b/llarp/service/outbound_context.cpp @@ -213,27 +213,25 @@ namespace llarp util::StatusObject OutboundContext::ExtractStatus() const { - auto obj = path::Builder::ExtractStatus(); - obj.Put("currentConvoTag", currentConvoTag.ToHex()); - obj.Put("remoteIntro", remoteIntro.ExtractStatus()); - obj.Put("sessionCreatedAt", createdAt); - obj.Put("lastGoodSend", lastGoodSend); - obj.Put("seqno", sequenceNo); - obj.Put("markedBad", markedBad); - obj.Put("lastShift", lastShift); - obj.Put("remoteIdentity", remoteIdent.Addr().ToString()); - obj.Put("currentRemoteIntroset", currentIntroSet.ExtractStatus()); - obj.Put("nextIntro", m_NextIntro.ExtractStatus()); - std::vector< util::StatusObject > badIntrosObj; + auto obj = path::Builder::ExtractStatus(); + obj["currentConvoTag"] = currentConvoTag.ToHex(); + obj["remoteIntro"] = remoteIntro.ExtractStatus(); + obj["sessionCreatedAt"] = createdAt; + obj["lastGoodSend"] = lastGoodSend; + obj["seqno"] = sequenceNo; + obj["markedBad"] = markedBad; + obj["lastShift"] = lastShift; + obj["remoteIdentity"] = remoteIdent.Addr().ToString(); + obj["currentRemoteIntroset"] = currentIntroSet.ExtractStatus(); + obj["nextIntro"] = m_NextIntro.ExtractStatus(); + std::transform(m_BadIntros.begin(), m_BadIntros.end(), - std::back_inserter(badIntrosObj), + std::back_inserter(obj["badIntros"]), [](const auto& item) -> util::StatusObject { - util::StatusObject o{ + return util::StatusObject{ {"count", item.second}, {"intro", item.first.ExtractStatus()}}; - return o; }); - obj.Put("badIntros", badIntrosObj); return obj; } diff --git a/llarp/util/status.cpp b/llarp/util/status.cpp index 14d533d97..15c76b583 100644 --- a/llarp/util/status.cpp +++ b/llarp/util/status.cpp @@ -1,64 +1 @@ #include - -#include - -namespace llarp -{ - namespace util - { - struct StatusVisitor - { - std::string name; - std::reference_wrapper< nlohmann::json > data; - - StatusVisitor(StatusObject::String_t n, nlohmann::json& d) - : name(n), data(d) - { - } - void - operator()(uint64_t val) - { - data.get()[name] = val; - } - void - operator()(const std::string& val) - { - data.get()[name] = val; - } - void - operator()(bool val) - { - data.get()[name] = val; - } - void - operator()(const StatusObject& obj) - { - data.get()[name] = obj.Impl; - } - void - operator()(const std::vector< std::string >& val) - { - data.get()[name] = val; - } - void - operator()(const std::vector< StatusObject >& val) - { - auto arr = nlohmann::json::array(); - std::transform(val.begin(), val.end(), std::back_inserter(arr), - [](const auto& x) { return x.Impl; }); - data.get()[name] = arr; - } - }; - void - StatusObject::Put(const value_type& val) - { - Put(std::get< 0 >(val), std::get< 1 >(val)); - } - - void - StatusObject::Put(String_t name, const Variant& data) - { - absl::visit(StatusVisitor{name, Impl}, data); - } - } // namespace util -} // namespace llarp diff --git a/llarp/util/status.hpp b/llarp/util/status.hpp index f9fda5d4f..6e70e9c2c 100644 --- a/llarp/util/status.hpp +++ b/llarp/util/status.hpp @@ -14,50 +14,7 @@ namespace llarp { namespace util { - struct StatusVisitor; - struct StatusObject - { - using String_t = string_view; - using Variant = absl::variant< uint64_t, std::string, bool, StatusObject, - std::vector< std::string >, - std::vector< StatusObject > >; - using value_type = std::pair< String_t, Variant >; - - StatusObject(std::initializer_list< value_type > vals) - { - std::for_each(vals.begin(), vals.end(), - [&](const value_type& item) { Put(item); }); - } - - void - Put(String_t name, const Variant& value); - - void - Put(const value_type& value); - - template < typename Container, typename Getter > - void - PutContainer(String_t keyname, const Container& container, Getter get) - { - std::vector< util::StatusObject > objs; - std::transform(container.begin(), container.end(), - std::back_inserter(objs), - [get](const auto& item) -> util::StatusObject { - return get(item)->ExtractStatus(); - }); - Put(keyname, objs); - } - - nlohmann::json - get() const - { - return Impl; - } - - private: - friend struct StatusVisitor; - nlohmann::json Impl; - }; + using StatusObject = nlohmann::json; } // namespace util } // namespace llarp