From 02d785d30c19f86584b35c2f959f02b6f2f4430f Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Mon, 28 May 2018 09:49:44 -0400 Subject: [PATCH] add release targets to makefile for future purge llarp_alloc colored logging --- .gitignore | 4 ++ CMakeLists.txt | 15 +++-- Makefile | 25 +++++++- include/llarp.hpp | 1 - include/llarp/logger.hpp | 29 ++++++--- include/llarp/logic.h | 2 +- include/llarp/mem.h | 23 +------ include/llarp/nodedb.h | 2 +- include/llarp/router.h | 2 +- include/llarp/version.h | 3 + llarp/context.cpp | 14 +++-- llarp/ev_epoll.hpp | 4 +- llarp/{exit_info.c => exit_info.cpp} | 89 +++++++--------------------- llarp/iwp_link.cpp | 8 +-- llarp/logger.cpp | 8 ++- llarp/{logic.c => logic.cpp} | 14 ++--- llarp/mem.hpp | 21 ------- llarp/nodedb.cpp | 2 +- llarp/router.cpp | 21 ++++--- llarp/router.hpp | 3 +- motto.txt | 1 + 21 files changed, 130 insertions(+), 161 deletions(-) rename llarp/{exit_info.c => exit_info.cpp} (65%) rename llarp/{logic.c => logic.cpp} (82%) create mode 100644 motto.txt diff --git a/.gitignore b/.gitignore index 29f349884..c6ddf23f0 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,7 @@ CMakeCache.txt callgrind.* .gdb_history + +*.sig +*.signed +*.key \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index bfa16da18..4a1706f5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,15 @@ endif(ASAN) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 -Wall -fPIC ${DEBUG_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -fPIC ${DEBUG_FLAGS}") +if(NOT GIT_VERSION) + exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "rev-parse --short HEAD" OUTPUT_VARIABLE GIT_VERSION) + add_definitions(-DGIT_REV="${GIT_VERSION}") +endif() + +if(RELEASE_MOTTO) + add_definitions(-DLLARP_RELEASE_MOTTO="${RELEASE_MOTTO}") +endif() + set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) @@ -17,7 +26,6 @@ set(EXE_SRC daemon/main.cpp) set(LIBS sodium pthread stdc++fs) - set(LIB llarp) set(SHARED_LIB ${LIB}) set(STATIC_LIB ${LIB}-static) @@ -30,16 +38,15 @@ set(LIB_SRC llarp/crypto_async.cpp llarp/crypto_libsodium.cpp llarp/ev.cpp - llarp/exit_info.c + llarp/exit_info.cpp llarp/exit_route.c llarp/iwp_link.cpp llarp/logger.cpp llarp/link.c llarp/link_intro.cpp llarp/link_message.cpp - llarp/logic.c + llarp/logic.cpp llarp/mem.cpp - llarp/mem_std.cpp llarp/net.cpp llarp/nodedb.cpp llarp/router_contact.cpp diff --git a/Makefile b/Makefile index 7581bec38..b1f87e6f9 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,42 @@ all: debug +SIGN = gpg --sign --detach + +TARGETS = llarpd libllarp.so libllarp-static.a +SIGS = $(TARGETS:=.sig) + clean: rm -f build.ninja rules.ninja cmake_install.cmake CMakeCache.txt rm -rf CMakeFiles + rm -f $(TARGETS) + rm -f *.sig debug-configure: clean cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -DASAN=true +release-configure: clean + cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DRELEASE_MOTTO="$(shell cat motto.txt)" + configure: clean - cmake -GNinja -DCMAKE_BUILD_TYPE=Release + cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -compile: configure +build: configure ninja debug: debug-configure ninja +release-compile: release-configure + ninja + strip $(TARGETS) + +$(TARGETS): release-compile + +%.sig: $(TARGETS) + $(SIGN) $* + +release: $(SIGS) + format: clang-format -i $$(find daemon llarp include | grep -E '\.[h,c](pp)?$$') diff --git a/include/llarp.hpp b/include/llarp.hpp index 51f347b7d..71dd8439c 100644 --- a/include/llarp.hpp +++ b/include/llarp.hpp @@ -16,7 +16,6 @@ namespace llarp int num_nethreads = 1; std::vector< std::thread > netio_threads; - llarp_alloc mem; llarp_crypto crypto; llarp_router *router = nullptr; llarp_threadpool *worker = nullptr; diff --git a/include/llarp/logger.hpp b/include/llarp/logger.hpp index a83580e80..a3557ade6 100644 --- a/include/llarp/logger.hpp +++ b/include/llarp/logger.hpp @@ -1,7 +1,8 @@ #ifndef LLARP_LOGGER_HPP #define LLARP_LOGGER_HPP -#include +#include +#include #include #include @@ -15,7 +16,16 @@ namespace llarp eLogError }; - extern LogLevel loglevel; + struct Logger + { + LogLevel minlevel = eLogDebug; + std::ostream& out = std::cout; + }; + + extern Logger _glog; + + void + SetLogLevel(LogLevel lvl); /** internal */ template < typename TArg > @@ -38,30 +48,35 @@ namespace llarp void Log(LogLevel lvl, const char* tag, TArgs&&... args) { - if(loglevel > lvl) + if(_glog.minlevel > lvl) return; std::stringstream ss; switch(lvl) { case eLogDebug: + ss << (char)27 << "[0m"; ss << "[DBG] "; break; case eLogInfo: + ss << (char)27 << "[1m"; ss << "[NFO] "; break; case eLogWarn: + ss << (char)27 << "[1;33m"; ss << "[WRN] "; break; case eLogError: + ss << (char)27 << "[1;31m"; ss << "[ERR] "; break; } - auto now = std::chrono::steady_clock::now().time_since_epoch(); - ss << std::chrono::duration_cast< std::chrono::milliseconds >(now).count() - << " " << tag << "\t"; + auto t = std::time(nullptr); + auto now = std::localtime(&t); + ss << std::put_time(now, "%F %T") << " " << tag << "\t"; LogAppend(ss, std::forward< TArgs >(args)...); - std::cout << ss.str() << std::endl; + ss << (char)27 << "[0;0m"; + _glog.out << ss.str() << std::endl; } template < typename... TArgs > diff --git a/include/llarp/logic.h b/include/llarp/logic.h index eeebc8ea2..a38b5ae16 100644 --- a/include/llarp/logic.h +++ b/include/llarp/logic.h @@ -10,7 +10,7 @@ extern "C" { struct llarp_logic; struct llarp_logic* -llarp_init_logic(struct llarp_alloc* mem); +llarp_init_logic(); void llarp_free_logic(struct llarp_logic** logic); diff --git a/include/llarp/mem.h b/include/llarp/mem.h index 0f851a3d4..35576a96d 100644 --- a/include/llarp/mem.h +++ b/include/llarp/mem.h @@ -1,34 +1,13 @@ #ifndef LLARP_MEM_H_ #define LLARP_MEM_H_ -#ifdef NO_JEMALLOC -#include -#else -#include -#endif #include #include +#include #ifdef __cplusplus extern "C" { #endif -struct llarp_alloc -{ - void *impl; - void *(*alloc)(struct llarp_alloc *mem, size_t sz, size_t align); - void (*free)(struct llarp_alloc *mem, void *ptr); -}; - -void -llarp_mem_stdlib(struct llarp_alloc *mem); -void -llarp_mem_jemalloc(struct llarp_alloc *mem); -void -llarp_mem_dmalloc(struct llarp_alloc *mem); - -void -llarp_mem_slab(struct llarp_alloc *mem, uint32_t *buf, size_t sz); - /** constant time memcmp */ bool llarp_eq(const void *a, const void *b, size_t sz); diff --git a/include/llarp/nodedb.h b/include/llarp/nodedb.h index 40bb92447..2cb923b07 100644 --- a/include/llarp/nodedb.h +++ b/include/llarp/nodedb.h @@ -10,7 +10,7 @@ struct llarp_nodedb; /** create an empty nodedb */ struct llarp_nodedb * -llarp_nodedb_new(struct llarp_alloc *mem, struct llarp_crypto *crypto); +llarp_nodedb_new(struct llarp_crypto *crypto); /** free a nodedb and all loaded rc */ void diff --git a/include/llarp/router.h b/include/llarp/router.h index 9b15ed1b4..28b0875eb 100644 --- a/include/llarp/router.h +++ b/include/llarp/router.h @@ -18,7 +18,7 @@ llarp_findOrCreateIdentity(struct llarp_crypto *crypto, const char *path, byte_t *secretkey); struct llarp_router * -llarp_init_router(struct llarp_alloc *mem, struct llarp_threadpool *worker, +llarp_init_router(struct llarp_threadpool *worker, struct llarp_ev_loop *netloop, struct llarp_logic *logic); void llarp_free_router(struct llarp_router **router); diff --git a/include/llarp/version.h b/include/llarp/version.h index 03ca6d679..7eacf3a42 100644 --- a/include/llarp/version.h +++ b/include/llarp/version.h @@ -25,4 +25,7 @@ #endif #define LLARP_VERSION "llarpd" LLARP_VERSION_NUM +#ifndef LLARP_RELEASE_MOTTO +#define LLARP_RELEASE_MOTTO "(dev build)" +#endif #endif diff --git a/llarp/context.cpp b/llarp/context.cpp index 8a5cb8cdd..0591a2e68 100644 --- a/llarp/context.cpp +++ b/llarp/context.cpp @@ -7,6 +7,7 @@ namespace llarp { Context::Context(std::ostream &stdout) : out(stdout) { + llarp::Info(__FILE__, LLARP_VERSION, " ", LLARP_RELEASE_MOTTO); } Context::~Context() @@ -22,13 +23,14 @@ namespace llarp bool Context::ReloadConfig() { - llarp::Info(__FILE__, LLARP_VERSION, " loading config at ", configfile); + llarp::Info(__FILE__, "loading config at ", configfile); if(!llarp_load_config(config, configfile.c_str())) { llarp_config_iterator iter; iter.user = this; iter.visit = &iter_config; llarp_config_iter(config, &iter); + llarp::Info(__FILE__, "config loaded"); return true; } llarp_free_config(&config); @@ -70,10 +72,10 @@ namespace llarp int Context::Run() { - llarp_mem_stdlib(&mem); + llarp::Info(__FILE__, "starting up"); llarp_ev_loop_alloc(&mainloop); llarp_crypto_libsodium_init(&crypto); - nodedb = llarp_nodedb_new(&mem, &crypto); + nodedb = llarp_nodedb_new(&crypto); if(nodedb_dir[0]) { nodedb_dir[sizeof(nodedb_dir) - 1] = 0; @@ -83,9 +85,9 @@ namespace llarp if(!worker) worker = llarp_init_threadpool(2, "llarp-worker"); // ensure netio thread - logic = llarp_init_logic(&mem); + logic = llarp_init_logic(); - router = llarp_init_router(&mem, worker, mainloop, logic); + router = llarp_init_router(worker, mainloop, logic); if(llarp_configure_router(router, config)) { @@ -98,7 +100,7 @@ namespace llarp pthread_setname_np(netio_threads.back().native_handle(), "llarp-netio"); } - llarp::Info(__FILE__, "running"); + llarp::Info(__FILE__, "Ready"); llarp_logic_mainloop(logic); return 0; } diff --git a/llarp/ev_epoll.hpp b/llarp/ev_epoll.hpp index cb80915a7..b8c3e4b27 100644 --- a/llarp/ev_epoll.hpp +++ b/llarp/ev_epoll.hpp @@ -96,7 +96,7 @@ struct llarp_epoll_loop : public llarp_ev_loop { if(ev->read(readbuf, sizeof(readbuf)) == -1) { - llarp::Info(__FILE__, "close ev"); + llarp::Debug(__FILE__, "close ev"); close_ev(ev); delete ev; } @@ -146,7 +146,7 @@ struct llarp_epoll_loop : public llarp_ev_loop } } llarp::Addr a(*addr); - llarp::Info(__FILE__, "bind to ", a.to_string()); + llarp::Debug(__FILE__, "bind to ", a.to_string()); if(bind(fd, addr, slen) == -1) { perror("bind()"); diff --git a/llarp/exit_info.c b/llarp/exit_info.cpp similarity index 65% rename from llarp/exit_info.c rename to llarp/exit_info.cpp index 0e6523208..6fba9e892 100644 --- a/llarp/exit_info.c +++ b/llarp/exit_info.cpp @@ -3,29 +3,19 @@ #include #include #include - -struct llarp_xi_list_node -{ - struct llarp_xi data; - struct llarp_xi_list_node *next; -}; +#include struct llarp_xi_list { - struct llarp_alloc *mem; - struct llarp_xi_list_node *root; + std::list< llarp_xi > list; }; +extern "C" { + struct llarp_xi_list * -llarp_xi_list_new(struct llarp_alloc *mem) +llarp_xi_list_new() { - struct llarp_xi_list *l = mem->alloc(mem, sizeof(struct llarp_xi_list), 8); - if(l) - { - l->mem = mem; - l->root = NULL; - } - return l; + return new llarp_xi_list; } void @@ -33,22 +23,15 @@ llarp_xi_list_free(struct llarp_xi_list *l) { if(l) { - struct llarp_alloc *mem = l->mem; - struct llarp_xi_list_node *current = l->root; - while(current) - { - struct llarp_xi_list_node *tmp = current->next; - mem->free(mem, current); - current = tmp; - } - mem->free(mem, l); + l->list.clear(); + delete l; } } static bool llarp_xi_iter_bencode(struct llarp_xi_list_iter *iter, struct llarp_xi *xi) { - return llarp_xi_bencode(xi, iter->user); + return llarp_xi_bencode(xi, static_cast< llarp_buffer_t * >(iter->user)); } bool @@ -56,8 +39,7 @@ llarp_xi_list_bencode(struct llarp_xi_list *l, llarp_buffer_t *buff) { if(!bencode_start_list(buff)) return false; - struct llarp_xi_list_iter xi_itr = {.user = buff, - .visit = &llarp_xi_iter_bencode}; + struct llarp_xi_list_iter xi_itr = {buff, nullptr, &llarp_xi_iter_bencode}; llarp_xi_list_iterate(l, &xi_itr); return bencode_end(buff); } @@ -65,15 +47,10 @@ llarp_xi_list_bencode(struct llarp_xi_list *l, llarp_buffer_t *buff) void llarp_xi_list_iterate(struct llarp_xi_list *l, struct llarp_xi_list_iter *iter) { - struct llarp_xi_list_node *current = l->root; - iter->list = l; - while(current) - { - if(!iter->visit(iter, ¤t->data)) + iter->list = l; + for(auto &item : l->list) + if(!iter->visit(iter, &item)) return; - - current = current->next; - } } bool @@ -121,7 +98,7 @@ llarp_xi_decode_dict(struct dict_reader *r, llarp_buffer_t *key) if(!key) return true; - struct llarp_xi *xi = r->user; + llarp_xi *xi = static_cast< llarp_xi * >(r->user); llarp_buffer_t strbuf; uint64_t v; char tmp[128] = {0}; @@ -170,31 +147,15 @@ llarp_xi_decode_dict(struct dict_reader *r, llarp_buffer_t *key) bool llarp_xi_bdecode(struct llarp_xi *xi, llarp_buffer_t *buf) { - struct dict_reader r = {.user = xi, .on_key = &llarp_xi_decode_dict}; + struct dict_reader r = {buf, xi, &llarp_xi_decode_dict}; return bdecode_read_dict(buf, &r); } void llarp_xi_list_pushback(struct llarp_xi_list *l, struct llarp_xi *xi) { - struct llarp_xi_list_node *cur = l->root; - if(cur) - { - // go to the end of the list - while(cur->next) - cur = cur->next; - - cur->next = l->mem->alloc(l->mem, sizeof(struct llarp_xi_list_node), 16); - cur = cur->next; - } - else - { - l->root = l->mem->alloc(l->mem, sizeof(struct llarp_xi_list_node), 16); - cur = l->root; - } - - llarp_xi_copy(&cur->data, xi); - cur->next = 0; + l->list.emplace_back(); + llarp_xi_copy(&l->list.back(), xi); } void @@ -209,21 +170,15 @@ llarp_xi_list_decode_item(struct list_reader *r, bool more) if(!more) return true; - struct llarp_xi_list *l = r->user; - struct llarp_xi xi; - if(!llarp_xi_bdecode(&xi, r->buffer)) - return false; - - llarp_xi_list_pushback(l, &xi); - return true; + llarp_xi_list *l = static_cast< llarp_xi_list * >(r->user); + l->list.emplace_back(); + return llarp_xi_bdecode(&l->list.back(), r->buffer); } bool llarp_xi_list_bdecode(struct llarp_xi_list *l, llarp_buffer_t *buff) { - struct list_reader r = { - .user = l, - .on_item = &llarp_xi_list_decode_item, - }; + list_reader r = {buff, l, &llarp_xi_list_decode_item}; return bdecode_read_list(buff, &r); } +} diff --git a/llarp/iwp_link.cpp b/llarp/iwp_link.cpp index 0ea464b2f..83f9b7157 100644 --- a/llarp/iwp_link.cpp +++ b/llarp/iwp_link.cpp @@ -1198,8 +1198,8 @@ namespace iwp auto itr = m_sessions.find(addr); if(itr != m_sessions.end()) { - llarp::Info(__FILE__, "session with ", addr.to_string(), - " is stale, removing"); + llarp::Debug(__FILE__, "session with ", addr.to_string(), + " is stale, removing"); session *s = static_cast< session * >(itr->second.impl); m_sessions.erase(addr); if(s->keepalive_timer_id) @@ -1221,7 +1221,7 @@ namespace iwp bool ensure_privkey() { - llarp::Info(__FILE__, "ensure transport private key at ", keyfile); + llarp::Debug(__FILE__, "ensure transport private key at ", keyfile); std::error_code ec; if(!fs::exists(keyfile, ec)) { @@ -1456,7 +1456,7 @@ namespace iwp link->netloop = netloop; link->udp.recvfrom = &server::handle_recvfrom; link->udp.user = link; - llarp::Info(__FILE__, "bind IWP link to ", link->addr.to_string()); + llarp::Debug(__FILE__, "bind IWP link to ", link->addr.to_string()); return llarp_ev_add_udp(link->netloop, &link->udp, link->addr) != -1; } diff --git a/llarp/logger.cpp b/llarp/logger.cpp index a84322068..15636856b 100644 --- a/llarp/logger.cpp +++ b/llarp/logger.cpp @@ -2,5 +2,11 @@ namespace llarp { - LogLevel loglevel = eLogDebug; + Logger _glog; + + void + SetLogLevel(LogLevel lvl) + { + _glog.minlevel = lvl; + } } diff --git a/llarp/logic.c b/llarp/logic.cpp similarity index 82% rename from llarp/logic.c rename to llarp/logic.cpp index 6115af040..a5cc075c9 100644 --- a/llarp/logic.c +++ b/llarp/logic.cpp @@ -3,18 +3,18 @@ struct llarp_logic { - struct llarp_alloc* mem; struct llarp_threadpool* thread; struct llarp_timer_context* timer; }; +extern "C" { + struct llarp_logic* -llarp_init_logic(struct llarp_alloc* mem) +llarp_init_logic() { - struct llarp_logic* logic = mem->alloc(mem, sizeof(struct llarp_logic), 8); + llarp_logic* logic = new llarp_logic; if(logic) { - logic->mem = mem; logic->thread = llarp_init_threadpool(1, "llarp-logic"); logic->timer = llarp_init_timer(); } @@ -26,11 +26,10 @@ llarp_free_logic(struct llarp_logic** logic) { if(*logic) { - struct llarp_alloc* mem = (*logic)->mem; llarp_free_threadpool(&(*logic)->thread); llarp_free_timer(&(*logic)->timer); - mem->free(mem, *logic); - *logic = NULL; + delete *logic; + *logic = nullptr; } } @@ -71,3 +70,4 @@ llarp_logic_remove_call(struct llarp_logic* logic, uint32_t id) { llarp_timer_remove_job(logic->timer, id); } +} diff --git a/llarp/mem.hpp b/llarp/mem.hpp index 8126549ba..782528209 100644 --- a/llarp/mem.hpp +++ b/llarp/mem.hpp @@ -6,27 +6,6 @@ namespace llarp { - template < typename T > - static constexpr size_t - alignment() - { - size_t idx = 0; - size_t sz = sizeof(T); - while(sz) - { - ++idx; - sz >>= 1; - } - return 1 << idx; - } - - template < typename T > - static T * - Alloc(llarp_alloc *mem) - { - return static_cast< T * >(mem->alloc(mem, sizeof(T), alignment< T >())); - } - void Zero(void *ptr, size_t sz); diff --git a/llarp/nodedb.cpp b/llarp/nodedb.cpp index b46fb0879..ccbbd4475 100644 --- a/llarp/nodedb.cpp +++ b/llarp/nodedb.cpp @@ -106,7 +106,7 @@ struct llarp_nodedb extern "C" { struct llarp_nodedb * -llarp_nodedb_new(struct llarp_alloc *mem, struct llarp_crypto *crypto) +llarp_nodedb_new(struct llarp_crypto *crypto) { return new llarp_nodedb(crypto); } diff --git a/llarp/router.cpp b/llarp/router.cpp index 4afb6ffec..7b87f4573 100644 --- a/llarp/router.cpp +++ b/llarp/router.cpp @@ -20,8 +20,7 @@ namespace llarp const char *key, const char *val); } // namespace llarp -llarp_router::llarp_router(struct llarp_alloc *m) - : ready(false), mem(m), inbound_msg_handler(this) +llarp_router::llarp_router() : ready(false), inbound_msg_handler(this) { llarp_rc_clear(&rc); } @@ -81,7 +80,7 @@ llarp_router::try_connect(fs::path rcfile) { if(llarp_rc_verify_sig(&crypto, &remote)) { - llarp::Info(__FILE__, "verified signature"); + llarp::Debug(__FILE__, "verified signature"); if(!llarp_router_try_connect(this, &remote)) { llarp::Warn(__FILE__, "session already made"); @@ -118,7 +117,7 @@ llarp_router::Ready() bool llarp_router::SaveRC() { - llarp::Info(__FILE__, "verify RC signature"); + llarp::Debug(__FILE__, "verify RC signature"); if(!llarp_rc_verify_sig(&crypto, &rc)) { llarp::Error(__FILE__, "RC has bad signature not saving"); @@ -134,11 +133,11 @@ llarp_router::SaveRC() if(f.is_open()) { f.write((char *)buf.base, buf.cur - buf.base); - llarp::Info(__FILE__, "RC saved to ", our_rc_file); + llarp::Info(__FILE__, "our RC saved to ", our_rc_file.c_str()); return true; } } - llarp::Error(__FILE__, "did not save RC to ", our_rc_file); + llarp::Error(__FILE__, "did not save RC to ", our_rc_file.c_str()); return false; } @@ -219,7 +218,7 @@ llarp_router::Run() const char *us = llarp::HexEncode< llarp::pubkey, decltype(tmp) >(ourPubkey, tmp); - llarp::Info(__FILE__, "we are ", us); + llarp::Debug(__FILE__, "our router has public key ", us); // start links for(auto link : links) @@ -228,7 +227,7 @@ llarp_router::Run() if(result == -1) llarp::Warn(__FILE__, "Link ", link->name(), " failed to start"); else - llarp::Info(__FILE__, "Link ", link->name(), " started"); + llarp::Debug(__FILE__, "Link ", link->name(), " started"); } for(const auto &itr : connect) @@ -262,10 +261,10 @@ llarp_router::iter_try_connect(llarp_router_link_iter *iter, extern "C" { struct llarp_router * -llarp_init_router(struct llarp_alloc *mem, struct llarp_threadpool *tp, - struct llarp_ev_loop *netloop, struct llarp_logic *logic) +llarp_init_router(struct llarp_threadpool *tp, struct llarp_ev_loop *netloop, + struct llarp_logic *logic) { - llarp_router *router = new llarp_router(mem); + llarp_router *router = new llarp_router(); if(router) { router->netloop = netloop; diff --git a/llarp/router.hpp b/llarp/router.hpp index a53cafab1..b31df8a64 100644 --- a/llarp/router.hpp +++ b/llarp/router.hpp @@ -47,7 +47,6 @@ struct llarp_router llarp_logic *logic; llarp_crypto crypto; llarp_path_context *paths; - llarp_alloc *mem; llarp_seckey_t identity; llarp::InboundMessageHandler inbound_msg_handler; @@ -56,7 +55,7 @@ struct llarp_router std::map< llarp::pubkey, std::vector< llarp::Message > > pendingMessages; - llarp_router(llarp_alloc *mem); + llarp_router(); ~llarp_router(); bool diff --git a/motto.txt b/motto.txt new file mode 100644 index 000000000..855dac79a --- /dev/null +++ b/motto.txt @@ -0,0 +1 @@ +demo or die