diff --git a/RouterContext.cpp b/RouterContext.cpp index 966da6ac..8bfbdc1d 100644 --- a/RouterContext.cpp +++ b/RouterContext.cpp @@ -205,7 +205,7 @@ namespace i2p void RouterContext::SetBandwidth (char L) { uint16_t limit = 0; - enum { low, high, extra } type = high; + enum { low, high, extra, unlim } type = high; /* detect parameters */ switch (L) { @@ -215,7 +215,7 @@ namespace i2p case i2p::data::CAPS_FLAG_HIGH_BANDWIDTH2 : limit = 128; type = high; break; case i2p::data::CAPS_FLAG_HIGH_BANDWIDTH3 : limit = 256; type = high; break; case i2p::data::CAPS_FLAG_EXTRA_BANDWIDTH1 : limit = 2048; type = extra; break; - case i2p::data::CAPS_FLAG_EXTRA_BANDWIDTH2 : limit = 9999; type = extra; break; + case i2p::data::CAPS_FLAG_EXTRA_BANDWIDTH2 : limit = 9999; type = unlim; break; default: limit = 48; type = low; } @@ -226,7 +226,8 @@ namespace i2p switch (type) { case low : /* not set */; break; - case extra : caps |= i2p::data::RouterInfo::eExtraBandwidth; // no break here + case extra : caps |= i2p::data::RouterInfo::eExtraBandwidth; break; // 'P' + case unlim : caps |= i2p::data::RouterInfo::eExtraBandwidth; // no break here, extra + high means 'X' case high : caps |= i2p::data::RouterInfo::eHighBandwidth; break; } m_RouterInfo.SetCaps (caps); diff --git a/RouterInfo.cpp b/RouterInfo.cpp index 08d46ecb..205262e5 100644 --- a/RouterInfo.cpp +++ b/RouterInfo.cpp @@ -376,14 +376,21 @@ namespace data std::string caps; if (m_Caps & eFloodfill) { - if (m_Caps & eExtraBandwidth) caps += CAPS_FLAG_EXTRA_BANDWIDTH1; // 'P' + if (m_Caps & eExtraBandwidth) caps += (m_Caps & eHighBandwidth) ? + CAPS_FLAG_EXTRA_BANDWIDTH2 : // 'X' + CAPS_FLAG_EXTRA_BANDWIDTH1; // 'P' caps += CAPS_FLAG_HIGH_BANDWIDTH3; // 'O' caps += CAPS_FLAG_FLOODFILL; // floodfill } else { - if (m_Caps & eExtraBandwidth) caps += CAPS_FLAG_EXTRA_BANDWIDTH1; // 'P' - caps += (m_Caps & eHighBandwidth) ? CAPS_FLAG_HIGH_BANDWIDTH3 /* 'O' */: CAPS_FLAG_LOW_BANDWIDTH2 /* 'L' */; // bandwidth + if (m_Caps & eExtraBandwidth) + { + caps += (m_Caps & eHighBandwidth) ? CAPS_FLAG_EXTRA_BANDWIDTH2 /* 'X' */ : CAPS_FLAG_EXTRA_BANDWIDTH1; /*'P' */ + caps += CAPS_FLAG_HIGH_BANDWIDTH3; // 'O' + } + else + caps += (m_Caps & eHighBandwidth) ? CAPS_FLAG_HIGH_BANDWIDTH3 /* 'O' */: CAPS_FLAG_LOW_BANDWIDTH2 /* 'L' */; // bandwidth } if (m_Caps & eHidden) caps += CAPS_FLAG_HIDDEN; // hidden if (m_Caps & eReachable) caps += CAPS_FLAG_REACHABLE; // reachable