diff options
| author | 2023-09-28 23:07:24 -0600 | |
|---|---|---|
| committer | 2023-10-01 11:38:30 -0600 | |
| commit | f1f3d490efb0cbe0d0014a0879b9d1bab7dd196b (patch) | |
| tree | 63c053d64c0fb229346affc64421986dd36c23f4 /src/core/hle/service/ldn | |
| parent | service: am: Set push in arguments according to the launched applet (diff) | |
| download | yuzu-f1f3d490efb0cbe0d0014a0879b9d1bab7dd196b.tar.gz yuzu-f1f3d490efb0cbe0d0014a0879b9d1bab7dd196b.tar.xz yuzu-f1f3d490efb0cbe0d0014a0879b9d1bab7dd196b.zip | |
service: ldn: Implement lp2p:m and stub IMonitorService
Diffstat (limited to 'src/core/hle/service/ldn')
| -rw-r--r-- | src/core/hle/service/ldn/ldn.cpp | 91 |
1 files changed, 89 insertions, 2 deletions
diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp index 9d149a7cd..7927f8264 100644 --- a/src/core/hle/service/ldn/ldn.cpp +++ b/src/core/hle/service/ldn/ldn.cpp | |||
| @@ -23,19 +23,39 @@ public: | |||
| 23 | explicit IMonitorService(Core::System& system_) : ServiceFramework{system_, "IMonitorService"} { | 23 | explicit IMonitorService(Core::System& system_) : ServiceFramework{system_, "IMonitorService"} { |
| 24 | // clang-format off | 24 | // clang-format off |
| 25 | static const FunctionInfo functions[] = { | 25 | static const FunctionInfo functions[] = { |
| 26 | {0, nullptr, "GetStateForMonitor"}, | 26 | {0, &IMonitorService::GetStateForMonitor, "GetStateForMonitor"}, |
| 27 | {1, nullptr, "GetNetworkInfoForMonitor"}, | 27 | {1, nullptr, "GetNetworkInfoForMonitor"}, |
| 28 | {2, nullptr, "GetIpv4AddressForMonitor"}, | 28 | {2, nullptr, "GetIpv4AddressForMonitor"}, |
| 29 | {3, nullptr, "GetDisconnectReasonForMonitor"}, | 29 | {3, nullptr, "GetDisconnectReasonForMonitor"}, |
| 30 | {4, nullptr, "GetSecurityParameterForMonitor"}, | 30 | {4, nullptr, "GetSecurityParameterForMonitor"}, |
| 31 | {5, nullptr, "GetNetworkConfigForMonitor"}, | 31 | {5, nullptr, "GetNetworkConfigForMonitor"}, |
| 32 | {100, nullptr, "InitializeMonitor"}, | 32 | {100, &IMonitorService::InitializeMonitor, "InitializeMonitor"}, |
| 33 | {101, nullptr, "FinalizeMonitor"}, | 33 | {101, nullptr, "FinalizeMonitor"}, |
| 34 | }; | 34 | }; |
| 35 | // clang-format on | 35 | // clang-format on |
| 36 | 36 | ||
| 37 | RegisterHandlers(functions); | 37 | RegisterHandlers(functions); |
| 38 | } | 38 | } |
| 39 | |||
| 40 | private: | ||
| 41 | void GetStateForMonitor(HLERequestContext& ctx) { | ||
| 42 | LOG_INFO(Service_LDN, "called"); | ||
| 43 | |||
| 44 | IPC::ResponseBuilder rb{ctx, 3}; | ||
| 45 | rb.Push(ResultSuccess); | ||
| 46 | rb.PushEnum(state); | ||
| 47 | } | ||
| 48 | |||
| 49 | void InitializeMonitor(HLERequestContext& ctx) { | ||
| 50 | LOG_INFO(Service_LDN, "called"); | ||
| 51 | |||
| 52 | state = State::Initialized; | ||
| 53 | |||
| 54 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 55 | rb.Push(ResultSuccess); | ||
| 56 | } | ||
| 57 | |||
| 58 | State state{State::None}; | ||
| 39 | }; | 59 | }; |
| 40 | 60 | ||
| 41 | class LDNM final : public ServiceFramework<LDNM> { | 61 | class LDNM final : public ServiceFramework<LDNM> { |
| @@ -731,14 +751,81 @@ public: | |||
| 731 | } | 751 | } |
| 732 | }; | 752 | }; |
| 733 | 753 | ||
| 754 | class ISfMonitorService final : public ServiceFramework<ISfMonitorService> { | ||
| 755 | public: | ||
| 756 | explicit ISfMonitorService(Core::System& system_) | ||
| 757 | : ServiceFramework{system_, "ISfMonitorService"} { | ||
| 758 | // clang-format off | ||
| 759 | static const FunctionInfo functions[] = { | ||
| 760 | {0, &ISfMonitorService::Initialize, "Initialize"}, | ||
| 761 | {288, &ISfMonitorService::GetGroupInfo, "GetGroupInfo"}, | ||
| 762 | {320, nullptr, "GetLinkLevel"}, | ||
| 763 | }; | ||
| 764 | // clang-format on | ||
| 765 | |||
| 766 | RegisterHandlers(functions); | ||
| 767 | } | ||
| 768 | |||
| 769 | private: | ||
| 770 | void Initialize(HLERequestContext& ctx) { | ||
| 771 | LOG_WARNING(Service_LDN, "(STUBBED) called"); | ||
| 772 | |||
| 773 | IPC::ResponseBuilder rb{ctx, 3}; | ||
| 774 | rb.Push(ResultSuccess); | ||
| 775 | rb.Push(0); | ||
| 776 | } | ||
| 777 | |||
| 778 | void GetGroupInfo(HLERequestContext& ctx) { | ||
| 779 | LOG_WARNING(Service_LDN, "(STUBBED) called"); | ||
| 780 | |||
| 781 | struct GroupInfo { | ||
| 782 | std::array<u8, 0x200> info; | ||
| 783 | }; | ||
| 784 | |||
| 785 | GroupInfo group_info{}; | ||
| 786 | |||
| 787 | ctx.WriteBuffer(group_info); | ||
| 788 | IPC::ResponseBuilder rb{ctx, 2}; | ||
| 789 | rb.Push(ResultSuccess); | ||
| 790 | } | ||
| 791 | }; | ||
| 792 | |||
| 793 | class LP2PM final : public ServiceFramework<LP2PM> { | ||
| 794 | public: | ||
| 795 | explicit LP2PM(Core::System& system_) : ServiceFramework{system_, "lp2p:m"} { | ||
| 796 | // clang-format off | ||
| 797 | static const FunctionInfo functions[] = { | ||
| 798 | {0, &LP2PM::CreateMonitorService, "CreateMonitorService"}, | ||
| 799 | }; | ||
| 800 | // clang-format on | ||
| 801 | |||
| 802 | RegisterHandlers(functions); | ||
| 803 | } | ||
| 804 | |||
| 805 | private: | ||
| 806 | void CreateMonitorService(HLERequestContext& ctx) { | ||
| 807 | IPC::RequestParser rp{ctx}; | ||
| 808 | const u64 reserved_input = rp.Pop<u64>(); | ||
| 809 | |||
| 810 | LOG_INFO(Service_LDN, "called, reserved_input={}", reserved_input); | ||
| 811 | |||
| 812 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||
| 813 | rb.Push(ResultSuccess); | ||
| 814 | rb.PushIpcInterface<ISfMonitorService>(system); | ||
| 815 | } | ||
| 816 | }; | ||
| 817 | |||
| 734 | void LoopProcess(Core::System& system) { | 818 | void LoopProcess(Core::System& system) { |
| 735 | auto server_manager = std::make_unique<ServerManager>(system); | 819 | auto server_manager = std::make_unique<ServerManager>(system); |
| 736 | 820 | ||
| 737 | server_manager->RegisterNamedService("ldn:m", std::make_shared<LDNM>(system)); | 821 | server_manager->RegisterNamedService("ldn:m", std::make_shared<LDNM>(system)); |
| 738 | server_manager->RegisterNamedService("ldn:s", std::make_shared<LDNS>(system)); | 822 | server_manager->RegisterNamedService("ldn:s", std::make_shared<LDNS>(system)); |
| 739 | server_manager->RegisterNamedService("ldn:u", std::make_shared<LDNU>(system)); | 823 | server_manager->RegisterNamedService("ldn:u", std::make_shared<LDNU>(system)); |
| 824 | |||
| 740 | server_manager->RegisterNamedService("lp2p:app", std::make_shared<LP2PAPP>(system)); | 825 | server_manager->RegisterNamedService("lp2p:app", std::make_shared<LP2PAPP>(system)); |
| 741 | server_manager->RegisterNamedService("lp2p:sys", std::make_shared<LP2PSYS>(system)); | 826 | server_manager->RegisterNamedService("lp2p:sys", std::make_shared<LP2PSYS>(system)); |
| 827 | server_manager->RegisterNamedService("lp2p:m", std::make_shared<LP2PM>(system)); | ||
| 828 | |||
| 742 | ServerManager::RunServer(std::move(server_manager)); | 829 | ServerManager::RunServer(std::move(server_manager)); |
| 743 | } | 830 | } |
| 744 | 831 | ||