Add a base socket (bsd) services implementation

This stubs enough to pass SMO's socket init.
This commit is contained in:
Billy Laws 2020-07-09 14:35:51 +01:00 committed by ◱ PixelyIon
parent 2aefb4ae84
commit a2c6a2a4ff
5 changed files with 51 additions and 0 deletions

View File

@ -122,6 +122,7 @@ add_library(skyline SHARED
${source_DIR}/skyline/services/nifm/IStaticService.cpp
${source_DIR}/skyline/services/nifm/IGeneralService.cpp
${source_DIR}/skyline/services/nifm/IRequest.cpp
${source_DIR}/skyline/services/socket/bsd/IClient.cpp
${source_DIR}/skyline/vfs/partition_filesystem.cpp
${source_DIR}/skyline/vfs/rom_filesystem.cpp
${source_DIR}/skyline/vfs/os_backing.cpp

View File

@ -78,6 +78,7 @@ namespace skyline::service {
nifm_IStaticService,
nifm_IGeneralService,
nifm_IRequest,
socket_IClient,
};
/**
@ -115,6 +116,7 @@ namespace skyline::service {
{"friend:u", Service::friends_IServiceCreator},
{"nfp:user", Service::nfp_IUserManager},
{"nifm:u", Service::nifm_IStaticService},
{"bsd:u", Service::socket_IClient},
};
class ServiceManager;

View File

@ -24,6 +24,7 @@
#include "friends/IServiceCreator.h"
#include "nfp/IUserManager.h"
#include "nifm/IStaticService.h"
#include "socket/bsd/IClient.h"
#include "serviceman.h"
namespace skyline::service {
@ -102,6 +103,9 @@ namespace skyline::service {
case Service::nifm_IStaticService:
serviceObj = std::make_shared<nifm::IStaticService>(state, *this);
break;
case Service::socket_IClient:
serviceObj = std::make_shared<socket::IClient>(state, *this);
break;
default:
throw exception("CreateService called on missing object, type: {}", serviceType);
}

View File

@ -0,0 +1,17 @@
// SPDX-License-Identifier: MPL-2.0
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
#include "IClient.h"
namespace skyline::service::socket {
IClient::IClient(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, Service::socket_IClient, "socket:IClient", {
{0x0, SFUNC(IClient::RegisterClient)},
{0x1, SFUNC(IClient::StartMonitoring)},
}) {}
void IClient::RegisterClient(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {
response.Push<u32>(0);
}
void IClient::StartMonitoring(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) {}
}

View File

@ -0,0 +1,27 @@
// SPDX-License-Identifier: MPL-2.0
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
#pragma once
#include <services/base_service.h>
#include <services/serviceman.h>
namespace skyline::service::socket {
/**
* @brief IClient or bsd:u is used by applications create network sockets (https://switchbrew.org/wiki/Sockets_services#bsd:u.2C_bsd:s)
*/
class IClient : public BaseService {
public:
IClient(const DeviceState &state, ServiceManager &manager);
/**
* @brief This initializes a socket client with the given parameters (https://switchbrew.org/wiki/Sockets_services#Initialize)
*/
void RegisterClient(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
/**
* @brief This starts the monitoring of the socket
*/
void StartMonitoring(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response);
};
}