diff options
| -rw-r--r-- | src/core/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/core/hle/service/service.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/bsd_u.cpp | 67 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/bsd_u.h | 29 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/sfdnsres.h | 22 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/sockets.cpp | 18 | ||||
| -rw-r--r-- | src/core/hle/service/sockets/sockets.h | 16 |
7 files changed, 159 insertions, 0 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index c05244b7e..4cdfffecb 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -128,6 +128,11 @@ add_library(core STATIC | |||
| 128 | hle/service/sm/controller.h | 128 | hle/service/sm/controller.h |
| 129 | hle/service/sm/sm.cpp | 129 | hle/service/sm/sm.cpp |
| 130 | hle/service/sm/sm.h | 130 | hle/service/sm/sm.h |
| 131 | hle/service/sockets/bsd_u.cpp | ||
| 132 | hle/service/sockets/bsd_u.h | ||
| 133 | hle/service/sockets/sfdnsres.h | ||
| 134 | hle/service/sockets/sockets.cpp | ||
| 135 | hle/service/sockets/sockets.h | ||
| 131 | hle/service/time/time.cpp | 136 | hle/service/time/time.cpp |
| 132 | hle/service/time/time.h | 137 | hle/service/time/time.h |
| 133 | hle/service/vi/vi.cpp | 138 | hle/service/vi/vi.cpp |
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index fe76b381c..9a49d9e9c 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include "core/hle/service/service.h" | 26 | #include "core/hle/service/service.h" |
| 27 | #include "core/hle/service/sm/controller.h" | 27 | #include "core/hle/service/sm/controller.h" |
| 28 | #include "core/hle/service/sm/sm.h" | 28 | #include "core/hle/service/sm/sm.h" |
| 29 | #include "core/hle/service/sockets/sockets.h" | ||
| 29 | #include "core/hle/service/time/time.h" | 30 | #include "core/hle/service/time/time.h" |
| 30 | #include "core/hle/service/vi/vi.h" | 31 | #include "core/hle/service/vi/vi.h" |
| 31 | 32 | ||
| @@ -174,6 +175,7 @@ void Init() { | |||
| 174 | LM::InstallInterfaces(*SM::g_service_manager); | 175 | LM::InstallInterfaces(*SM::g_service_manager); |
| 175 | Nvidia::InstallInterfaces(*SM::g_service_manager); | 176 | Nvidia::InstallInterfaces(*SM::g_service_manager); |
| 176 | PCTL::InstallInterfaces(*SM::g_service_manager); | 177 | PCTL::InstallInterfaces(*SM::g_service_manager); |
| 178 | Sockets::InstallInterfaces(*SM::g_service_manager); | ||
| 177 | Time::InstallInterfaces(*SM::g_service_manager); | 179 | Time::InstallInterfaces(*SM::g_service_manager); |
| 178 | VI::InstallInterfaces(*SM::g_service_manager); | 180 | VI::InstallInterfaces(*SM::g_service_manager); |
| 179 | 181 | ||
diff --git a/src/core/hle/service/sockets/bsd_u.cpp b/src/core/hle/service/sockets/bsd_u.cpp new file mode 100644 index 000000000..a819acc96 --- /dev/null +++ b/src/core/hle/service/sockets/bsd_u.cpp | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | // Copyright 2018 yuzu emulator team | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/hle/ipc_helpers.h" | ||
| 6 | #include "core/hle/service/sockets/bsd_u.h" | ||
| 7 | |||
| 8 | namespace Service { | ||
| 9 | namespace Sockets { | ||
| 10 | |||
| 11 | void BSD_U::RegisterClient(Kernel::HLERequestContext& ctx) { | ||
| 12 | LOG_WARNING(Service, "(STUBBED) called"); | ||
| 13 | |||
| 14 | IPC::RequestBuilder rb{ctx, 3}; | ||
| 15 | |||
| 16 | rb.Push(RESULT_SUCCESS); | ||
| 17 | rb.Push<u32>(0); // bsd errno | ||
| 18 | } | ||
| 19 | |||
| 20 | void BSD_U::Socket(Kernel::HLERequestContext& ctx) { | ||
| 21 | IPC::RequestParser rp{ctx}; | ||
| 22 | |||
| 23 | u32 domain = rp.Pop<u32>(); | ||
| 24 | u32 type = rp.Pop<u32>(); | ||
| 25 | u32 protocol = rp.Pop<u32>(); | ||
| 26 | |||
| 27 | LOG_WARNING(Service, "(STUBBED) called domain=%u type=%u protocol=%u", domain, type, protocol); | ||
| 28 | |||
| 29 | u32 fd = next_fd++; | ||
| 30 | |||
| 31 | IPC::RequestBuilder rb{ctx, 4}; | ||
| 32 | |||
| 33 | rb.Push(RESULT_SUCCESS); | ||
| 34 | rb.Push<u32>(fd); | ||
| 35 | rb.Push<u32>(0); // bsd errno | ||
| 36 | } | ||
| 37 | |||
| 38 | void BSD_U::Connect(Kernel::HLERequestContext& ctx) { | ||
| 39 | LOG_WARNING(Service, "(STUBBED) called"); | ||
| 40 | |||
| 41 | IPC::RequestBuilder rb{ctx, 4}; | ||
| 42 | |||
| 43 | rb.Push(RESULT_SUCCESS); | ||
| 44 | rb.Push<u32>(0); // ret | ||
| 45 | rb.Push<u32>(0); // bsd errno | ||
| 46 | } | ||
| 47 | |||
| 48 | void BSD_U::SendTo(Kernel::HLERequestContext& ctx) { | ||
| 49 | LOG_WARNING(Service, "(STUBBED) called"); | ||
| 50 | |||
| 51 | IPC::RequestBuilder rb{ctx, 4}; | ||
| 52 | |||
| 53 | rb.Push(RESULT_SUCCESS); | ||
| 54 | rb.Push<u32>(0); // ret | ||
| 55 | rb.Push<u32>(0); // bsd errno | ||
| 56 | } | ||
| 57 | |||
| 58 | BSD_U::BSD_U() : ServiceFramework("bsd:u") { | ||
| 59 | static const FunctionInfo functions[] = {{0, &BSD_U::RegisterClient, "RegisterClient"}, | ||
| 60 | {2, &BSD_U::Socket, "Socket"}, | ||
| 61 | {11, &BSD_U::SendTo, "SendTo"}, | ||
| 62 | {14, &BSD_U::Connect, "Connect"}}; | ||
| 63 | RegisterHandlers(functions); | ||
| 64 | } | ||
| 65 | |||
| 66 | } // namespace Sockets | ||
| 67 | } // namespace Service | ||
diff --git a/src/core/hle/service/sockets/bsd_u.h b/src/core/hle/service/sockets/bsd_u.h new file mode 100644 index 000000000..1fe96d850 --- /dev/null +++ b/src/core/hle/service/sockets/bsd_u.h | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | // Copyright 2018 yuzu emulator team | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "core/hle/kernel/hle_ipc.h" | ||
| 8 | #include "core/hle/service/service.h" | ||
| 9 | |||
| 10 | namespace Service { | ||
| 11 | namespace Sockets { | ||
| 12 | |||
| 13 | class BSD_U final : public ServiceFramework<BSD_U> { | ||
| 14 | public: | ||
| 15 | BSD_U(); | ||
| 16 | ~BSD_U() = default; | ||
| 17 | |||
| 18 | private: | ||
| 19 | void RegisterClient(Kernel::HLERequestContext& ctx); | ||
| 20 | void Socket(Kernel::HLERequestContext& ctx); | ||
| 21 | void Connect(Kernel::HLERequestContext& ctx); | ||
| 22 | void SendTo(Kernel::HLERequestContext& ctx); | ||
| 23 | |||
| 24 | /// Id to use for the next open file descriptor. | ||
| 25 | u32 next_fd = 1; | ||
| 26 | }; | ||
| 27 | |||
| 28 | } // namespace Sockets | ||
| 29 | } // namespace Service | ||
diff --git a/src/core/hle/service/sockets/sfdnsres.h b/src/core/hle/service/sockets/sfdnsres.h new file mode 100644 index 000000000..32a3ac8c5 --- /dev/null +++ b/src/core/hle/service/sockets/sfdnsres.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // Copyright 2018 yuzu emulator team | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "core/hle/kernel/hle_ipc.h" | ||
| 8 | #include "core/hle/service/service.h" | ||
| 9 | |||
| 10 | namespace Service { | ||
| 11 | namespace Sockets { | ||
| 12 | |||
| 13 | class SFDNSRES final : public ServiceFramework<SFDNSRES> { | ||
| 14 | public: | ||
| 15 | SFDNSRES() : ServiceFramework("sfdnsres") {} | ||
| 16 | ~SFDNSRES() = default; | ||
| 17 | |||
| 18 | private: | ||
| 19 | }; | ||
| 20 | |||
| 21 | } // namespace Sockets | ||
| 22 | } // namespace Service | ||
diff --git a/src/core/hle/service/sockets/sockets.cpp b/src/core/hle/service/sockets/sockets.cpp new file mode 100644 index 000000000..f1396eaa1 --- /dev/null +++ b/src/core/hle/service/sockets/sockets.cpp | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | // Copyright 2018 yuzu emulator team | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/hle/service/sockets/bsd_u.h" | ||
| 6 | #include "core/hle/service/sockets/sfdnsres.h" | ||
| 7 | #include "core/hle/service/sockets/sockets.h" | ||
| 8 | |||
| 9 | namespace Service { | ||
| 10 | namespace Sockets { | ||
| 11 | |||
| 12 | void InstallInterfaces(SM::ServiceManager& service_manager) { | ||
| 13 | std::make_shared<BSD_U>()->InstallAsService(service_manager); | ||
| 14 | std::make_shared<SFDNSRES>()->InstallAsService(service_manager); | ||
| 15 | } | ||
| 16 | |||
| 17 | } // namespace Sockets | ||
| 18 | } // namespace Service | ||
diff --git a/src/core/hle/service/sockets/sockets.h b/src/core/hle/service/sockets/sockets.h new file mode 100644 index 000000000..7e89c8d2c --- /dev/null +++ b/src/core/hle/service/sockets/sockets.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // Copyright 2018 yuzu emulator team | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "core/hle/service/service.h" | ||
| 8 | |||
| 9 | namespace Service { | ||
| 10 | namespace Sockets { | ||
| 11 | |||
| 12 | /// Registers all Sockets services with the specified service manager. | ||
| 13 | void InstallInterfaces(SM::ServiceManager& service_manager); | ||
| 14 | |||
| 15 | } // namespace Sockets | ||
| 16 | } // namespace Service | ||