citra/src/core/hle/service/soc_u.h

58 lines
1.8 KiB
C++
Raw Normal View History

2014-10-30 01:38:33 +00:00
// Copyright 2014 Citra Emulator Project
2014-12-17 05:38:14 +00:00
// Licensed under GPLv2 or any later version
2014-10-30 01:38:33 +00:00
// Refer to the license.txt file included.
#pragma once
#include <unordered_map>
2014-10-30 01:38:33 +00:00
#include "core/hle/service/service.h"
namespace Core {
class System;
}
namespace Service::SOC {
2014-10-30 01:38:33 +00:00
/// Holds information about a particular socket
struct SocketHolder {
u32 socket_fd; ///< The socket descriptor
bool blocking; ///< Whether the socket is blocking or not, it is only read on Windows.
};
class SOC_U final : public ServiceFramework<SOC_U> {
2014-10-30 01:38:33 +00:00
public:
SOC_U();
~SOC_U();
2014-12-21 19:52:10 +00:00
private:
void Socket(Kernel::HLERequestContext& ctx);
void Bind(Kernel::HLERequestContext& ctx);
void Fcntl(Kernel::HLERequestContext& ctx);
void Listen(Kernel::HLERequestContext& ctx);
void Accept(Kernel::HLERequestContext& ctx);
void GetHostId(Kernel::HLERequestContext& ctx);
void Close(Kernel::HLERequestContext& ctx);
void SendTo(Kernel::HLERequestContext& ctx);
2018-08-21 06:38:14 +00:00
void RecvFromOther(Kernel::HLERequestContext& ctx);
void RecvFrom(Kernel::HLERequestContext& ctx);
void Poll(Kernel::HLERequestContext& ctx);
void GetSockName(Kernel::HLERequestContext& ctx);
void Shutdown(Kernel::HLERequestContext& ctx);
void GetPeerName(Kernel::HLERequestContext& ctx);
void Connect(Kernel::HLERequestContext& ctx);
void InitializeSockets(Kernel::HLERequestContext& ctx);
void ShutdownSockets(Kernel::HLERequestContext& ctx);
void GetSockOpt(Kernel::HLERequestContext& ctx);
void SetSockOpt(Kernel::HLERequestContext& ctx);
/// Close all open sockets
void CleanupSockets();
/// Holds info about the currently open sockets
std::unordered_map<u32, SocketHolder> open_sockets;
2014-10-30 01:38:33 +00:00
};
void InstallInterfaces(Core::System& system);
} // namespace Service::SOC