Merge remote-tracking branch 'origin/master' into iwp-redux

pull/783/head
Jeff Becker 5 years ago
commit b5402dc6c3
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -108,6 +108,9 @@ endif(WITH_SHELLHOOKS)
add_compile_options(${OPTIMIZE_FLAGS} ${CRYPTO_FLAGS})
# Always build PIC
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(ABSEIL_DIR vendor/abseil-cpp)
add_subdirectory(vendor/gtest)
@ -117,9 +120,6 @@ add_subdirectory(vendor/cxxopts)
add_subdirectory(vendor/nlohmann)
include_directories(SYSTEM vendor/cxxopts/include)
# Always build PIC
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wno-unknown-warning-option)
endif()

@ -13,7 +13,8 @@ CXX ?= c++
BUILD_TYPE ?= Debug
PYTHON ?= python3
PYTHON ?= python
PYTHON3 ?= python3
SETCAP ?= which setcap && setcap cap_net_admin,cap_net_bind_service=+eip
@ -165,7 +166,7 @@ shadow-build: shadow-configure
$(MAKE) -C $(BUILD_ROOT)
shadow-run: shadow-build
$(PYTHON) $(REPO)/contrib/shadow/genconf.py $(SHADOW_CONFIG)
$(PYTHON3) $(REPO)/contrib/shadow/genconf.py $(SHADOW_CONFIG)
cp $(SHADOW_PLUGIN) $(REPO)/libshadow-plugin-lokinet.so
$(SHADOW_BIN) $(SHADOW_OPTS) $(SHADOW_CONFIG) | $(SHADOW_PARSE)
@ -187,7 +188,7 @@ testnet-build: testnet-configure
testnet:
cp $(EXE) $(TESTNET_EXE)
mkdir -p $(TESTNET_ROOT)
$(PYTHON) $(REPO)/contrib/testnet/genconf.py --bin=$(TESTNET_EXE) --svc=$(TESTNET_SERVERS) --clients=$(TESTNET_CLIENTS) --dir=$(TESTNET_ROOT) --out $(TESTNET_CONF) --ifname=$(TESTNET_IFNAME) --baseport=$(TESTNET_BASEPORT) --ip=$(TESTNET_IP) --netid=$(TESTNET_NETID)
$(PYTHON3) $(REPO)/contrib/testnet/genconf.py --bin=$(TESTNET_EXE) --svc=$(TESTNET_SERVERS) --clients=$(TESTNET_CLIENTS) --dir=$(TESTNET_ROOT) --out $(TESTNET_CONF) --ifname=$(TESTNET_IFNAME) --baseport=$(TESTNET_BASEPORT) --ip=$(TESTNET_IP) --netid=$(TESTNET_NETID)
LLARP_DEBUG=$(TESTNET_DEBUG) supervisord -n -d $(TESTNET_ROOT) -l $(TESTNET_LOG) -c $(TESTNET_CONF)
$(TEST_EXE): debug
@ -279,7 +280,7 @@ docker-kubernetes:
docker build -f docker/loki-svc-kubernetes.Dockerfile .
install-pylokinet:
cd $(REPO)/contrib/py/pylokinet && $(PYTHON) setup.py install
cd $(REPO)/contrib/py/pylokinet && $(PYTHON3) setup.py install
kubernetes-install: install install-pylokinet

@ -14,5 +14,5 @@ include_directories(${CMAKE_MODULE_PATH})
include(ShadowTools)
add_compile_options(-fno-inline -fno-strict-aliasing )
add_definitions(-DTESTNET=1)
add_definitions(-DSHADOW_TESTNET)
add_definitions(-DLOKINET_SHADOW)
include_directories(${SHADOW_ROOT}/include)

@ -21,9 +21,7 @@ if(NOT MSVC_VERSION)
# GNU ld sees fit to merge *all* the .ident sections in object files
# to .r[o]data section one after the other!
add_compile_options(-fno-ident -Wa,-mbig-obj)
find_library(shlwapi_lib shlwapi)
find_library(dbghelp_lib dbghelp)
link_libraries( ${shlwapi_lib} ${dbghelp_lib} )
link_libraries( -lshlwapi -ldbghelp )
add_definitions(-DWINVER=0x0500 -D_WIN32_WINNT=0x0500)
# Wait a minute, if we're not Microsoft C++, nor a Clang paired with Microsoft C++,
# then the only possible option has to be GNU or a GNU-linked Clang!
@ -35,10 +33,7 @@ endif()
get_filename_component(LIBTUNTAP_IMPL ${TT_ROOT}/tuntap-windows.c ABSOLUTE)
get_filename_component(EV_SRC "llarp/ev/ev_win32.cpp" ABSOLUTE)
add_definitions(-DWIN32_LEAN_AND_MEAN -DWIN32 -DWINVER=0x0500)
find_library(ws2_32_lib ws2_32)
find_library(iphlpapi_lib iphlpapi)
set(EXE_LIBS ${STATIC_LIB} ${FS_LIB} ${ws2_32_lib} ${iphlpapi_lib})
set(EXE_LIBS ${STATIC_LIB} ${FS_LIB} ws2_32 iphlpapi)
if(RELEASE_MOTTO)
add_definitions(-DLLARP_RELEASE_MOTTO="${RELEASE_MOTTO}")

@ -13,7 +13,7 @@ def getSetting(s, name, fallback): return name in s and s[name] or fallback
shadowRoot = getSetting(os.environ, "SHADOW_ROOT",
os.path.join(os.environ['HOME'], '.shadow'))
libpath = 'libshadow-plugin-lokinet-shared.so'
libpath = 'libshadow-plugin-lokinet.so'
def nodeconf(conf, baseDir, name, ifname=None, port=None):

@ -1,5 +1,7 @@
FROM compose-base:latest
ENV LOKINET_NETID=docker
COPY ./docker/compose/bootstrap.ini /root/.lokinet/lokinet.ini
CMD ["/lokinet"]

@ -1,7 +1,3 @@
# this configuration was auto generated with 'sane' defaults
# change these values as desired
[router]
# number of crypto worker threads
threads=4
@ -13,18 +9,13 @@ transport-privkey=/root/.lokinet/transport.private
ident-privkey=/root/.lokinet/identity.private
# encryption key for onion routing
encryption-privkey=/root/.lokinet/encryption.private
block-bogons=false
# uncomment following line to set router nickname to 'lokinet'
#nickname=lokinet
nickname=bootstrap
[logging]
level=info
# uncomment for logging to file
#type=file
#file=/path/to/logfile
# uncomment for syslog logging
#type=syslog
[metrics]
json-metrics-path=/root/.lokinet/metrics.json
@ -32,9 +23,6 @@ json-metrics-path=/root/.lokinet/metrics.json
# admin api (disabled by default)
[api]
enabled=true
#authkey=insertpubkey1here
#authkey=insertpubkey2here
#authkey=insertpubkey3here
bind=127.0.0.1:1190
# system settings for privileges and such
@ -58,17 +46,12 @@ dir=/netdb
[lokid]
enabled=false
jsonrpc=127.0.0.1:22023
#service-node-seed=/path/to/servicenode/seed
# network settings
[network]
profiles=/root/.lokinet/profiles.dat
enabled=true
exit=false
#exit-blacklist=tcp:25
#exit-whitelist=tcp:*
#exit-whitelist=udp:*
ifaddr=10.200.0.1/8
ifname=loki-docker0
# ROUTERS ONLY: publish network interfaces for handling inbound traffic

@ -0,0 +1,6 @@
FROM compose-base:latest
COPY ./docker/compose/client.ini /root/.lokinet/lokinet.ini
CMD ["/lokinet"]
EXPOSE 1090/udp 1190/tcp

@ -0,0 +1,52 @@
[router]
# number of crypto worker threads
threads=4
# path to store signed RC
contact-file=/root/.lokinet/self.signed
# path to store transport private key
transport-privkey=/root/.lokinet/transport.private
# path to store identity signing key
ident-privkey=/root/.lokinet/identity.private
# encryption key for onion routing
encryption-privkey=/root/.lokinet/encryption.private
block-bogons=false
[logging]
level=info
[metrics]
json-metrics-path=/root/.lokinet/metrics.json
# admin api (disabled by default)
[api]
enabled=true
bind=127.0.0.1:1190
# system settings for privileges and such
[system]
user=lokinet
group=lokinet
pidfile=/root/.lokinet/lokinet.pid
# dns provider configuration section
[dns]
# resolver
upstream=1.1.1.1
bind=127.0.0.1:53
# network database settings block
[netdb]
# directory for network database skiplist storage
dir=/netdb
# lokid settings (disabled by default)
[lokid]
enabled=false
jsonrpc=127.0.0.1:22023
# network settings
[network]
profiles=/root/.lokinet/profiles.dat
enabled=true
exit=false
ifname=loki-docker0

@ -12,10 +12,8 @@ services:
ports:
- target: 1090
protocol: udp
mode: host
- target: 1190
protocol: tcp
mode: host
volumes:
- bootstrap-dir:/root/.lokinet/
environment:
@ -48,6 +46,34 @@ services:
networks:
testing_net:
client:
depends_on:
- bootstrap-router
build:
context: .
dockerfile: docker/compose/router.Dockerfile
image: router
devices:
- "/dev/net/tun:/dev/net/tun"
ports:
- target: 1090
protocol: udp
mode: host
- target: 1190
protocol: tcp
mode: host
- target: 53
protocol: tcp
mode: host
cap_add:
- NET_ADMIN
volumes:
- bootstrap-dir:/bootstrap/
environment:
- LOKINET_NETID=docker
networks:
testing_net:
volumes:
bootstrap-dir:

@ -1,7 +1,3 @@
# this configuration was auto generated with 'sane' defaults
# change these values as desired
[router]
# number of crypto worker threads
threads=4
@ -13,6 +9,7 @@ transport-privkey=/root/.lokinet/transport.private
ident-privkey=/root/.lokinet/identity.private
# encryption key for onion routing
encryption-privkey=/root/.lokinet/encryption.private
block-bogons=false
# uncomment following line to set router nickname to 'lokinet'
#nickname=lokinet
@ -32,9 +29,6 @@ json-metrics-path=/root/.lokinet/metrics.json
# admin api (disabled by default)
[api]
enabled=true
#authkey=insertpubkey1here
#authkey=insertpubkey2here
#authkey=insertpubkey3here
bind=127.0.0.1:1190
# system settings for privileges and such
@ -64,16 +58,12 @@ add-node=/bootstrap/self.signed
[lokid]
enabled=false
jsonrpc=127.0.0.1:22023
#service-node-seed=/path/to/servicenode/seed
# network settings
[network]
profiles=/root/.lokinet/profiles.dat
enabled=true
exit=false
#exit-blacklist=tcp:25
#exit-whitelist=tcp:*
#exit-whitelist=udp:*
ifaddr=10.200.0.1/8
ifname=loki-docker0

@ -4,9 +4,10 @@
#include <constants/defaults.hpp>
#include <constants/limits.hpp>
#include <net/net.hpp>
#include <router_contact.hpp>
#include <util/fs.hpp>
#include <util/logger.hpp>
#include <util/logger_syslog.hpp>
#include <util/logger.hpp>
#include <util/mem.hpp>
#include <util/memfn.hpp>
#include <util/str.hpp>
@ -33,6 +34,20 @@ namespace llarp
return std::atoi(str.c_str());
}
absl::optional< bool >
setOptBool(string_view val)
{
if(IsTrueValue(val))
{
return true;
}
else if(IsFalseValue(val))
{
return false;
}
return {};
}
void
RouterConfig::fromSection(string_view key, string_view val)
{
@ -146,6 +161,10 @@ namespace llarp
LogDebug("set to use ", m_numNetThreads, " net threads");
}
}
if(key == "block-bogons")
{
m_blockBogons = setOptBool(val);
}
}
void
@ -153,14 +172,7 @@ namespace llarp
{
if(key == "profiling")
{
if(IsTrueValue(val))
{
m_enableProfiling.emplace(true);
}
else if(IsFalseValue(val))
{
m_enableProfiling.emplace(false);
}
m_enableProfiling = setOptBool(val);
}
else if(key == "profiles")
{
@ -413,7 +425,9 @@ namespace llarp
};
if(c.VisitSection(name.c_str(), visitor))
{
return ret;
}
return {};
}
@ -480,7 +494,7 @@ llarp_ensure_config(const char *fname, const char *basedir, bool overwrite,
return false;
}
std::string basepath = "";
std::string basepath;
if(basedir)
{
basepath = basedir;
@ -656,10 +670,14 @@ llarp_ensure_router_config(std::ofstream &f, std::string basepath)
// get ifname
std::string ifname;
if(llarp::GetBestNetIF(ifname, AF_INET))
{
f << ifname << "=1090\n";
}
else
{
f << "# could not autodetect network interface\n"
<< "#eth0=1090\n";
}
f << std::endl;
}
@ -673,7 +691,9 @@ llarp_ensure_client_config(std::ofstream &f, std::string basepath)
auto stream = llarp::util::OpenFileStream< std::ofstream >(
snappExample_fpath, std::ios::binary);
if(!stream)
{
return false;
}
auto &example_f = stream.value();
if(example_f.is_open())
{

@ -112,6 +112,8 @@ namespace llarp
// long term identity key
std::string m_identKeyfile = "identity.key";
absl::optional< bool > m_blockBogons;
bool m_publicOverride = false;
struct sockaddr_in m_ip4addr;
AddressInfo m_addrInfo;
@ -123,20 +125,21 @@ namespace llarp
public:
// clang-format off
size_t minConnectedRouters() const { return fromEnv(m_minConnectedRouters, "MIN_CONNECTED_ROUTERS"); }
size_t maxConnectedRouters() const { return fromEnv(m_maxConnectedRouters, "MAX_CONNECTED_ROUTERS"); }
std::string encryptionKeyfile() const { return fromEnv(m_encryptionKeyfile, "ENCRYPTION_KEYFILE"); }
std::string ourRcFile() const { return fromEnv(m_ourRcFile, "OUR_RC_FILE"); }
std::string transportKeyfile() const { return fromEnv(m_transportKeyfile, "TRANSPORT_KEYFILE"); }
std::string identKeyfile() const { return fromEnv(m_identKeyfile, "IDENT_KEYFILE"); }
std::string netId() const { return fromEnv(m_netId, "NETID"); }
std::string nickname() const { return fromEnv(m_nickname, "NICKNAME"); }
bool publicOverride() const { return fromEnv(m_publicOverride, "PUBLIC_OVERRIDE"); }
const struct sockaddr_in& ip4addr() const { return m_ip4addr; }
const AddressInfo& addrInfo() const { return m_addrInfo; }
int workerThreads() const { return fromEnv(m_workerThreads, "WORKER_THREADS"); }
int numNetThreads() const { return fromEnv(m_numNetThreads, "NUM_NET_THREADS"); }
std::string defaultLinkProto() const { return fromEnv(m_DefaultLinkProto, "LINK_PROTO"); }
size_t minConnectedRouters() const { return fromEnv(m_minConnectedRouters, "MIN_CONNECTED_ROUTERS"); }
size_t maxConnectedRouters() const { return fromEnv(m_maxConnectedRouters, "MAX_CONNECTED_ROUTERS"); }
std::string encryptionKeyfile() const { return fromEnv(m_encryptionKeyfile, "ENCRYPTION_KEYFILE"); }
std::string ourRcFile() const { return fromEnv(m_ourRcFile, "OUR_RC_FILE"); }
std::string transportKeyfile() const { return fromEnv(m_transportKeyfile, "TRANSPORT_KEYFILE"); }
std::string identKeyfile() const { return fromEnv(m_identKeyfile, "IDENT_KEYFILE"); }
std::string netId() const { return fromEnv(m_netId, "NETID"); }
std::string nickname() const { return fromEnv(m_nickname, "NICKNAME"); }
bool publicOverride() const { return fromEnv(m_publicOverride, "PUBLIC_OVERRIDE"); }
const struct sockaddr_in& ip4addr() const { return m_ip4addr; }
const AddressInfo& addrInfo() const { return m_addrInfo; }
int workerThreads() const { return fromEnv(m_workerThreads, "WORKER_THREADS"); }
int numNetThreads() const { return fromEnv(m_numNetThreads, "NUM_NET_THREADS"); }
std::string defaultLinkProto() const { return fromEnv(m_DefaultLinkProto, "LINK_PROTO"); }
absl::optional< bool > blockBogons() const { return fromEnv(m_blockBogons, "BLOCK_BOGONS"); }
// clang-format on
void

@ -205,7 +205,8 @@ namespace llarp
publishData(const std::vector< std::string > &toSend,
const std::string &host, short port)
{
struct addrinfo hints, *addrs;
struct addrinfo hints;
struct addrinfo *addrs;
bzero(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;

@ -392,6 +392,11 @@ namespace llarp
publicOverride = conf->router.publicOverride();
ip4addr = conf->router.ip4addr();
if(!conf->router.blockBogons().value_or(true))
{
RouterContact::BlockBogons = false;
}
// Lokid Config
usingSNSeed = conf->lokid.usingSNSeed;
ident_keyfile = conf->lokid.ident_keyfile;
@ -878,7 +883,7 @@ namespace llarp
ai.ip = *publicAddr.addr6();
ai.port = publicAddr.port();
}
if(IsBogon(ai.ip))
if(RouterContact::BlockBogons && IsBogon(ai.ip))
return;
_rc.addrs.push_back(ai);
if(ExitEnabled())

@ -23,7 +23,7 @@ namespace llarp
return defaultID;
}
bool RouterContact::IgnoreBogons = false;
bool RouterContact::BlockBogons = true;
#ifdef TESTNET
// 1 minute for testnet
@ -37,7 +37,7 @@ namespace llarp
/// an RC inserted long enough ago (30 min) is considered stale and is removed
llarp_time_t RouterContact::StaleInsertionAge = 30 * 60 * 1000;
NetID::NetID(const byte_t *val) : AlignedBuffer< 8 >()
NetID::NetID(const byte_t *val)
{
size_t len = strnlen(reinterpret_cast< const char * >(val), size());
std::copy(val, val + len, begin());
@ -67,6 +67,7 @@ namespace llarp
llarp_buffer_t strbuf;
if(!bencode_read_string(buf, &strbuf))
return false;
if(strbuf.sz > size())
return false;
@ -106,13 +107,17 @@ namespace llarp
return false;
std::string nick = Nick();
if(nick.size())
if(!nick.empty())
{
/* write nickname */
if(!bencode_write_bytestring(buf, "n", 1))
{
return false;
}
if(!bencode_write_bytestring(buf, nick.c_str(), nick.size()))
{
return false;
}
}
/* write encryption pubkey */
@ -167,7 +172,9 @@ namespace llarp
{"addresses", addrs}};
if(HasNick())
{
obj["nickname"] = Nick();
}
return obj;
}
@ -189,9 +196,13 @@ namespace llarp
{
llarp_buffer_t strbuf;
if(!bencode_read_string(buf, &strbuf))
{
return false;
if(strbuf.sz > nickname.size())
}
if(strbuf.sz > llarp::AlignedBuffer< (32) >::size())
{
return false;
}
nickname.Zero();
std::copy(strbuf.base, strbuf.base + strbuf.sz, nickname.begin());
return true;
@ -218,7 +229,7 @@ namespace llarp
bool
RouterContact::IsPublicRouter() const
{
return addrs.size() > 0;
return !addrs.empty();
}
bool
@ -277,7 +288,9 @@ namespace llarp
signature.Zero();
last_updated = time_now_ms();
if(!BEncode(&buf))
{
return false;
}
buf.sz = buf.cur - buf.base;
buf.cur = buf.base;
return CryptoManager::instance()->sign(signature, secretkey, buf);
@ -303,7 +316,7 @@ namespace llarp
}
for(const auto &a : addrs)
{
if(IsBogon(a.ip) && !IgnoreBogons)
if(IsBogon(a.ip) && BlockBogons)
{
llarp::LogError("invalid address info: ", a);
return false;
@ -349,17 +362,23 @@ namespace llarp
std::array< byte_t, MAX_RC_SIZE > tmp;
llarp_buffer_t buf(tmp);
if(!BEncode(&buf))
{
return false;
}
buf.sz = buf.cur - buf.base;
buf.cur = buf.base;
const fs::path fpath = std::string(fname); /* */
auto optional_f =
llarp::util::OpenFileStream< std::ofstream >(fpath, std::ios::binary);
if(!optional_f)
{
return false;
}
auto &f = optional_f.value();
if(!f.is_open())
{
return false;
}
f.write((char *)buf.base, buf.sz);
return true;
}
@ -379,7 +398,9 @@ namespace llarp
f.seekg(0, std::ios::end);
auto l = f.tellg();
if(l > static_cast< std::streamoff >(sizeof tmp))
{
return false;
}
f.seekg(0, std::ios::beg);
f.read((char *)tmp.data(), l);
return BDecode(&buf);

@ -67,7 +67,7 @@ namespace llarp
struct RouterContact
{
/// for unit tests
static bool IgnoreBogons;
static bool BlockBogons;
static llarp_time_t Lifetime;
static llarp_time_t UpdateInterval;
@ -144,7 +144,7 @@ namespace llarp
bool
IsExit() const
{
return exits.size() > 0;
return !exits.empty();
}
bool

@ -21,7 +21,9 @@ namespace llarp
{
auto pos = str.find(".snode");
if(pos == std::string::npos || pos == 0)
{
return false;
}
return Base32Decode(str.substr(0, pos), *this);
}
} // namespace llarp

@ -12,7 +12,7 @@ namespace llarp
using Data = std::array< byte_t, SIZE >;
RouterID() : AlignedBuffer< SIZE >()
RouterID()
{
}

@ -1,4 +1,4 @@
#ifdef SHADOW_TESTNET
#ifdef LOKINET_SHADOW
#include <llarp.h>
/** insert shadow test network specific code here */

@ -7,7 +7,8 @@ static short old_attrs;
namespace llarp
{
Win32LogStream::Win32LogStream(std::ostream& out) : OStreamLogStream(out)
Win32LogStream::Win32LogStream(std::ostream& out)
: OStreamLogStream(out), m_Out(out)
{
// Attempt to use ANSI escapes directly
// if the modern console is active.
@ -26,6 +27,45 @@ namespace llarp
void
Win32LogStream::PreLog(std::stringstream& ss, LogLevel lvl, const char* fname,
int lineno, const std::string& nodename) const
{
if(!isConsoleModern)
{
switch(lvl)
{
case eLogNone:
break;
case eLogDebug:
ss << "[DBG] ";
break;
case eLogInfo:
ss << "[NFO] ";
break;
case eLogWarn:
ss << "[WRN] ";
break;
case eLogError:
ss << "[ERR] ";
break;
}
ss << "[" << nodename << "]"
<< "(" << thread_id_string() << ") " << log_timestamp() << " " << fname
<< ":" << lineno << "\t";
}
else
OStreamLogStream::PreLog(ss, lvl, fname, lineno, nodename);
}
void
Win32LogStream::PostLog(std::stringstream& ss) const
{
if(!isConsoleModern)
ss << std::endl;
else
OStreamLogStream::PostLog(ss);
}
void
Win32LogStream::Print(LogLevel lvl, const char*, const std::string& msg)
{
if(!isConsoleModern)
{
@ -39,46 +79,33 @@ namespace llarp
SetConsoleTextAttribute(fd1,
FOREGROUND_RED | FOREGROUND_GREEN
| FOREGROUND_BLUE); // low white on black
ss << "[DBG] ";
break;
case eLogInfo:
SetConsoleTextAttribute(
fd1,
FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN
| FOREGROUND_BLUE); // high white on black
ss << "[NFO] ";
break;
case eLogWarn:
SetConsoleTextAttribute(fd1,
FOREGROUND_RED | FOREGROUND_GREEN
| FOREGROUND_INTENSITY); // bright yellow
ss << "[WRN] ";
break;
case eLogError:
SetConsoleTextAttribute(
fd1, FOREGROUND_RED | FOREGROUND_INTENSITY); // bright red
ss << "[ERR] ";
break;
}
ss << "[" << nodename << "]"
<< "(" << thread_id_string() << ") " << log_timestamp() << " " << fname
<< ":" << lineno << "\t";
}
else
OStreamLogStream::PreLog(ss, lvl, fname, lineno, nodename);
}
void
Win32LogStream::PostLog(std::stringstream& ss) const
{
m_Out << msg << std::flush;
if(!isConsoleModern)
{
SetConsoleTextAttribute(
fd1, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
ss << std::endl;
}
else
OStreamLogStream::PostLog(ss);
}
} // namespace llarp
#endif

@ -20,8 +20,15 @@ namespace llarp
void Tick(llarp_time_t) override{};
void
Print(LogLevel lvl, const char*, const std::string& msg) override;
private:
std::ostream& m_Out;
bool isConsoleModern =
true; // qol fix so oldfag clients don't see ugly escapes
HANDLE fd1 = GetStdHandle(STD_OUTPUT_HANDLE);
};
} // namespace llarp

@ -10,6 +10,7 @@
// these need to be in a specific order
#include <assert.h>
#include <stdbool.h>
#include <net/net.h>
#include <windows.h>
#include <iphlpapi.h>

@ -120,10 +120,10 @@ struct LinkLayerTest : public test::LlarpTest< llarp::sodium::CryptoLibSodium >
void
SetUp()
{
oldRCLifetime = RouterContact::Lifetime;
RouterContact::IgnoreBogons = true;
RouterContact::Lifetime = 500;
netLoop = llarp_make_ev_loop();
oldRCLifetime = RouterContact::Lifetime;
RouterContact::BlockBogons = false;
RouterContact::Lifetime = 500;
netLoop = llarp_make_ev_loop();
m_logic.reset(new Logic());
}
@ -134,8 +134,8 @@ struct LinkLayerTest : public test::LlarpTest< llarp::sodium::CryptoLibSodium >
Bob.TearDown();
m_logic.reset();
netLoop.reset();
RouterContact::IgnoreBogons = false;
RouterContact::Lifetime = oldRCLifetime;
RouterContact::BlockBogons = true;
RouterContact::Lifetime = oldRCLifetime;
}
static void

@ -184,7 +184,11 @@ int GetCPU() {
// global constructors.
static class VDSOInitHelper {
public:
VDSOInitHelper() { VDSOSupport::Init(); }
VDSOInitHelper() {
#ifndef LOKINET_SHADOW
VDSOSupport::Init();
#endif
}
} vdso_init_helper;
} // namespace debugging_internal

@ -89,6 +89,7 @@ Source: "{#DevPath}ui-win32\bin\release\lokinetui.pdb"; DestDir: "{app}"; Flags:
#endif
; eh, might as well ship the 32-bit port of everything else
Source: "{#DevPath}build\testAll.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#DevPath}build\lokinet-rcutil.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#DevPath}LICENSE"; DestDir: "{app}"; Flags: ignoreversion
; delet this after finishing setup, we only need it to extract the drivers
; and download an initial RC. The UI has its own bootstrap built-in!

Loading…
Cancel
Save