Merge pull request #1351 from majestrate/wire-up-lns-2020-09-19

client side lns fixes
pull/1355/head
Jason Rhinelander 4 years ago committed by GitHub
commit d90c1390fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -78,6 +78,7 @@ include(cmake/target_link_libraries_system.cmake)
include(cmake/add_import_library.cmake)
include(cmake/add_log_tag.cmake)
include(cmake/libatomic.cmake)
include(cmake/link_dep_libs.cmake)
if (STATIC_LINK)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX})
@ -148,10 +149,14 @@ endif()
option(FORCE_LOKIMQ_SUBMODULE "force using lokimq submodule" OFF)
if(NOT FORCE_LOKIMQ_SUBMODULE)
find_package(LokiMQ 1.2)
endif()
if(LokiMQ_FOUND)
message(STATUS "using system lokimq")
pkg_check_modules(LOKIMQ liblokimq>=1.2)
endif()
if(LOKIMQ_FOUND)
add_library(lokimq INTERFACE)
link_dep_libs(lokimq INTERFACE "${LOKIMQ_LIBRARY_DIRS}" ${LOKIMQ_LIBRARIES})
target_include_directories(lokimq INTERFACE ${LOKIMQ_INCLUDE_DIRS})
add_library(lokimq::lokimq ALIAS lokimq)
message(STATUS "Found system liblokimq ${LOKIMQ_VERSION}")
else()
message(STATUS "using lokimq submodule")
add_subdirectory(${CMAKE_SOURCE_DIR}/external/loki-mq)

@ -1,21 +0,0 @@
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_check_modules(PC_LOKIMQ QUIET liblokimq>=${LokiMQ_VERSION})
endif()
find_path(LOKIMQ_INCLUDE_DIR lokimq/lokimq.h
HINTS ${PC_LOKIMQ_INCLUDEDIR} ${PC_LOKIMQ_INCLUDE_DIRS})
find_library(LOKIMQ_LIBRARY NAMES lokimq
HINTS ${PC_LOKIMQ_LIBDIR} ${PC_LOKIMQ_LIBRARY_DIRS})
mark_as_advanced(LOKIMQ_INCLUDE_DIR LOKIMQ_LIBRARY)
set(LOKIMQ_LIBRARIES ${LOKIMQ_LIBRARY} ${PC_LOKIMQ_LIBRARIES})
set(LOKIMQ_INCLUDE_DIRS ${LOKIMQ_INCLUDE_DIR})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(LokiMQ DEFAULT_MSG
LOKIMQ_LIBRARY LOKIMQ_INCLUDE_DIR)
mark_as_advanced(LOKIMQ_INCLUDE_DIR LOKIMQ_LIBRARY)

@ -0,0 +1,13 @@
# Properly links a target to a list of library names by finding the given libraries. Takes:
# - a target
# - a linktype (e.g. INTERFACE, PUBLIC, PRIVATE)
# - a library search path (or "" for defaults)
# - any number of library names
function(link_dep_libs target linktype libdirs)
foreach(lib ${ARGN})
find_library(link_lib-${lib} NAMES ${lib} PATHS ${libdirs})
if(link_lib-${lib})
target_link_libraries(${target} ${linktype} ${link_lib-${lib}})
endif()
endforeach()
endfunction()

@ -36,7 +36,7 @@ namespace llarp
constexpr int DefaultWorkerThreads = 1;
constexpr int DefaultNetThreads = 1;
constexpr bool DefaultBlockBogons = true;
constexpr bool DefaultEnablePeerStats = false;
constexpr bool DefaultEnablePeerStats = true;
conf.defineOption<int>("router", "job-queue-size", false, DefaultJobQueueSize, [this](int arg) {
if (arg < 1024)

@ -231,7 +231,7 @@ namespace llarp
{
if (multiValued)
{
for (const auto& value : parsedValues)
for (auto value : parsedValues)
{
acceptor(value);
}

@ -1,5 +1,8 @@
#include <dht/messages/gotname.hpp>
#include <lokimq/bt_serialize.h>
#include <dht/context.hpp>
#include <router/abstractrouter.hpp>
#include <path/path_context.hpp>
namespace llarp::dht
{
@ -47,9 +50,13 @@ namespace llarp::dht
}
bool
GotNameMessage::HandleMessage(struct llarp_dht_context*, std::vector<Ptr_t>&) const
GotNameMessage::HandleMessage(struct llarp_dht_context* ctx, std::vector<Ptr_t>&) const
{
return false;
auto pathset = ctx->impl->GetRouter()->pathContext().GetLocalPathSet(pathID);
if (pathset == nullptr)
return false;
auto copy = std::make_shared<const GotNameMessage>(*this);
return pathset->HandleGotNameMessage(copy);
}
} // namespace llarp::dht

@ -367,6 +367,13 @@ namespace llarp
return false;
}
std::string qname = msg.questions[0].Name();
const auto nameparts = split(qname, ".");
std::string lnsName;
if (nameparts.size() >= 2 and ends_with(qname, ".loki"))
{
lnsName = nameparts[nameparts.size() - 2];
lnsName += ".loki"sv;
}
if (msg.questions[0].qtype == dns::qTypeMX)
{
@ -470,18 +477,25 @@ namespace llarp
addr.as_array(), std::make_shared<dns::Message>(msg), isV6);
}
}
else if (ends_with(qname, ".loki") and service::NameIsValid(qname))
else if (service::NameIsValid(lnsName))
{
return LookupNameAsync(
qname,
[msg = std::make_shared<dns::Message>(msg), isV6, reply, ReplyToLokiDNSWhenReady](
auto maybe) {
lnsName,
[msg = std::make_shared<dns::Message>(msg),
name = Name(),
lnsName,
isV6,
reply,
ReplyToLokiDNSWhenReady](auto maybe) {
if (not maybe.has_value())
{
LogWarn(name, " lns name ", lnsName, " not resolved");
msg->AddNXReply();
reply(*msg);
return;
}
LogInfo(name, " ", lnsName, " resolved to ", maybe->ToString());
msg->AddCNAMEReply(maybe->ToString());
ReplyToLokiDNSWhenReady(*maybe, msg, isV6);
});
}

@ -778,6 +778,7 @@ namespace llarp
handler(maybe);
return true;
}
LogInfo(Name(), " looking up LNS name: ", name);
auto path = PickRandomEstablishedPath();
auto job = new LookupNameJob(this, GenTXID(), name, handler);
return job->SendRequestViaPath(path, m_router);

Loading…
Cancel
Save