first jsonrpc endpoint added

pull/35/head
Jeff Becker 6 years ago
parent 48e4f676cc
commit 6e1761eb05
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -66,6 +66,7 @@
"new": "cpp",
"shared_mutex": "cpp",
"complex": "cpp",
"variant": "cpp"
"variant": "cpp",
"any": "cpp"
}
}

@ -215,7 +215,7 @@ namespace llarp
ToHex() const
{
char strbuf[(1 + sz) * 2] = {0};
return HexEncode(*this, strbuf);
return std::string(HexEncode(*this, strbuf));
}
struct Hash

@ -515,8 +515,8 @@ namespace llarp
ToString() const
{
std::stringstream ss;
ss << *this;
return ss.str();
ss << (*this);
return std::string(ss.str().c_str());
}
friend std::ostream&

@ -111,7 +111,7 @@ llarp_ev_add_tun(struct llarp_ev_loop *loop, struct llarp_tun_io *tun)
tun->impl = dev;
if(dev)
{
return loop->add_ev(dev, true);
return loop->add_ev(dev);
}
return false;
}

@ -99,6 +99,7 @@ namespace llarp
{
if(t->tick)
t->tick(t);
flush_write();
return true;
}

@ -669,13 +669,12 @@ llarp_router::Run()
rpcBindAddr = DefaultRPCBindAddr;
}
rpcServer = std::make_unique< llarp::rpc::Server >(this);
if(!rpcServer->Start(rpcBindAddr))
while(!rpcServer->Start(rpcBindAddr))
{
llarp::LogError("Binding rpc server to ", rpcBindAddr, " failed");
rpcServer.reset();
llarp::LogError("failed to bind jsonrpc to ", rpcBindAddr);
std::this_thread::sleep_for(std::chrono::seconds(1));
}
else
llarp::LogInfo("Bound RPC server to ", rpcBindAddr);
llarp::LogInfo("Bound RPC server to ", rpcBindAddr);
}
routerProfiling.Load(routerProfilesFile.c_str());

@ -104,7 +104,7 @@ struct llarp_router
ShouldCreateDefaultHiddenService();
std::string DefaultRPCBindAddr = "127.0.0.1:1190";
bool enableRPCServer = false;
bool enableRPCServer = true;
std::unique_ptr< llarp::rpc::Server > rpcServer;
std::string rpcBindAddr = DefaultRPCBindAddr;

@ -23,21 +23,25 @@ namespace llarp
ListNeighboors(Response& resp) const
{
auto& alloc = resp.GetAllocator();
auto& peers = abyss::json::Value().SetArray();
router->ForEachPeer([&](const llarp::ILinkSession* session,
bool outbound) {
auto& peer = abyss::json::Value().SetObject();
auto ident = session->GetPubKey().ToHex();
auto addr = session->GetRemoteEndpoint().ToString();
peer.AddMember("addr",
abyss::json::Value(addr.data(), addr.size(), alloc),
alloc);
peer.AddMember("ident",
abyss::json::Value(ident.data(), ident.size(), alloc),
alloc);
peer.AddMember("outbound", abyss::json::Value(outbound), alloc);
peers.PushBack(peer, alloc);
});
abyss::json::Value peers;
peers.SetArray();
router->ForEachPeer(
[&](const llarp::ILinkSession* session, bool outbound) {
abyss::json::Value peer;
peer.SetObject();
abyss::json::Value ident_val, addr_val;
auto ident = session->GetPubKey().ToHex();
ident_val.SetString(ident.c_str(), alloc);
auto addr = session->GetRemoteEndpoint().ToString();
addr_val.SetString(addr.c_str(), alloc);
peer.AddMember("addr", addr_val, alloc);
peer.AddMember("ident", ident_val, alloc);
peer.AddMember("outbound", abyss::json::Value(outbound), alloc);
peers.PushBack(peer, alloc);
});
resp.AddMember("result", peers, alloc);
return true;
}
@ -83,8 +87,20 @@ namespace llarp
bool
Start(const std::string& addr)
{
llarp::Addr bindaddr(addr);
return _handler.ServeAsync(router->netloop, router->logic, bindaddr);
uint16_t port = 0;
auto idx = addr.find_first_of(':');
llarp::Addr netaddr;
if(idx != std::string::npos)
{
port = std::stoi(addr.substr(1 + idx));
netaddr = llarp::Addr(addr.substr(0, idx));
}
sockaddr_in saddr;
saddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);
return _handler.ServeAsync(router->netloop, router->logic,
(const sockaddr*)&saddr);
}
};

Loading…
Cancel
Save