mirror of https://github.com/oxen-io/lokinet
IPC Socket Fixes (#2111)
* Updated RpcServer Initialization and Logic -- Moved all RPCServer initialization logic to rpcserver constructor -- Fixed config logic, fxn binding to rpc address, fxn adding rpc cats -- router hive failed CI/CD resulting from outdated reference to rpcBindAddr -- ipc socket as default hidden from windows (for now)
This commit is contained in:
parent
245f968d33
commit
0edfe8ff83
|
@ -588,6 +588,9 @@ namespace
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// change cwd to dataDir to support relative paths in config
|
||||||
|
fs::current_path(conf->router.m_dataDir);
|
||||||
|
|
||||||
ctx = std::make_shared<llarp::Context>();
|
ctx = std::make_shared<llarp::Context>();
|
||||||
ctx->Configure(std::move(conf));
|
ctx->Configure(std::move(conf));
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,6 @@ namespace llarp
|
||||||
std::shared_ptr<AbstractRouter> router = nullptr;
|
std::shared_ptr<AbstractRouter> router = nullptr;
|
||||||
std::shared_ptr<EventLoop> loop = nullptr;
|
std::shared_ptr<EventLoop> loop = nullptr;
|
||||||
std::shared_ptr<NodeDB> nodedb = nullptr;
|
std::shared_ptr<NodeDB> nodedb = nullptr;
|
||||||
std::string nodedb_dir;
|
|
||||||
|
|
||||||
Context();
|
Context();
|
||||||
virtual ~Context() = default;
|
virtual ~Context() = default;
|
||||||
|
|
|
@ -1114,7 +1114,12 @@ namespace llarp
|
||||||
void
|
void
|
||||||
ApiConfig::defineConfigOptions(ConfigDefinition& conf, const ConfigGenParameters& params)
|
ApiConfig::defineConfigOptions(ConfigDefinition& conf, const ConfigGenParameters& params)
|
||||||
{
|
{
|
||||||
constexpr Default DefaultRPCBindAddr{"tcp://127.0.0.1:1190"};
|
constexpr std::array DefaultRPCBind{
|
||||||
|
Default{"tcp://127.0.0.1:1190"},
|
||||||
|
#ifndef _WIN32
|
||||||
|
Default{"ipc://rpc.sock"},
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
conf.defineOption<bool>(
|
conf.defineOption<bool>(
|
||||||
"api",
|
"api",
|
||||||
|
@ -1128,20 +1133,22 @@ namespace llarp
|
||||||
conf.defineOption<std::string>(
|
conf.defineOption<std::string>(
|
||||||
"api",
|
"api",
|
||||||
"bind",
|
"bind",
|
||||||
DefaultRPCBindAddr,
|
DefaultRPCBind,
|
||||||
[this](std::string arg) {
|
MultiValue,
|
||||||
if (arg.empty())
|
[this, first = true](std::string arg) mutable {
|
||||||
|
if (first)
|
||||||
{
|
{
|
||||||
arg = DefaultRPCBindAddr.val;
|
m_rpcBindAddresses.clear();
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
if (arg.find("://") == std::string::npos)
|
if (arg.find("://") == std::string::npos)
|
||||||
{
|
{
|
||||||
arg = "tcp://" + arg;
|
arg = "tcp://" + arg;
|
||||||
}
|
}
|
||||||
m_rpcBindAddr = std::move(arg);
|
m_rpcBindAddresses.emplace_back(arg);
|
||||||
},
|
},
|
||||||
Comment{
|
Comment{
|
||||||
"IP address and port to bind to.",
|
"IP addresses and ports to bind to.",
|
||||||
"Recommend localhost-only for security purposes.",
|
"Recommend localhost-only for security purposes.",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -189,7 +189,7 @@ namespace llarp
|
||||||
struct ApiConfig
|
struct ApiConfig
|
||||||
{
|
{
|
||||||
bool m_enableRPCServer = false;
|
bool m_enableRPCServer = false;
|
||||||
std::string m_rpcBindAddr;
|
std::vector<oxenmq::address> m_rpcBindAddresses;
|
||||||
|
|
||||||
void
|
void
|
||||||
defineConfigOptions(ConfigDefinition& conf, const ConfigGenParameters& params);
|
defineConfigOptions(ConfigDefinition& conf, const ConfigGenParameters& params);
|
||||||
|
|
|
@ -45,8 +45,6 @@ namespace llarp
|
||||||
throw std::runtime_error("Config already exists");
|
throw std::runtime_error("Config already exists");
|
||||||
|
|
||||||
config = std::move(conf);
|
config = std::move(conf);
|
||||||
|
|
||||||
nodedb_dir = fs::path{config->router.m_dataDir / nodedb_dirname}.string();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -92,7 +90,7 @@ namespace llarp
|
||||||
Context::makeNodeDB()
|
Context::makeNodeDB()
|
||||||
{
|
{
|
||||||
return std::make_shared<NodeDB>(
|
return std::make_shared<NodeDB>(
|
||||||
nodedb_dir, [r = router.get()](auto call) { r->QueueDiskIO(std::move(call)); });
|
nodedb_dirname, [r = router.get()](auto call) { r->QueueDiskIO(std::move(call)); });
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<AbstractRouter>
|
std::shared_ptr<AbstractRouter>
|
||||||
|
|
|
@ -413,10 +413,8 @@ namespace llarp
|
||||||
log::clear_sinks();
|
log::clear_sinks();
|
||||||
log::add_sink(log_type, log_type == log::Type::System ? "lokinet" : conf.logging.m_logFile);
|
log::add_sink(log_type, log_type == log::Type::System ? "lokinet" : conf.logging.m_logFile);
|
||||||
|
|
||||||
enableRPCServer = conf.api.m_enableRPCServer;
|
|
||||||
|
|
||||||
// re-add rpc log sink if rpc enabled, else free it
|
// re-add rpc log sink if rpc enabled, else free it
|
||||||
if (enableRPCServer and llarp::logRingBuffer)
|
if (m_Config->api.m_enableRPCServer and llarp::logRingBuffer)
|
||||||
log::add_sink(llarp::logRingBuffer, llarp::log::DEFAULT_PATTERN_MONO);
|
log::add_sink(llarp::logRingBuffer, llarp::log::DEFAULT_PATTERN_MONO);
|
||||||
else
|
else
|
||||||
llarp::logRingBuffer = nullptr;
|
llarp::logRingBuffer = nullptr;
|
||||||
|
@ -430,9 +428,6 @@ namespace llarp
|
||||||
m_lokidRpcClient = std::make_shared<rpc::LokidRpcClient>(m_lmq, weak_from_this());
|
m_lokidRpcClient = std::make_shared<rpc::LokidRpcClient>(m_lmq, weak_from_this());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableRPCServer)
|
|
||||||
rpcBindAddr = oxenmq::address(conf.api.m_rpcBindAddr);
|
|
||||||
|
|
||||||
log::debug(logcat, "Starting RPC server");
|
log::debug(logcat, "Starting RPC server");
|
||||||
if (not StartRpcServer())
|
if (not StartRpcServer())
|
||||||
throw std::runtime_error("Failed to start rpc server");
|
throw std::runtime_error("Failed to start rpc server");
|
||||||
|
@ -1260,12 +1255,8 @@ namespace llarp
|
||||||
bool
|
bool
|
||||||
Router::StartRpcServer()
|
Router::StartRpcServer()
|
||||||
{
|
{
|
||||||
if (enableRPCServer)
|
if (m_Config->api.m_enableRPCServer)
|
||||||
{
|
m_RPCServer = std::make_unique<rpc::RpcServer>(m_lmq, this);
|
||||||
m_RPCServer.reset(new rpc::RpcServer{m_lmq, this});
|
|
||||||
m_RPCServer->AsyncServeRPC(rpcBindAddr);
|
|
||||||
LogInfo("Bound RPC server to ", rpcBindAddr.full_address());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -298,9 +298,6 @@ namespace llarp
|
||||||
void
|
void
|
||||||
PumpLL();
|
PumpLL();
|
||||||
|
|
||||||
const oxenmq::address DefaultRPCBindAddr = oxenmq::address::tcp("127.0.0.1", 1190);
|
|
||||||
bool enableRPCServer = false;
|
|
||||||
oxenmq::address rpcBindAddr = DefaultRPCBindAddr;
|
|
||||||
std::unique_ptr<rpc::RpcServer> m_RPCServer;
|
std::unique_ptr<rpc::RpcServer> m_RPCServer;
|
||||||
|
|
||||||
const llarp_time_t _randomStartDelay;
|
const llarp_time_t _randomStartDelay;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "rpc_server.hpp"
|
#include "rpc_server.hpp"
|
||||||
#include <llarp/router/route_poker.hpp>
|
#include <llarp/router/route_poker.hpp>
|
||||||
|
#include <llarp/config/config.hpp>
|
||||||
#include <llarp/constants/platform.hpp>
|
#include <llarp/constants/platform.hpp>
|
||||||
#include <llarp/constants/version.hpp>
|
#include <llarp/constants/version.hpp>
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
@ -23,7 +24,15 @@ namespace llarp::rpc
|
||||||
{
|
{
|
||||||
RpcServer::RpcServer(LMQ_ptr lmq, AbstractRouter* r)
|
RpcServer::RpcServer(LMQ_ptr lmq, AbstractRouter* r)
|
||||||
: m_LMQ{std::move(lmq)}, m_Router{r}, log_subs{*m_LMQ, llarp::logRingBuffer}
|
: m_LMQ{std::move(lmq)}, m_Router{r}, log_subs{*m_LMQ, llarp::logRingBuffer}
|
||||||
{}
|
{
|
||||||
|
for (const auto& addr : r->GetConfig()->api.m_rpcBindAddresses)
|
||||||
|
{
|
||||||
|
m_LMQ->listen_plain(addr.zmq_address());
|
||||||
|
LogInfo("Bound RPC server to ", addr.full_address());
|
||||||
|
}
|
||||||
|
|
||||||
|
this->AddRPCCategories();
|
||||||
|
}
|
||||||
|
|
||||||
/// maybe parse json from message paramter at index
|
/// maybe parse json from message paramter at index
|
||||||
std::optional<nlohmann::json>
|
std::optional<nlohmann::json>
|
||||||
|
@ -141,9 +150,8 @@ namespace llarp::rpc
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RpcServer::AsyncServeRPC(oxenmq::address url)
|
RpcServer::AddRPCCategories()
|
||||||
{
|
{
|
||||||
m_LMQ->listen_plain(url.zmq_address());
|
|
||||||
m_LMQ->add_category("llarp", oxenmq::AuthLevel::none)
|
m_LMQ->add_category("llarp", oxenmq::AuthLevel::none)
|
||||||
.add_request_command("logs", [this](oxenmq::Message& msg) { HandleLogsSubRequest(msg); })
|
.add_request_command("logs", [this](oxenmq::Message& msg) { HandleLogsSubRequest(msg); })
|
||||||
.add_request_command(
|
.add_request_command(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
#include <llarp/config/config.hpp>
|
||||||
#include <oxenmq/oxenmq.h>
|
#include <oxenmq/oxenmq.h>
|
||||||
#include <oxenmq/address.h>
|
#include <oxenmq/address.h>
|
||||||
#include <oxen/log/omq_logger.hpp>
|
#include <oxen/log/omq_logger.hpp>
|
||||||
|
@ -18,8 +19,9 @@ namespace llarp::rpc
|
||||||
{
|
{
|
||||||
explicit RpcServer(LMQ_ptr, AbstractRouter*);
|
explicit RpcServer(LMQ_ptr, AbstractRouter*);
|
||||||
~RpcServer() = default;
|
~RpcServer() = default;
|
||||||
|
|
||||||
void
|
void
|
||||||
AsyncServeRPC(oxenmq::address addr);
|
AddRPCCategories();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void
|
void
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace llarp
|
||||||
py::class_<ApiConfig>(mod, "ApiConfig")
|
py::class_<ApiConfig>(mod, "ApiConfig")
|
||||||
.def(py::init<>())
|
.def(py::init<>())
|
||||||
.def_readwrite("enableRPCServer", &ApiConfig::m_enableRPCServer)
|
.def_readwrite("enableRPCServer", &ApiConfig::m_enableRPCServer)
|
||||||
.def_readwrite("rpcBindAddr", &ApiConfig::m_rpcBindAddr);
|
.def_readwrite("rpcBindAddresses", &ApiConfig::m_rpcBindAddresses);
|
||||||
|
|
||||||
py::class_<LokidConfig>(mod, "LokidConfig")
|
py::class_<LokidConfig>(mod, "LokidConfig")
|
||||||
.def(py::init<>())
|
.def(py::init<>())
|
||||||
|
|
Loading…
Reference in New Issue