diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/hle/service/ldn/lan_discovery.cpp | 11 | ||||
-rw-r--r-- | src/core/hle/service/ldn/ldn.cpp | 45 | ||||
-rw-r--r-- | src/core/internal_network/network_interface.cpp | 2 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 1 |
4 files changed, 35 insertions, 24 deletions
diff --git a/src/core/hle/service/ldn/lan_discovery.cpp b/src/core/hle/service/ldn/lan_discovery.cpp index 8f3c045501..1b4b474e73 100644 --- a/src/core/hle/service/ldn/lan_discovery.cpp +++ b/src/core/hle/service/ldn/lan_discovery.cpp @@ -487,7 +487,7 @@ void LANDiscovery::ReceivePacket(const Network::LDNPacket& packet) { std::scoped_lock lock{packet_mutex}; switch (packet.type) { case Network::LDNPacketType::Scan: { - LOG_INFO(Frontend, "Scan packet received!"); + LOG_DEBUG(Frontend, "Scan packet received!"); if (state == State::AccessPointCreated) { // Reply to the sender SendPacket(Network::LDNPacketType::ScanResp, network_info, packet.local_ip); @@ -495,7 +495,7 @@ void LANDiscovery::ReceivePacket(const Network::LDNPacket& packet) { break; } case Network::LDNPacketType::ScanResp: { - LOG_INFO(Frontend, "ScanResp packet received!"); + LOG_DEBUG(Frontend, "ScanResp packet received!"); NetworkInfo info{}; std::memcpy(&info, packet.data.data(), sizeof(NetworkInfo)); @@ -611,13 +611,6 @@ MacAddress LANDiscovery::GetFakeMac() const { Result LANDiscovery::GetNodeInfo(NodeInfo& node, const UserConfig& userConfig, u16 localCommunicationVersion) { - const auto network_interface = Network::GetSelectedNetworkInterface(); - - if (!network_interface) { - LOG_ERROR(Service_LDN, "No network interface available"); - return ResultNoIpAddress; - } - node.mac_address = GetFakeMac(); node.is_connected = 1; std::memcpy(node.user_name.data(), userConfig.user_name.data(), UserNameBytesMax + 1); diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp index c49c61cff4..addd40a911 100644 --- a/src/core/hle/service/ldn/ldn.cpp +++ b/src/core/hle/service/ldn/ldn.cpp @@ -150,7 +150,7 @@ public: } ~IUserLocalCommunicationService() { - if (is_initialized) { + if (is_network_available) { if (auto room_member = room_network.GetRoomMember().lock()) { room_member->Unbind(ldn_packet_received); } @@ -193,7 +193,7 @@ public: NetworkInfo network_info{}; const auto rc = lan_discovery.GetNetworkInfo(network_info); if (rc.IsError()) { - LOG_ERROR(Service_LDN, "NetworkInfo is not valid {}", rc.raw); + LOG_DEBUG(Service_LDN, "NetworkInfo is not valid {}", rc.raw); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(rc); return; @@ -205,6 +205,14 @@ public: } void GetIpv4Address(Kernel::HLERequestContext& ctx) { + if (!is_network_available) { + IPC::ResponseBuilder rb{ctx, 4}; + rb.Push(ResultSuccess); + rb.PushRaw(Ipv4Address{127, 0, 0, 1}); + rb.PushRaw(Ipv4Address{255, 255, 255, 0}); + return; + } + const auto network_interface = Network::GetSelectedNetworkInterface(); if (!network_interface) { @@ -342,6 +350,13 @@ public: return; } + if (!is_network_available) { + IPC::ResponseBuilder rb{ctx, 3}; + rb.Push(ResultSuccess); + rb.Push(0); + return; + } + u16 count = 0; std::vector<NetworkInfo> network_infos(network_info_size); Result rc = lan_discovery.Scan(network_infos, count, scan_filter); @@ -488,18 +503,18 @@ public: } void Initialize(Kernel::HLERequestContext& ctx) { - const auto rc = InitializeImpl(ctx); - if (rc.IsError()) { - LOG_ERROR(Service_LDN, "Network isn't initialized, rc={}", rc.raw); - } + InitializeImpl(ctx); + // Initialize always returns success IPC::ResponseBuilder rb{ctx, 2}; - rb.Push(rc); + rb.Push(ResultSuccess); } void Finalize(Kernel::HLERequestContext& ctx) { - if (auto room_member = room_network.GetRoomMember().lock()) { - room_member->Unbind(ldn_packet_received); + if (is_network_available) { + if (auto room_member = room_network.GetRoomMember().lock()) { + room_member->Unbind(ldn_packet_received); + } } is_initialized = false; @@ -519,22 +534,25 @@ public: } Result InitializeImpl(Kernel::HLERequestContext& ctx) { + lan_discovery.Initialize([&]() { OnEventFired(); }); + is_initialized = true; + is_network_available = false; + const auto network_interface = Network::GetSelectedNetworkInterface(); if (!network_interface) { LOG_ERROR(Service_LDN, "No network interface is set"); - return ResultAirplaneModeEnabled; + return ResultSuccess; } if (auto room_member = room_network.GetRoomMember().lock()) { ldn_packet_received = room_member->BindOnLdnPacketReceived( [this](const Network::LDNPacket& packet) { OnLDNPacketReceived(packet); }); + is_network_available = true; } else { LOG_ERROR(Service_LDN, "Couldn't bind callback!"); - return ResultAirplaneModeEnabled; + return ResultSuccess; } - lan_discovery.Initialize([&]() { OnEventFired(); }); - is_initialized = true; return ResultSuccess; } @@ -547,6 +565,7 @@ public: Network::RoomMember::CallbackHandle<Network::LDNPacket> ldn_packet_received; bool is_initialized{}; + bool is_network_available{}; }; class LDNS final : public ServiceFramework<LDNS> { diff --git a/src/core/internal_network/network_interface.cpp b/src/core/internal_network/network_interface.cpp index 057fd36617..97f24e1b1d 100644 --- a/src/core/internal_network/network_interface.cpp +++ b/src/core/internal_network/network_interface.cpp @@ -199,7 +199,7 @@ std::optional<NetworkInterface> GetSelectedNetworkInterface() { }); if (res == network_interfaces.end()) { - LOG_ERROR(Network, "Couldn't find selected interface \"{}\"", selected_network_interface); + LOG_DEBUG(Network, "Couldn't find selected interface \"{}\"", selected_network_interface); return std::nullopt; } diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 2aae746f01..bedb4c7e28 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -940,7 +940,6 @@ void GMainWindow::InitializeWidgets() { statusBar()->addPermanentWidget(label); } - // TODO (flTobi): Add the widget when multiplayer is fully implemented statusBar()->addPermanentWidget(multiplayer_state->GetStatusText(), 0); statusBar()->addPermanentWidget(multiplayer_state->GetStatusIcon(), 0); |