fixup edge case on windows

* add platform detection constexprs
* add quark for platforms without native ipv6 like windows, exit mapping cannot work with ipv6 yet
pull/1918/head
Jeff 2 years ago
parent e3aedda4c8
commit 3fccb3ab0c
No known key found for this signature in database
GPG Key ID: 025C02EE3A092F2D

@ -0,0 +1,65 @@
#pragma once
/// namespace for platform feature detection constexprs
namespace llarp::platform
{
/// are we linux ?
inline constexpr bool is_linux =
#ifdef __linux__
true
#else
false
#endif
;
/// are we freebsd ?
inline constexpr bool is_freebsd =
#ifdef __FreeBSD__
true
#else
false
#endif
;
/// are we windows ?
inline constexpr bool is_windows =
#ifdef _WIN32
true
#else
false
#endif
;
/// are we an apple platform ?
inline constexpr bool is_apple =
#ifdef __apple__
true
#else
false
#endif
;
/// are we an android platform ?
inline constexpr bool is_android =
#ifdef ANDROID
true
#else
false
#endif
;
/// are we an iphone ?
inline constexpr bool is_iphone =
#ifdef IOS
true
#else
false
#endif
;
/// are we a mobile phone ?
inline constexpr bool is_mobile = is_android or is_iphone;
/// does this platform support native ipv6 ?
inline constexpr bool supports_ipv6 = not is_windows;
} // namespace llarp::platform

@ -1,5 +1,6 @@
#include "rpc_server.hpp"
#include <llarp/router/route_poker.hpp>
#include <llarp/constants/platform.hpp>
#include <llarp/constants/version.hpp>
#include <nlohmann/json.hpp>
#include <llarp/exit/context.hpp>
@ -432,13 +433,27 @@ namespace llarp::rpc
const auto range_itr = obj.find("range");
if (range_itr == obj.end())
{
range.FromString("::/0");
// platforms without ipv6 support will shit themselves
// here if we give them an exit mapping that is ipv6
if constexpr (platform::supports_ipv6)
{
range.FromString("::/0");
}
else
{
range.FromString("0.0.0.0/0");
}
}
else if (not range.FromString(range_itr->get<std::string>()))
{
reply(CreateJSONError("invalid ip range"));
return;
}
if (not platform::supports_ipv6 and not range.IsV4())
{
reply(CreateJSONError("ipv6 ranges not supported on this platform"));
return;
}
std::optional<std::string> token;
const auto token_itr = obj.find("token");
if (token_itr != obj.end())

Loading…
Cancel
Save