more liblokinet api functions

* get/set netid
* set log level
pull/1576/head
Jeff Becker 3 years ago
parent cf7603f20e
commit 3f9e51e391
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -50,6 +50,11 @@ class Context:
self._ctx = self._ln.lokinet_context_new()
self._addrmap = dict()
self._debug = debug
lvl = 'none'
if self._debug:
lvl = 'debug'
self._ln.lokinet_log_level(ctypes.create_string_buffer(lvl.encode('ascii')))
def free(self, ptr):
self._c.free(ptr)
@ -99,6 +104,9 @@ class Context:
self.stop()
self._ln_call("lokinet_context_free")
def set_netid(self, netid):
self._ln.lokinet_set_netid(ctypes.create_string_buffer(netid.encode('ascii')))
class Stream:
def __init__(self, ctx):
@ -115,7 +123,7 @@ class Stream:
addr = result.local_address.decode('ascii')
port = result.local_port
self._id = result.stream_id
print("connect to {} made via {}:{} via {}".format(remote, addr, port, self._id))
print("connection to {} made via {}:{} via {}".format(remote, addr, port, self._id))
return addr, port
@ -135,7 +143,7 @@ def read_and_forward_or_close(readfd, writefd):
else:
return read > 0
ctx = Context()
ctx = None
class Handler(BaseHandler):
@ -169,8 +177,6 @@ class Handler(BaseHandler):
sockfd = sock.makefile('rwb')
sel.register(self.rfile.fileno(), selectors.EVENT_READ, lambda x : read_and_forward_or_close(x, sockfd))
sel.register(sock.fileno(), selectors.EVENT_READ, lambda x : read_and_forward_or_close(x, self.wfile))
print("running")
while True:
events = sel.select(1)
if not events:
@ -191,6 +197,8 @@ ap.add_argument("--ip", type=str, help="ip to bind to", default="127.0.0.1")
ap.add_argument("--port", type=int, help="port to bind to", default=3000)
ap.add_argument("--expose", type=int, help="expose a port to loopback")
ap.add_argument("--bootstrap", type=str, help="bootstrap file", default="bootstrap.signed")
ap.add_argument("--netid", type=str, help="override network id")
ap.add_argument("--debug", action="store_const", const=True, default=False, help="enable verose logging")
if bootstrapFromURL:
ap.add_argument("--bootstrap-url", type=str, help="bootstrap from remote url", default="https://seed.lokinet.org/lokinet.signed")
@ -198,6 +206,12 @@ args = ap.parse_args()
addr = (args.ip, args.port)
server = Server(addr, Handler)
ctx = Context(args.debug)
if args.netid is not None:
print("overriding netid: {}".format(args.netid))
ctx.set_netid(args.netid)
if os.path.exists(args.bootstrap):
with open(args.bootstrap, 'rb') as f:
if ctx.add_bootstrap(f.read()) == 0:
@ -211,6 +225,7 @@ if args.bootstrap_url is not None:
else:
print("failed")
print("starting up...")
if ctx.start() != 0:
print("failed to start")
ctx.stop()
@ -219,7 +234,7 @@ if ctx.start() != 0:
id = None
try:
while not ctx.wait_for_ready(1000):
while not ctx.wait_for_ready(500):
print("waiting for lokinet...")
lokiaddr = ctx.addr()
print("we are {}".format(lokiaddr))

@ -16,12 +16,28 @@ extern "C"
struct lokinet_context*
lokinet_context_new();
/// change our network id globally across all contexts
void
lokinet_set_netid(const char*);
/// get our current netid
/// must be free()'d after use
const char*
lokinet_get_netid();
/// load a bootstrap RC from memory
/// return 0 on success
/// return non zero on fail
int
lokinet_add_bootstrap_rc(const char*, size_t, struct lokinet_context*);
/// set log level
/// possible values: trace, debug, info, warn, error, none
/// return 0 on success
/// return non zero on fail
int
lokinet_log_level(const char*);
/// free a context allocated by lokinet_context_new
void
lokinet_context_free(struct lokinet_context*);

@ -52,9 +52,9 @@ struct lokinet_context
}
[[nodiscard]] auto
endpoint() const
endpoint(std::string name = "default") const
{
return impl->router->hiddenServiceContext().GetEndpointByName("default");
return impl->router->hiddenServiceContext().GetEndpointByName(name);
}
std::unordered_map<int, bool> streams;
@ -138,6 +138,30 @@ extern "C"
return g_context.get();
}
void
lokinet_set_netid(const char* netid)
{
llarp::NetID::DefaultValue() = llarp::NetID{reinterpret_cast<const byte_t*>(netid)};
}
const char*
lokinet_get_netid()
{
const auto netid = llarp::NetID::DefaultValue().ToString();
return strdup(netid.c_str());
}
int
lokinet_log_level(const char* level)
{
if (auto maybe = llarp::LogLevelFromString(level))
{
llarp::SetLogLevel(*maybe);
return 0;
}
return -1;
}
char*
lokinet_address(struct lokinet_context* ctx)
{
@ -187,6 +211,8 @@ extern "C"
if (not ctx)
return -1;
auto lock = ctx->acquire();
ctx->config->router.m_netId = lokinet_get_netid();
ctx->config->logging.m_logLevel = llarp::GetLogLevel();
ctx->runner = std::make_unique<std::thread>([ctx]() {
llarp::util::SetThreadName("llarp-mainloop");
ctx->impl->Configure(ctx->config);

@ -40,7 +40,7 @@ namespace llarp
NetID::NetID(const byte_t* val)
{
size_t len = strnlen(reinterpret_cast<const char*>(val), size());
const size_t len = strnlen(reinterpret_cast<const char*>(val), size());
std::copy(val, val + len, begin());
}

@ -25,7 +25,7 @@ namespace llarp
if (forever)
return false;
const auto lastUsed = std::max(lastSend, lastRecv);
if(lastUsed == 0s)
if (lastUsed == 0s)
return intro.IsExpired(now);
return now > lastUsed && (now - lastUsed > lifetime || intro.IsExpired(now));
}

Loading…
Cancel
Save