Skip to content
This repository has been archived by the owner on Sep 1, 2022. It is now read-only.

RouterInfo: various refactoring #621

Merged
merged 8 commits into from
Apr 17, 2017
2 changes: 1 addition & 1 deletion src/app/instance.cc
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ void Instance::InitRouterContext() {
// Random generated port if none is supplied via CLI or config
// See: i2p.i2p/router/java/src/net/i2p/router/transport/udp/UDPEndpoint.java
auto port = map["port"].defaulted() ? kovri::core::RandInRange32(9111, 30777)
: map["port"].as<int>();
: map["port"].as<std::uint16_t>();
// TODO(unassigned): context should be in core namespace (see TODO in router context)
context.Init(host, port);
context.UpdatePort(port);
Expand Down
50 changes: 25 additions & 25 deletions src/core/router/context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ RouterContext::RouterContext()

void RouterContext::Init(
const std::string& host,
int port) {
std::uint16_t port) {
m_Host = host;
m_Port = port;
m_StartupTime = kovri::core::GetSecondsSinceEpoch();
Expand All @@ -88,9 +88,9 @@ void RouterContext::NewRouterInfo() {
routerInfo.AddSSUAddress(m_Host, m_Port, routerInfo.GetIdentHash());
routerInfo.AddNTCPAddress(m_Host, m_Port);
routerInfo.SetCaps(
kovri::core::RouterInfo::eReachable |
kovri::core::RouterInfo::eSSUTesting |
kovri::core::RouterInfo::eSSUIntroducer);
core::RouterInfo::Caps::Reachable |
core::RouterInfo::Caps::SSUTesting |
core::RouterInfo::Caps::SSUIntroducer);
routerInfo.SetProperty("netId", I2P_NETWORK_ID);
routerInfo.SetProperty("router.version", I2P_VERSION);
routerInfo.CreateBuffer(m_Keys);
Expand All @@ -106,7 +106,7 @@ void RouterContext::UpdateRouterInfo() {
}

void RouterContext::UpdatePort(
int port) {
std::uint16_t port) {
bool updated = false;
for (auto& address : m_RouterInfo.GetAddresses()) {
if (address.port != port) {
Expand Down Expand Up @@ -156,10 +156,10 @@ void RouterContext::SetFloodfill(
m_IsFloodfill = floodfill;
if (floodfill) {
m_RouterInfo.SetCaps(
m_RouterInfo.GetCaps() | kovri::core::RouterInfo::eFloodfill);
m_RouterInfo.GetCaps() | core::RouterInfo::Caps::Floodfill);
} else {
m_RouterInfo.SetCaps(
m_RouterInfo.GetCaps() & ~kovri::core::RouterInfo::eFloodfill);
m_RouterInfo.GetCaps() & ~core::RouterInfo::Caps::Floodfill);
// we don't publish number of routers and leaseset for non-floodfill
m_RouterInfo.DeleteProperty(ROUTER_INFO_PROPERTY_LEASESETS);
m_RouterInfo.DeleteProperty(ROUTER_INFO_PROPERTY_ROUTERS);
Expand All @@ -170,29 +170,29 @@ void RouterContext::SetFloodfill(
void RouterContext::SetHighBandwidth() {
if (!m_RouterInfo.IsHighBandwidth()) {
m_RouterInfo.SetCaps(
m_RouterInfo.GetCaps() | kovri::core::RouterInfo::eHighBandwidth);
m_RouterInfo.GetCaps() | core::RouterInfo::Caps::HighBandwidth);
UpdateRouterInfo();
}
}

void RouterContext::SetLowBandwidth() {
if (m_RouterInfo.IsHighBandwidth()) {
m_RouterInfo.SetCaps(
m_RouterInfo.GetCaps() & ~kovri::core::RouterInfo::eHighBandwidth);
m_RouterInfo.GetCaps() & ~core::RouterInfo::Caps::HighBandwidth);
UpdateRouterInfo();
}
}

bool RouterContext::IsUnreachable() const {
return m_RouterInfo.GetCaps() & kovri::core::RouterInfo::eUnreachable;
return m_RouterInfo.GetCaps() & core::RouterInfo::Caps::Unreachable;
}

void RouterContext::SetUnreachable() {
// set caps
m_RouterInfo.SetCaps( // LU, B
kovri::core::RouterInfo::eUnreachable | kovri::core::RouterInfo::eSSUTesting);
core::RouterInfo::Caps::Unreachable | core::RouterInfo::Caps::SSUTesting);
// remove NTCP address
RemoveTransport(kovri::core::RouterInfo::eTransportNTCP);
RemoveTransport(core::RouterInfo::Transport::NTCP);
// delete previous introducers
for (auto& addr : m_RouterInfo.GetAddresses())
addr.introducers.clear();
Expand All @@ -203,17 +203,17 @@ void RouterContext::SetUnreachable() {
void RouterContext::SetReachable() {
// update caps
std::uint8_t caps = m_RouterInfo.GetCaps();
caps &= ~kovri::core::RouterInfo::eUnreachable;
caps |= kovri::core::RouterInfo::eReachable;
caps |= kovri::core::RouterInfo::eSSUIntroducer;
caps &= ~core::RouterInfo::Caps::Unreachable;
caps |= core::RouterInfo::Caps::Reachable;
caps |= core::RouterInfo::Caps::SSUIntroducer;
if (m_IsFloodfill)
caps |= kovri::core::RouterInfo::eFloodfill;
caps |= core::RouterInfo::Caps::Floodfill;
m_RouterInfo.SetCaps(caps);

// insert NTCP back
auto& addresses = m_RouterInfo.GetAddresses();
for (std::size_t i = 0; i < addresses.size(); i++) {
if (addresses[i].transport_style == kovri::core::RouterInfo::eTransportSSU) {
if (addresses[i].transport == core::RouterInfo::Transport::SSU) {
// insert NTCP address with host/port form SSU
m_RouterInfo.AddNTCPAddress(
addresses[i].host.to_string().c_str(),
Expand Down Expand Up @@ -242,7 +242,7 @@ void RouterContext::SetSupportsNTCP(bool supportsNTCP) {
if(supportsNTCP && !m_RouterInfo.GetNTCPAddress())
m_RouterInfo.AddNTCPAddress(m_Host, m_Port);
if(!supportsNTCP)
RemoveTransport(kovri::core::RouterInfo::eTransportNTCP);
RemoveTransport(core::RouterInfo::Transport::NTCP);
UpdateRouterInfo();
}

Expand All @@ -251,11 +251,11 @@ void RouterContext::SetSupportsSSU(bool supportsSSU) {
if(supportsSSU && !m_RouterInfo.GetSSUAddress())
m_RouterInfo.AddSSUAddress(m_Host, m_Port, m_RouterInfo.GetIdentHash());
if(!supportsSSU)
RemoveTransport(kovri::core::RouterInfo::eTransportSSU);
RemoveTransport(core::RouterInfo::Transport::SSU);
// Remove SSU-related flags
m_RouterInfo.SetCaps(m_RouterInfo.GetCaps()
& ~kovri::core::RouterInfo::eSSUTesting
& ~kovri::core::RouterInfo::eSSUIntroducer);
& ~core::RouterInfo::Caps::SSUTesting
& ~core::RouterInfo::Caps::SSUIntroducer);

UpdateRouterInfo();
}
Expand All @@ -264,11 +264,11 @@ void RouterContext::UpdateNTCPV6Address(
const boost::asio::ip::address& host) {
bool updated = false,
found = false;
int port = 0;
std::uint16_t port = 0;
auto& addresses = m_RouterInfo.GetAddresses();
for (auto& addr : addresses) {
if (addr.host.is_v6() &&
addr.transport_style == kovri::core::RouterInfo::eTransportNTCP) {
addr.transport == core::RouterInfo::Transport::NTCP) {
if (addr.host != host) {
addr.host = host;
updated = true;
Expand Down Expand Up @@ -343,10 +343,10 @@ void RouterContext::SaveKeys() {
}

void RouterContext::RemoveTransport(
kovri::core::RouterInfo::TransportStyle transport) {
core::RouterInfo::Transport transport) {
auto& addresses = m_RouterInfo.GetAddresses();
for (std::size_t i = 0; i < addresses.size(); i++) {
if (addresses[i].transport_style == transport) {
if (addresses[i].transport == transport) {
addresses.erase(addresses.begin() + i);
break;
}
Expand Down
8 changes: 4 additions & 4 deletions src/core/router/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class RouterContext : public kovri::core::GarlicDestination {
/// @param port The external port of this router
void Init(
const std::string& host,
int port);
std::uint16_t port);

// @return This RouterContext's RouterInfo
kovri::core::RouterInfo& GetRouterInfo() {
Expand Down Expand Up @@ -117,7 +117,7 @@ class RouterContext : public kovri::core::GarlicDestination {
// Called from Daemon, updates this RouterContext's Port.
// Rebuilds RouterInfo
// @param port port number
void UpdatePort(int port);
void UpdatePort(std::uint16_t port);

// Called From SSU or Daemon.
// Update Our IP Address, external IP Address if behind NAT.
Expand Down Expand Up @@ -303,7 +303,7 @@ class RouterContext : public kovri::core::GarlicDestination {
void UpdateRouterInfo();
bool Load();
void SaveKeys();
void RemoveTransport(kovri::core::RouterInfo::TransportStyle transport);
void RemoveTransport(core::RouterInfo::Transport transport);

private:
kovri::core::RouterInfo m_RouterInfo;
Expand All @@ -314,7 +314,7 @@ class RouterContext : public kovri::core::GarlicDestination {
RouterStatus m_Status;
std::mutex m_GarlicMutex;
std::string m_Host;
int m_Port;
std::uint16_t m_Port;
std::string m_ReseedFrom;
bool m_ReseedSkipSSLCheck;
bool m_SupportsNTCP, m_SupportsSSU;
Expand Down
Loading