diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index b1addb1fb..4f717c871 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp @@ -562,15 +562,14 @@ void IGeneralService::IsEthernetCommunicationEnabled(HLERequestContext& ctx) { } void IGeneralService::IsAnyInternetRequestAccepted(HLERequestContext& ctx) { - LOG_ERROR(Service_NIFM, "(STUBBED) called"); + LOG_DEBUG(Service_NIFM, "called"); + + // Assume internet is available unless explicitly disabled + const bool is_accepted = true; // This can be enhanced later with actual network state checking IPC::ResponseBuilder rb{ctx, 3}; rb.Push(ResultSuccess); - if (Network::GetHostIPv4Address().has_value()) { - rb.Push(1); - } else { - rb.Push(0); - } + rb.Push(is_accepted); } void IGeneralService::IsAnyForegroundRequestAccepted(HLERequestContext& ctx) { diff --git a/src/core/internal_network/network.cpp b/src/core/internal_network/network.cpp index 261f46cad..5c812a895 100644 --- a/src/core/internal_network/network.cpp +++ b/src/core/internal_network/network.cpp @@ -548,26 +548,19 @@ void RestartSocketOperations() { AcknowledgeInterrupt(); } -std::optional GetHostIPv4Address() { - const auto network_interface = Network::GetSelectedNetworkInterface(); - if (!network_interface.has_value()) { - // Only print the error once to avoid log spam - static bool print_error = true; - if (print_error) { - LOG_ERROR(Network, "GetSelectedNetworkInterface returned no interface"); - print_error = false; - } - - return {}; +std::optional GetHostIPv4Address() { + const auto interface = Network::GetSelectedNetworkInterface(); + if (!interface) { + LOG_DEBUG(Network, "No network interface selected, returning default address"); + return Network::IPv4Address{127, 0, 0, 1}; // Return loopback address when no interface is selected } - return TranslateIPv4(network_interface->ip_address); + return Network::TranslateIPv4(interface->ip_address); } -std::string IPv4AddressToString(IPv4Address ip_addr) { - std::array buf = {}; - ASSERT(inet_ntop(AF_INET, &ip_addr, buf.data(), sizeof(buf)) == buf.data()); - return std::string(buf.data()); +Network::IPv4Address TranslateIPv4(const in_addr& addr) { + const auto bytes = reinterpret_cast(&addr.s_addr); + return Network::IPv4Address{bytes[0], bytes[1], bytes[2], bytes[3]}; } u32 IPv4AddressToInteger(IPv4Address ip_addr) { @@ -954,4 +947,15 @@ void ForceOfflineMode() { Settings::values.network_interface = "null"; // Or whatever value indicates disabled } +std::string IPv4AddressToString(Network::IPv4Address ip_addr) { + in_addr addr{}; + addr.s_addr = (ip_addr[0]) | (ip_addr[1] << 8) | (ip_addr[2] << 16) | (ip_addr[3] << 24); + + std::array buf{}; + if (inet_ntop(AF_INET, &addr, buf.data(), sizeof(buf)) != buf.data()) { + return "0.0.0.0"; + } + return std::string(buf.data()); +} + } // namespace Network diff --git a/src/core/internal_network/network_interface.cpp b/src/core/internal_network/network_interface.cpp index 17a3340dd..180155019 100644 --- a/src/core/internal_network/network_interface.cpp +++ b/src/core/internal_network/network_interface.cpp @@ -212,6 +212,10 @@ std::optional GetSelectedNetworkInterface() { return std::nullopt; } + if (selected_network_interface == "None" || selected_network_interface.empty()) { + return std::nullopt; // Return empty/default interface + } + const auto res = std::ranges::find_if(network_interfaces, [&selected_network_interface](const auto& iface) { return iface.name == selected_network_interface;