From 3bb9359da0bdc2f17b2a6625f6d3631721114074 Mon Sep 17 00:00:00 2001 From: Ash Logan Date: Sun, 7 Apr 2024 16:15:59 +1000 Subject: [PATCH] feat(nncs): Add DNS patches for NNCS hook --- src/patches/dns_hooks.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/patches/dns_hooks.cpp diff --git a/src/patches/dns_hooks.cpp b/src/patches/dns_hooks.cpp new file mode 100644 index 0000000..3c4dfc9 --- /dev/null +++ b/src/patches/dns_hooks.cpp @@ -0,0 +1,36 @@ +#include +#include + +#include "utils/logger.h" +#include "config.h" +#include + +const std::pair dns_replacements[] = { + // NNCS servers. TODO use Pretendo instead of borrowing Nintendo's + { "nncs1.app.nintendowifi.net", "nncs1-lp1.n.n.srv.nintendo.net" }, + { "nncs2.app.nintendowifi.net", "nncs2-lp1.n.n.srv.nintendo.net" }, +}; + +static const char * replace_dns_name(const char *dns_name) { + DEBUG_FUNCTION_LINE("DNS request for %s", dns_name); + +// if (!Config::connect_to_network) return dns_name; + + for (auto [original, replacement] : dns_replacements) { + if (strcmp(original, dns_name) == 0) + return replacement; + } + + return dns_name; +} + +DECL_FUNCTION(struct hostent *, gethostbyname, const char *dns_name) { + return real_gethostbyname(replace_dns_name(dns_name)); +} +// might need a WUPS_MUST_REPLACE_FOR_PROCESS for Friends +WUPS_MUST_REPLACE(gethostbyname, WUPS_LOADER_LIBRARY_NSYSNET, gethostbyname); + +DECL_FUNCTION(int, getaddrinfo, const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res) { + return real_getaddrinfo(replace_dns_name(node), service, hints, res); +} +WUPS_MUST_REPLACE(getaddrinfo, WUPS_LOADER_LIBRARY_NSYSNET, getaddrinfo); \ No newline at end of file