mirror of
https://git.suyu.dev/suyu/suyu.git
synced 2024-11-25 16:22:47 +01:00
service: ldn: Implement lp2p:m and stub IMonitorService
This commit is contained in:
parent
ae5c134ac6
commit
f1f3d490ef
1 changed files with 89 additions and 2 deletions
|
@ -23,19 +23,39 @@ public:
|
||||||
explicit IMonitorService(Core::System& system_) : ServiceFramework{system_, "IMonitorService"} {
|
explicit IMonitorService(Core::System& system_) : ServiceFramework{system_, "IMonitorService"} {
|
||||||
// clang-format off
|
// clang-format off
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "GetStateForMonitor"},
|
{0, &IMonitorService::GetStateForMonitor, "GetStateForMonitor"},
|
||||||
{1, nullptr, "GetNetworkInfoForMonitor"},
|
{1, nullptr, "GetNetworkInfoForMonitor"},
|
||||||
{2, nullptr, "GetIpv4AddressForMonitor"},
|
{2, nullptr, "GetIpv4AddressForMonitor"},
|
||||||
{3, nullptr, "GetDisconnectReasonForMonitor"},
|
{3, nullptr, "GetDisconnectReasonForMonitor"},
|
||||||
{4, nullptr, "GetSecurityParameterForMonitor"},
|
{4, nullptr, "GetSecurityParameterForMonitor"},
|
||||||
{5, nullptr, "GetNetworkConfigForMonitor"},
|
{5, nullptr, "GetNetworkConfigForMonitor"},
|
||||||
{100, nullptr, "InitializeMonitor"},
|
{100, &IMonitorService::InitializeMonitor, "InitializeMonitor"},
|
||||||
{101, nullptr, "FinalizeMonitor"},
|
{101, nullptr, "FinalizeMonitor"},
|
||||||
};
|
};
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void GetStateForMonitor(HLERequestContext& ctx) {
|
||||||
|
LOG_INFO(Service_LDN, "called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushEnum(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitializeMonitor(HLERequestContext& ctx) {
|
||||||
|
LOG_INFO(Service_LDN, "called");
|
||||||
|
|
||||||
|
state = State::Initialized;
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
State state{State::None};
|
||||||
};
|
};
|
||||||
|
|
||||||
class LDNM final : public ServiceFramework<LDNM> {
|
class LDNM final : public ServiceFramework<LDNM> {
|
||||||
|
@ -731,14 +751,81 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ISfMonitorService final : public ServiceFramework<ISfMonitorService> {
|
||||||
|
public:
|
||||||
|
explicit ISfMonitorService(Core::System& system_)
|
||||||
|
: ServiceFramework{system_, "ISfMonitorService"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &ISfMonitorService::Initialize, "Initialize"},
|
||||||
|
{288, &ISfMonitorService::GetGroupInfo, "GetGroupInfo"},
|
||||||
|
{320, nullptr, "GetLinkLevel"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Initialize(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_LDN, "(STUBBED) called");
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.Push(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetGroupInfo(HLERequestContext& ctx) {
|
||||||
|
LOG_WARNING(Service_LDN, "(STUBBED) called");
|
||||||
|
|
||||||
|
struct GroupInfo {
|
||||||
|
std::array<u8, 0x200> info;
|
||||||
|
};
|
||||||
|
|
||||||
|
GroupInfo group_info{};
|
||||||
|
|
||||||
|
ctx.WriteBuffer(group_info);
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class LP2PM final : public ServiceFramework<LP2PM> {
|
||||||
|
public:
|
||||||
|
explicit LP2PM(Core::System& system_) : ServiceFramework{system_, "lp2p:m"} {
|
||||||
|
// clang-format off
|
||||||
|
static const FunctionInfo functions[] = {
|
||||||
|
{0, &LP2PM::CreateMonitorService, "CreateMonitorService"},
|
||||||
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
|
RegisterHandlers(functions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void CreateMonitorService(HLERequestContext& ctx) {
|
||||||
|
IPC::RequestParser rp{ctx};
|
||||||
|
const u64 reserved_input = rp.Pop<u64>();
|
||||||
|
|
||||||
|
LOG_INFO(Service_LDN, "called, reserved_input={}", reserved_input);
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 2, 0, 1};
|
||||||
|
rb.Push(ResultSuccess);
|
||||||
|
rb.PushIpcInterface<ISfMonitorService>(system);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
void LoopProcess(Core::System& system) {
|
void LoopProcess(Core::System& system) {
|
||||||
auto server_manager = std::make_unique<ServerManager>(system);
|
auto server_manager = std::make_unique<ServerManager>(system);
|
||||||
|
|
||||||
server_manager->RegisterNamedService("ldn:m", std::make_shared<LDNM>(system));
|
server_manager->RegisterNamedService("ldn:m", std::make_shared<LDNM>(system));
|
||||||
server_manager->RegisterNamedService("ldn:s", std::make_shared<LDNS>(system));
|
server_manager->RegisterNamedService("ldn:s", std::make_shared<LDNS>(system));
|
||||||
server_manager->RegisterNamedService("ldn:u", std::make_shared<LDNU>(system));
|
server_manager->RegisterNamedService("ldn:u", std::make_shared<LDNU>(system));
|
||||||
|
|
||||||
server_manager->RegisterNamedService("lp2p:app", std::make_shared<LP2PAPP>(system));
|
server_manager->RegisterNamedService("lp2p:app", std::make_shared<LP2PAPP>(system));
|
||||||
server_manager->RegisterNamedService("lp2p:sys", std::make_shared<LP2PSYS>(system));
|
server_manager->RegisterNamedService("lp2p:sys", std::make_shared<LP2PSYS>(system));
|
||||||
|
server_manager->RegisterNamedService("lp2p:m", std::make_shared<LP2PM>(system));
|
||||||
|
|
||||||
ServerManager::RunServer(std::move(server_manager));
|
ServerManager::RunServer(std::move(server_manager));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue