From 44dcf733000858afcee80db6718cf0e48c090829 Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 2 Sep 2014 16:11:31 -0400 Subject: [PATCH] fill caps property based on flags --- RouterContext.cpp | 2 +- RouterInfo.cpp | 48 ++++++++++++++++++++++++++++++++--------------- RouterInfo.h | 19 +++++++++++++++++-- 3 files changed, 51 insertions(+), 18 deletions(-) diff --git a/RouterContext.cpp b/RouterContext.cpp index 48b61e76..79287f8f 100644 --- a/RouterContext.cpp +++ b/RouterContext.cpp @@ -35,7 +35,7 @@ namespace i2p port = m_Rnd.GenerateWord32 (9111, 30777); // I2P network ports range routerInfo.AddSSUAddress (i2p::util::config::GetCharArg("-host", "127.0.0.1"), port, routerInfo.GetIdentHash ()); routerInfo.AddNTCPAddress (i2p::util::config::GetCharArg("-host", "127.0.0.1"), port); - routerInfo.SetProperty ("caps", "LR"); + routerInfo.SetCaps (i2p::data::RouterInfo::eReachable); // LR routerInfo.SetProperty ("coreVersion", I2P_VERSION); routerInfo.SetProperty ("netId", "2"); routerInfo.SetProperty ("router.version", I2P_VERSION); diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 30bca3e1..90fa0170 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -237,35 +237,47 @@ namespace data { switch (*cap) { - case 'f': + case CAPS_FLAG_FLOODFILL: m_Caps |= Caps::eFloodfill; break; - case 'M': - case 'N': - case 'O': + case CAPS_FLAG_HIGH_BANDWIDTH1: + case CAPS_FLAG_HIGH_BANDWIDTH2: + case CAPS_FLAG_HIGH_BANDWIDTH3: m_Caps |= Caps::eHighBandwidth; break; - case 'R': + case CAPS_FLAG_HIDDEN: + m_Caps |= Caps::eHidden; + break; + case CAPS_FLAG_REACHABLE: m_Caps |= Caps::eReachable; break; - case 'B': + case CAPS_FLAG_UNREACHABLE: + m_Caps |= Caps::eUnreachable; + break; + case CAPS_FLAG_SSU_TESTING: m_Caps |= Caps::eSSUTesting; break; - case 'C': + case CAPS_FLAG_SSU_INTRODUCER: m_Caps |= Caps::eSSUIntroducer; break; - case 'H': - m_Caps |= Caps::eHidden; - break; - case 'U': - m_Caps |= Caps::eUnreachable; - break; default: ; } cap++; } } + void RouterInfo::UpdateCapsProperty () + { + std::string caps; + caps += (m_Caps & eHighBandwidth) ? CAPS_FLAG_HIGH_BANDWIDTH1 : CAPS_FLAG_LOW_BANDWIDTH2; // bandwidth + if (m_Caps & eFloodfill) caps += CAPS_FLAG_FLOODFILL; // floodfill + if (m_Caps & eHidden) caps += CAPS_FLAG_HIDDEN; // hidden + if (m_Caps & eReachable) caps += CAPS_FLAG_REACHABLE; // reachable + if (m_Caps & eUnreachable) caps += CAPS_FLAG_UNREACHABLE; // unreachable + + SetProperty ("caps", caps.c_str ()); + } + void RouterInfo::UpdateIdentHashBase64 () { size_t l = i2p::data::ByteStreamToBase64 (m_IdentHash, 32, m_IdentHashBase64, 48); @@ -302,8 +314,8 @@ namespace data WriteString ("caps", properties); properties << '='; std::string caps; - if (IsPeerTesting ()) caps += 'B'; - if (IsIntroducer ()) caps += 'C'; + if (IsPeerTesting ()) caps += CAPS_FLAG_SSU_TESTING; + if (IsIntroducer ()) caps += CAPS_FLAG_SSU_INTRODUCER; WriteString (caps, properties); properties << ';'; } @@ -511,6 +523,12 @@ namespace data } return false; } + + void RouterInfo::SetCaps (uint8_t caps) + { + m_Caps = caps; + UpdateCapsProperty (); + } void RouterInfo::SetCaps (const char * caps) { diff --git a/RouterInfo.h b/RouterInfo.h index 1007f7fa..6acd5885 100644 --- a/RouterInfo.h +++ b/RouterInfo.h @@ -12,7 +12,20 @@ namespace i2p { namespace data -{ +{ + const char CAPS_FLAG_FLOODFILL = 'f'; + const char CAPS_FLAG_HIDDEN = 'H'; + const char CAPS_FLAG_REACHABLE = 'R'; + const char CAPS_FLAG_UNREACHABLE = 'U'; + const char CAPS_FLAG_LOW_BANDWIDTH1 = 'K'; + const char CAPS_FLAG_LOW_BANDWIDTH2 = 'L'; + const char CAPS_FLAG_HIGH_BANDWIDTH1 = 'M'; + const char CAPS_FLAG_HIGH_BANDWIDTH2 = 'N'; + const char CAPS_FLAG_HIGH_BANDWIDTH3 = 'O'; + + const char CAPS_FLAG_SSU_TESTING = 'B'; + const char CAPS_FLAG_SSU_INTRODUCER = 'C'; + const int MAX_RI_BUFFER_SIZE = 2048; class RouterInfo: public RoutingDestination { @@ -97,6 +110,7 @@ namespace data bool IsHidden () const { return m_Caps & eHidden; }; uint8_t GetCaps () const { return m_Caps; }; + void SetCaps (uint8_t caps); void SetCaps (const char * caps); void SetUnreachable (bool unreachable) { m_IsUnreachable = unreachable; }; @@ -134,7 +148,8 @@ namespace data void ExtractCaps (const char * value); void UpdateIdentHashBase64 (); const Address * GetAddress (TransportStyle s, bool v4only) const; - + void UpdateCapsProperty (); + private: std::string m_FullPath;