summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/service/nifm/nifm.cpp11
-rw-r--r--src/core/internal_network/network.cpp36
-rw-r--r--src/core/internal_network/network_interface.cpp4
3 files changed, 29 insertions, 22 deletions
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<u8>(1);
- } else {
- rb.Push<u8>(0);
- }
+ rb.Push<u8>(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<IPv4Address> 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<Network::IPv4Address> 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<char, INET_ADDRSTRLEN> 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<const uint8_t*>(&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<char, INET_ADDRSTRLEN> 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<NetworkInterface> 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;