Merge remote-tracking branch 'origin/stable' into dev

This commit is contained in:
Jeff Becker 2021-04-17 09:18:37 -04:00
commit c92894804c
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05
4 changed files with 59 additions and 24 deletions

View File

@ -30,7 +30,7 @@ android {
versionName '0.8.4' versionName '0.8.4'
externalNativeBuild { externalNativeBuild {
cmake { cmake {
// targets "lokinet-android" targets "lokinet-android"
arguments "-DWITH_LTO=OFF", "-DCXXOPTS_BUILD_TESTS=OFF","-DWITH_TESTS=OFF", "-DCMAKE_CROSSCOMPILING=ON", "-DNATIVE_BUILD=OFF", "-DANDROID=ON", "-DANDROID_STL=c++_static", "-DBUILD_STATIC_DEPS=ON", "-DBUILD_SHARED_LIBS=OFF", "-DSTATIC_LINK=ON", "-DANDROID_ARM_MODE=arm", "-DFORCE_OXENMQ_SUBMODULE=ON" arguments "-DWITH_LTO=OFF", "-DCXXOPTS_BUILD_TESTS=OFF","-DWITH_TESTS=OFF", "-DCMAKE_CROSSCOMPILING=ON", "-DNATIVE_BUILD=OFF", "-DANDROID=ON", "-DANDROID_STL=c++_static", "-DBUILD_STATIC_DEPS=ON", "-DBUILD_SHARED_LIBS=OFF", "-DSTATIC_LINK=ON", "-DANDROID_ARM_MODE=arm", "-DFORCE_OXENMQ_SUBMODULE=ON"
cppFlags "-std=c++17" cppFlags "-std=c++17"
abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'

View File

@ -24,6 +24,11 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux")
endif() endif()
target_link_libraries(lokinet-bootstrap PUBLIC cpr::cpr) target_link_libraries(lokinet-bootstrap PUBLIC cpr::cpr)
if(NOT WIN32)
find_package(OpenSSL REQUIRED)
# because debian sid's curl doesn't link against openssl for some godawful cursed reason
target_link_libraries(lokinet-bootstrap PUBLIC OpenSSL::Crypto)
endif()
foreach(exe lokinet lokinet-vpn lokinet-bootstrap) foreach(exe lokinet lokinet-vpn lokinet-bootstrap)
if(WIN32 AND NOT MSVC_VERSION) if(WIN32 AND NOT MSVC_VERSION)
@ -36,6 +41,7 @@ foreach(exe lokinet lokinet-vpn lokinet-bootstrap)
if(WITH_JEMALLOC) if(WITH_JEMALLOC)
target_link_libraries(${exe} PUBLIC jemalloc) target_link_libraries(${exe} PUBLIC jemalloc)
endif() endif()
target_include_directories(${exe} PRIVATE ${CMAKE_SOURCE_DIR})
target_compile_definitions(${exe} PRIVATE -DVERSIONTAG=${GIT_VERSION_REAL}) target_compile_definitions(${exe} PRIVATE -DVERSIONTAG=${GIT_VERSION_REAL})
add_log_tag(${exe}) add_log_tag(${exe})
if(should_install) if(should_install)

View File

@ -1,11 +1,13 @@
#include <cpr/cpr.h> #include <cpr/cpr.h>
#include <llarp/constants/files.hpp> #include <llarp/constants/files.hpp>
#include <llarp/constants/version.hpp> #include <llarp/constants/version.hpp>
#include <llarp/util/buffer.hpp>
#include <llarp/util/fs.hpp> #include <llarp/util/fs.hpp>
#include <llarp/router_contact.hpp>
#include <fstream>
#include <sstream> #include <sstream>
#include <iostream>
#include <unordered_map>
#ifndef _WIN32 #ifndef _WIN32
#include <openssl/x509.h> #include <openssl/x509.h>
@ -14,21 +16,41 @@
namespace namespace
{ {
int int
exit_with_message(std::string msg, int exitcode) fail(std::string msg)
{ {
std::cout << msg << std::endl; std::cout << msg << std::endl;
return exitcode; return 1;
} }
} // namespace } // namespace
int int
main(int argc, char* argv[]) main(int argc, char* argv[])
{ {
std::string bootstrap_url{"https://seed.lokinet.org/lokinet.signed"}; const std::unordered_map<std::string, std::string> bootstrap_urls = {
{"mainnet", "https://seed.lokinet.org/lokinet.signed"},
{"lokinet", "https://seed.lokinet.org/lokinet.signed"},
{"testnet", "https://seed.lokinet.org/testnet.signed"},
{"gamma", "https://seed.lokinet.org/testnet.signed"}};
std::string bootstrap_url = bootstrap_urls.at("lokinet");
fs::path outputfile{llarp::GetDefaultBootstrap()};
if (argc > 1) if (argc > 1)
{ {
bootstrap_url = argv[1]; if (auto itr = bootstrap_urls.find(argv[1]); itr != bootstrap_urls.end())
{
bootstrap_url = itr->second;
}
else
{
bootstrap_url = argv[1];
}
} }
if (argc > 2)
{
outputfile = fs::path{argv[2]};
}
cpr::Response resp = cpr::Response resp =
#ifdef _WIN32 #ifdef _WIN32
cpr::Get( cpr::Get(
@ -41,24 +63,24 @@ main(int argc, char* argv[])
#endif #endif
if (resp.status_code != 200) if (resp.status_code != 200)
{ {
return exit_with_message( return fail("failed to fetch '" + bootstrap_url + "' HTTP " + std::to_string(resp.status_code));
"failed to fetch '" + bootstrap_url + "' HTTP " + std::to_string(resp.status_code), 1);
} }
std::stringstream ss; std::stringstream ss;
ss << resp.text; ss << resp.text;
std::string data{ss.str()}; std::string data{ss.str()};
llarp_buffer_t buf{&data[0], data.size()}; if (data[0] == 'l' or data[0] == 'd')
{
llarp::RouterContact rc; try
if (not rc.BDecode(&buf)) {
return exit_with_message("invalid bootstrap data was fetched", 1); fs::ofstream ofs{outputfile, std::ios::binary};
ofs.exceptions(fs::ofstream::failbit);
const auto path = llarp::GetDefaultBootstrap(); ofs << data;
if (not rc.Write(path)) return 0;
return exit_with_message("failed to write bootstrap file to " + path.string(), 1); }
catch (std::exception& ex)
const llarp::RouterID router{rc.pubkey}; {
return exit_with_message("fetched bootstrap file for " + router.ToString(), 0); return fail(std::string{"failed to write bootstrap file: "} + ex.what());
}
}
return fail("got invalid bootstrap file content");
} }

View File

@ -13,7 +13,14 @@
namespace fs = ghc::filesystem; namespace fs = ghc::filesystem;
#else #else
#include <filesystem> #include <filesystem>
namespace fs = std::filesystem; namespace fs
{
using namespace std::filesystem;
using ifstream = std::ifstream;
using ofstream = std::ofstream;
using fstream = std::fstream;
} // namespace fs
#endif #endif
#ifndef _MSC_VER #ifndef _MSC_VER