From 8eb2c73381c2ed35767b51fde4102ec31d5ab5a1 Mon Sep 17 00:00:00 2001 From: Narr the Reg Date: Mon, 8 Aug 2022 12:49:48 -0500 Subject: [PATCH] core: ldn: Address review comments --- src/core/hle/service/ldn/ldn.cpp | 86 ++++++++++++++------------ src/core/hle/service/ldn/ldn.h | 1 - src/core/hle/service/ldn/ldn_results.h | 5 +- src/core/hle/service/ldn/ldn_types.h | 20 +----- 4 files changed, 51 insertions(+), 61 deletions(-) diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp index c8e1898f4..ff4169f8e 100644 --- a/src/core/hle/service/ldn/ldn.cpp +++ b/src/core/hle/service/ldn/ldn.cpp @@ -8,6 +8,7 @@ #include "core/internal_network/network.h" #include "core/internal_network/network_interface.h" +// This is defined by synchapi.h and conflicts with ServiceContext::CreateEvent #undef CreateEvent namespace Service::LDN { @@ -168,7 +169,7 @@ void IUserLocalCommunicationService::GetNetworkInfo(Kernel::HLERequestContext& c return; } - NetworkInfo networkInfo{}; + NetworkInfo network_info{}; const auto rc = ResultSuccess; if (rc.IsError()) { LOG_ERROR(Service_LDN, "NetworkInfo is not valid {}", rc.raw); @@ -178,9 +179,9 @@ void IUserLocalCommunicationService::GetNetworkInfo(Kernel::HLERequestContext& c } LOG_WARNING(Service_LDN, "(STUBBED) called, ssid='{}', nodes={}", - networkInfo.common.ssid.GetStringValue(), networkInfo.ldn.node_count); + network_info.common.ssid.GetStringValue(), network_info.ldn.node_count); - ctx.WriteBuffer(networkInfo); + ctx.WriteBuffer(network_info); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(rc); } @@ -267,8 +268,7 @@ void IUserLocalCommunicationService::GetNetworkInfoLatestUpdate(Kernel::HLEReque } NetworkInfo info; - std::vector latest_update{}; - latest_update.resize(node_buffer_count); + std::vector latest_update(node_buffer_count); const auto rc = ResultSuccess; if (rc.IsError()) { @@ -311,14 +311,13 @@ void IUserLocalCommunicationService::ScanImpl(Kernel::HLERequestContext& ctx, bo } u16 count = 0; - std::vector networks_info{}; - networks_info.resize(network_info_size); + std::vector network_infos(network_info_size); LOG_WARNING(Service_LDN, "(STUBBED) called, channel={}, filter_scan_flag={}, filter_network_type={}", channel, scan_filter.flag, scan_filter.network_type); - ctx.WriteBuffer(networks_info); + ctx.WriteBuffer(network_infos); IPC::ResponseBuilder rb{ctx, 3}; rb.Push(ResultSuccess); @@ -340,31 +339,39 @@ void IUserLocalCommunicationService::CloseAccessPoint(Kernel::HLERequestContext& } void IUserLocalCommunicationService::CreateNetwork(Kernel::HLERequestContext& ctx) { - LOG_WARNING(Service_LDN, "(STUBBED) called"); - - CreateNetworkImpl(ctx, false); -} - -void IUserLocalCommunicationService::CreateNetworkPrivate(Kernel::HLERequestContext& ctx) { - LOG_WARNING(Service_LDN, "(STUBBED) called"); - - CreateNetworkImpl(ctx, true); -} - -void IUserLocalCommunicationService::CreateNetworkImpl(Kernel::HLERequestContext& ctx, - bool is_private) { IPC::RequestParser rp{ctx}; + struct Parameters { + SecurityConfig security_config; + UserConfig user_config; + INSERT_PADDING_WORDS_NOINIT(1); + NetworkConfig network_config; + }; + static_assert(sizeof(Parameters) == 0x98, "Parameters has incorrect size."); - const auto security_config{rp.PopRaw()}; - [[maybe_unused]] const auto security_parameter{is_private ? rp.PopRaw() - : SecurityParameter{}}; - const auto user_config{rp.PopRaw()}; - rp.Pop(); // Padding - const auto network_Config{rp.PopRaw()}; + LOG_WARNING(Service_LDN, "(STUBBED) called"); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); } + +void IUserLocalCommunicationService::CreateNetworkPrivate(Kernel::HLERequestContext& ctx) { + IPC::RequestParser rp{ctx}; + struct Parameters { + SecurityConfig security_config; + SecurityParameter security_parameter; + UserConfig user_config; + NetworkConfig network_config; + }; + static_assert(sizeof(Parameters) == 0xB8, "Parameters has incorrect size."); + + const auto parameters{rp.PopRaw()}; + + LOG_WARNING(Service_LDN, "(STUBBED) called"); + + IPC::ResponseBuilder rb{ctx, 2}; + rb.Push(ResultSuccess); +} + void IUserLocalCommunicationService::DestroyNetwork(Kernel::HLERequestContext& ctx) { LOG_WARNING(Service_LDN, "(STUBBED) called"); @@ -413,14 +420,18 @@ void IUserLocalCommunicationService::Connect(Kernel::HLERequestContext& ctx) { LOG_WARNING(Service_LDN, "(STUBBED) called"); IPC::RequestParser rp{ctx}; + struct Parameters { + SecurityConfig security_config; + UserConfig user_config; + u32 local_communication_version; + u32 option; + }; + static_assert(sizeof(Parameters) == 0x7C, "Parameters has incorrect size."); - [[maybe_unused]] const auto securityConfig{rp.PopRaw()}; - const auto user_config{rp.PopRaw()}; - const auto local_communication_version{rp.Pop()}; - [[maybe_unused]] const auto option{rp.Pop()}; + const auto parameters{rp.PopRaw()}; - std::vector read_buffer = ctx.ReadBuffer(); - NetworkInfo networkInfo{}; + const std::vector read_buffer = ctx.ReadBuffer(); + NetworkInfo network_info{}; if (read_buffer.size() != sizeof(NetworkInfo)) { LOG_ERROR(Frontend, "NetworkInfo doesn't match read_buffer size!"); @@ -429,7 +440,7 @@ void IUserLocalCommunicationService::Connect(Kernel::HLERequestContext& ctx) { return; } - std::memcpy(&networkInfo, read_buffer.data(), read_buffer.size()); + std::memcpy(&network_info, read_buffer.data(), read_buffer.size()); IPC::ResponseBuilder rb{ctx, 2}; rb.Push(ResultSuccess); @@ -445,9 +456,6 @@ void IUserLocalCommunicationService::Initialize(Kernel::HLERequestContext& ctx) LOG_WARNING(Service_LDN, "(STUBBED) called"); const auto rc = InitializeImpl(ctx); - if (rc.IsError()) { - LOG_ERROR(Service_LDN, "Network isn't initialized, rc={}", rc.raw); - } IPC::ResponseBuilder rb{ctx, 2}; rb.Push(rc); @@ -466,9 +474,6 @@ void IUserLocalCommunicationService::Initialize2(Kernel::HLERequestContext& ctx) LOG_WARNING(Service_LDN, "(STUBBED) called"); const auto rc = InitializeImpl(ctx); - if (rc.IsError()) { - LOG_ERROR(Service_LDN, "Network isn't initialized, rc={}", rc.raw); - } IPC::ResponseBuilder rb{ctx, 2}; rb.Push(rc); @@ -477,6 +482,7 @@ void IUserLocalCommunicationService::Initialize2(Kernel::HLERequestContext& ctx) Result IUserLocalCommunicationService::InitializeImpl(Kernel::HLERequestContext& ctx) { const auto network_interface = Network::GetSelectedNetworkInterface(); if (!network_interface) { + LOG_ERROR(Service_LDN, "No network interface is set"); return ResultAirplaneModeEnabled; } diff --git a/src/core/hle/service/ldn/ldn.h b/src/core/hle/service/ldn/ldn.h index 331455e3f..4ab8f7a9b 100644 --- a/src/core/hle/service/ldn/ldn.h +++ b/src/core/hle/service/ldn/ldn.h @@ -54,7 +54,6 @@ public: void CreateNetwork(Kernel::HLERequestContext& ctx); void CreateNetworkPrivate(Kernel::HLERequestContext& ctx); - void CreateNetworkImpl(Kernel::HLERequestContext& ctx, bool is_private); void DestroyNetwork(Kernel::HLERequestContext& ctx); diff --git a/src/core/hle/service/ldn/ldn_results.h b/src/core/hle/service/ldn/ldn_results.h index 8b6b436b7..f340bda42 100644 --- a/src/core/hle/service/ldn/ldn_results.h +++ b/src/core/hle/service/ldn/ldn_results.h @@ -1,6 +1,5 @@ -// Copyright 2022 yuzu Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later #pragma once diff --git a/src/core/hle/service/ldn/ldn_types.h b/src/core/hle/service/ldn/ldn_types.h index 1132b2eb6..0c07a7397 100644 --- a/src/core/hle/service/ldn/ldn_types.h +++ b/src/core/hle/service/ldn/ldn_types.h @@ -1,6 +1,5 @@ -// Copyright 2022 yuzu emulator team -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later #pragma once @@ -32,14 +31,6 @@ enum class NodeStateChange : u8 { DisconnectAndConnect, }; -inline NodeStateChange operator|(NodeStateChange a, NodeStateChange b) { - return static_cast(static_cast(a) | static_cast(b)); -} - -inline NodeStateChange operator|=(NodeStateChange& a, NodeStateChange b) { - return a = a | b; -} - enum class ScanFilterFlag : u32 { None = 0, LocalCommunicationId = 1 << 0, @@ -135,10 +126,7 @@ struct SessionId { u64 high; u64 low; -public: - bool operator==(const SessionId& b) const { - return (low == b.low) && (high == b.high); - } + bool operator==(const SessionId&) const = default; }; static_assert(sizeof(SessionId) == 0x10, "SessionId is an invalid size"); @@ -160,7 +148,6 @@ struct Ssid { u8 length; std::array raw; -public: std::string GetStringValue() const { return std::string(raw.data(), length); } @@ -173,7 +160,6 @@ struct Ipv4Address { std::array bytes; }; -public: std::string GetStringValue() const { return fmt::format("{}.{}.{}.{}", bytes[3], bytes[2], bytes[1], bytes[0]); }