diff --git a/daemon/lokinet.cpp b/daemon/lokinet.cpp index 310211082..b56227f40 100644 --- a/daemon/lokinet.cpp +++ b/daemon/lokinet.cpp @@ -275,7 +275,8 @@ namespace (MINIDUMP_TYPE)(MiniDumpWithFullMemory | MiniDumpWithFullMemoryInfo | MiniDumpWithHandleData | MiniDumpWithUnloadedModules | MiniDumpWithThreadInfo); const std::string fname = - "C:\\ProgramData\\lokinet\\crash-{}.dump"_format(llarp::time_now_ms().count()); + fmt::format("C:\\ProgramData\\lokinet\\crash-{}.dump", llarp::time_now_ms().count()); + HANDLE hDumpFile; SYSTEMTIME stLocalTime; GetLocalTime(&stLocalTime); diff --git a/llarp/util/str.cpp b/llarp/util/str.cpp index 79329d756..84c488730 100644 --- a/llarp/util/str.cpp +++ b/llarp/util/str.cpp @@ -95,4 +95,22 @@ namespace llarp ch = ch + ('a' - 'A'); return src; } + + std::wstring + to_wide(std::string data) + { + std::wstring buf; + buf.resize(data.size()); +#ifdef _WIN32 + // win32 specific codepath because balmer made windows so that man may suffer + if (MultiByteToWideChar(CP_UTF8, 0, data.c_str(), data.size(), buf.data(), buf.size()) == 0) + throw win32::error{GetLastError(), "failed to convert string to wide string"}; + +#else + // this dumb but probably works (i guess?) + std::transform( + data.begin(), data.end(), buf.begin(), [](const auto& ch) -> wchar_t { return ch; }); +#endif + return buf; + } } // namespace llarp diff --git a/llarp/util/str.hpp b/llarp/util/str.hpp index 0ea783898..7f4085fc5 100644 --- a/llarp/util/str.hpp +++ b/llarp/util/str.hpp @@ -2,6 +2,7 @@ #include +#include #include #include #include @@ -96,4 +97,9 @@ namespace llarp std::string_view TrimWhitespace(std::string_view str); + + /// convert a "normal" string into a wide string + std::wstring + to_wide(std::string data); + } // namespace llarp diff --git a/llarp/vpn/win32.cpp b/llarp/vpn/win32.cpp index 1e8dee467..9ca93a25d 100644 --- a/llarp/vpn/win32.cpp +++ b/llarp/vpn/win32.cpp @@ -89,8 +89,10 @@ namespace llarp::win32 if (not range.Contains(ifaddr)) b = false; } + // TODO: FIXME if (b) - gateways.emplace(*iface.gateway); + throw std::runtime_error{"FIXME ALREADY"}; + // gateways.emplace(*iface.gateway); } return {gateways.begin(), gateways.end()}; } diff --git a/llarp/win32/guid.hpp b/llarp/win32/guid.hpp index 06de11b1e..567a9586f 100644 --- a/llarp/win32/guid.hpp +++ b/llarp/win32/guid.hpp @@ -15,12 +15,15 @@ namespace llarp::win32 MakeDeterministicGUID(Data data) { ShortHash h{}; - auto hash = [&h](auto data) { crypto::shorthash(h, data); }; + auto hash = [&h](uint8_t* d, size_t size) { crypto::shorthash(h, d, size); }; if constexpr (std::is_same_v) - hash(llarp_buffer_t{reinterpret_cast(data.data()), data.size()}); + hash(reinterpret_cast(data.data()), data.size()); else - hash(llarp_buffer_t{data}); + { + auto dat = llarp_buffer_t{data}; + hash(dat.base, dat.sz); + } GUID guid{}; std::copy_n( h.begin(), std::min(sizeof(GUID), sizeof(ShortHash)), reinterpret_cast(&guid));