mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 01:37:36 +00:00
Kernel: Rename FileDescription => OpenFileDescription
Dr. POSIX really calls these "open file description", not just "file description", so let's call them exactly that. :^)
This commit is contained in:
parent
dbd639a2d8
commit
4a9c18afb9
135 changed files with 680 additions and 680 deletions
|
@ -7,7 +7,7 @@
|
|||
#include <AK/Singleton.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <Kernel/Debug.h>
|
||||
#include <Kernel/FileSystem/FileDescription.h>
|
||||
#include <Kernel/FileSystem/OpenFileDescription.h>
|
||||
#include <Kernel/Net/ARP.h>
|
||||
#include <Kernel/Net/ICMP.h>
|
||||
#include <Kernel/Net/IPv4.h>
|
||||
|
@ -28,7 +28,7 @@ namespace Kernel {
|
|||
|
||||
static Singleton<MutexProtected<IPv4Socket::List>> s_all_sockets;
|
||||
|
||||
using BlockFlags = Thread::FileDescriptionBlocker::BlockFlags;
|
||||
using BlockFlags = Thread::OpenFileDescriptionBlocker::BlockFlags;
|
||||
|
||||
MutexProtected<IPv4Socket::List>& IPv4Socket::all_sockets()
|
||||
{
|
||||
|
@ -141,7 +141,7 @@ KResult IPv4Socket::listen(size_t backlog)
|
|||
return protocol_listen(result.did_allocate);
|
||||
}
|
||||
|
||||
KResult IPv4Socket::connect(FileDescription& description, Userspace<const sockaddr*> address, socklen_t address_size, ShouldBlock should_block)
|
||||
KResult IPv4Socket::connect(OpenFileDescription& description, Userspace<const sockaddr*> address, socklen_t address_size, ShouldBlock should_block)
|
||||
{
|
||||
if (address_size != sizeof(sockaddr_in))
|
||||
return set_so_error(EINVAL);
|
||||
|
@ -166,7 +166,7 @@ KResult IPv4Socket::connect(FileDescription& description, Userspace<const sockad
|
|||
return protocol_connect(description, should_block);
|
||||
}
|
||||
|
||||
bool IPv4Socket::can_read(const FileDescription&, size_t) const
|
||||
bool IPv4Socket::can_read(const OpenFileDescription&, size_t) const
|
||||
{
|
||||
if (m_role == Role::Listener)
|
||||
return can_accept();
|
||||
|
@ -175,7 +175,7 @@ bool IPv4Socket::can_read(const FileDescription&, size_t) const
|
|||
return m_can_read;
|
||||
}
|
||||
|
||||
bool IPv4Socket::can_write(const FileDescription&, size_t) const
|
||||
bool IPv4Socket::can_write(const OpenFileDescription&, size_t) const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -192,7 +192,7 @@ PortAllocationResult IPv4Socket::allocate_local_port_if_needed()
|
|||
return { m_local_port, true };
|
||||
}
|
||||
|
||||
KResultOr<size_t> IPv4Socket::sendto(FileDescription&, const UserOrKernelBuffer& data, size_t data_length, [[maybe_unused]] int flags, Userspace<const sockaddr*> addr, socklen_t addr_length)
|
||||
KResultOr<size_t> IPv4Socket::sendto(OpenFileDescription&, const UserOrKernelBuffer& data, size_t data_length, [[maybe_unused]] int flags, Userspace<const sockaddr*> addr, socklen_t addr_length)
|
||||
{
|
||||
MutexLocker locker(mutex());
|
||||
|
||||
|
@ -251,7 +251,7 @@ KResultOr<size_t> IPv4Socket::sendto(FileDescription&, const UserOrKernelBuffer&
|
|||
return nsent_or_error;
|
||||
}
|
||||
|
||||
KResultOr<size_t> IPv4Socket::receive_byte_buffered(FileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>)
|
||||
KResultOr<size_t> IPv4Socket::receive_byte_buffered(OpenFileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>)
|
||||
{
|
||||
MutexLocker locker(mutex());
|
||||
if (m_receive_buffer->is_empty()) {
|
||||
|
@ -287,7 +287,7 @@ KResultOr<size_t> IPv4Socket::receive_byte_buffered(FileDescription& description
|
|||
return nreceived_or_error;
|
||||
}
|
||||
|
||||
KResultOr<size_t> IPv4Socket::receive_packet_buffered(FileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*> addr, Userspace<socklen_t*> addr_length, Time& packet_timestamp)
|
||||
KResultOr<size_t> IPv4Socket::receive_packet_buffered(OpenFileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*> addr, Userspace<socklen_t*> addr_length, Time& packet_timestamp)
|
||||
{
|
||||
MutexLocker locker(mutex());
|
||||
ReceivedPacket packet;
|
||||
|
@ -379,7 +379,7 @@ KResultOr<size_t> IPv4Socket::receive_packet_buffered(FileDescription& descripti
|
|||
return protocol_receive(ReadonlyBytes { packet.data.value().data(), packet.data.value().size() }, buffer, buffer_length, flags);
|
||||
}
|
||||
|
||||
KResultOr<size_t> IPv4Socket::recvfrom(FileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*> user_addr, Userspace<socklen_t*> user_addr_length, Time& packet_timestamp)
|
||||
KResultOr<size_t> IPv4Socket::recvfrom(OpenFileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*> user_addr, Userspace<socklen_t*> user_addr_length, Time& packet_timestamp)
|
||||
{
|
||||
if (user_addr_length) {
|
||||
socklen_t addr_length;
|
||||
|
@ -450,7 +450,7 @@ bool IPv4Socket::did_receive(const IPv4Address& source_address, u16 source_port,
|
|||
return true;
|
||||
}
|
||||
|
||||
String IPv4Socket::absolute_path(const FileDescription&) const
|
||||
String IPv4Socket::absolute_path(const OpenFileDescription&) const
|
||||
{
|
||||
if (m_role == Role::None)
|
||||
return "socket";
|
||||
|
@ -536,7 +536,7 @@ KResult IPv4Socket::setsockopt(int level, int option, Userspace<const void*> use
|
|||
}
|
||||
}
|
||||
|
||||
KResult IPv4Socket::getsockopt(FileDescription& description, int level, int option, Userspace<void*> value, Userspace<socklen_t*> value_size)
|
||||
KResult IPv4Socket::getsockopt(OpenFileDescription& description, int level, int option, Userspace<void*> value, Userspace<socklen_t*> value_size)
|
||||
{
|
||||
if (level != IPPROTO_IP)
|
||||
return Socket::getsockopt(description, level, option, value, value_size);
|
||||
|
@ -563,7 +563,7 @@ KResult IPv4Socket::getsockopt(FileDescription& description, int level, int opti
|
|||
}
|
||||
}
|
||||
|
||||
KResult IPv4Socket::ioctl(FileDescription&, unsigned request, Userspace<void*> arg)
|
||||
KResult IPv4Socket::ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg)
|
||||
{
|
||||
REQUIRE_PROMISE(inet);
|
||||
|
||||
|
|
|
@ -33,18 +33,18 @@ public:
|
|||
|
||||
virtual KResult close() override;
|
||||
virtual KResult bind(Userspace<const sockaddr*>, socklen_t) override;
|
||||
virtual KResult connect(FileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
|
||||
virtual KResult connect(OpenFileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
|
||||
virtual KResult listen(size_t) override;
|
||||
virtual void get_local_address(sockaddr*, socklen_t*) override;
|
||||
virtual void get_peer_address(sockaddr*, socklen_t*) override;
|
||||
virtual bool can_read(const FileDescription&, size_t) const override;
|
||||
virtual bool can_write(const FileDescription&, size_t) const override;
|
||||
virtual KResultOr<size_t> sendto(FileDescription&, const UserOrKernelBuffer&, size_t, int, Userspace<const sockaddr*>, socklen_t) override;
|
||||
virtual KResultOr<size_t> recvfrom(FileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) override;
|
||||
virtual bool can_read(const OpenFileDescription&, size_t) const override;
|
||||
virtual bool can_write(const OpenFileDescription&, size_t) const override;
|
||||
virtual KResultOr<size_t> sendto(OpenFileDescription&, const UserOrKernelBuffer&, size_t, int, Userspace<const sockaddr*>, socklen_t) override;
|
||||
virtual KResultOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) override;
|
||||
virtual KResult setsockopt(int level, int option, Userspace<const void*>, socklen_t) override;
|
||||
virtual KResult getsockopt(FileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>) override;
|
||||
virtual KResult getsockopt(OpenFileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>) override;
|
||||
|
||||
virtual KResult ioctl(FileDescription&, unsigned request, Userspace<void*> arg) override;
|
||||
virtual KResult ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override;
|
||||
|
||||
bool did_receive(const IPv4Address& peer_address, u16 peer_port, ReadonlyBytes, const Time&);
|
||||
|
||||
|
@ -61,7 +61,7 @@ public:
|
|||
|
||||
IPv4SocketTuple tuple() const { return IPv4SocketTuple(m_local_address, m_local_port, m_peer_address, m_peer_port); }
|
||||
|
||||
String absolute_path(const FileDescription& description) const override;
|
||||
String absolute_path(const OpenFileDescription& description) const override;
|
||||
|
||||
u8 ttl() const { return m_ttl; }
|
||||
|
||||
|
@ -81,7 +81,7 @@ protected:
|
|||
virtual KResult protocol_listen([[maybe_unused]] bool did_allocate_port) { return KSuccess; }
|
||||
virtual KResultOr<size_t> protocol_receive(ReadonlyBytes /* raw_ipv4_packet */, UserOrKernelBuffer&, size_t, int) { return ENOTIMPL; }
|
||||
virtual KResultOr<size_t> protocol_send(const UserOrKernelBuffer&, size_t) { return ENOTIMPL; }
|
||||
virtual KResult protocol_connect(FileDescription&, ShouldBlock) { return KSuccess; }
|
||||
virtual KResult protocol_connect(OpenFileDescription&, ShouldBlock) { return KSuccess; }
|
||||
virtual KResultOr<u16> protocol_allocate_local_port() { return ENOPROTOOPT; }
|
||||
virtual bool protocol_is_disconnected() const { return false; }
|
||||
|
||||
|
@ -95,8 +95,8 @@ protected:
|
|||
private:
|
||||
virtual bool is_ipv4() const override { return true; }
|
||||
|
||||
KResultOr<size_t> receive_byte_buffered(FileDescription&, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>);
|
||||
KResultOr<size_t> receive_packet_buffered(FileDescription&, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&);
|
||||
KResultOr<size_t> receive_byte_buffered(OpenFileDescription&, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>);
|
||||
KResultOr<size_t> receive_packet_buffered(OpenFileDescription&, UserOrKernelBuffer& buffer, size_t buffer_length, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&);
|
||||
|
||||
void set_can_read(bool);
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include <AK/Singleton.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <Kernel/Debug.h>
|
||||
#include <Kernel/FileSystem/FileDescription.h>
|
||||
#include <Kernel/FileSystem/OpenFileDescription.h>
|
||||
#include <Kernel/FileSystem/VirtualFileSystem.h>
|
||||
#include <Kernel/Locking/Mutex.h>
|
||||
#include <Kernel/Locking/MutexProtected.h>
|
||||
|
@ -51,7 +51,7 @@ KResultOr<NonnullRefPtr<LocalSocket>> LocalSocket::try_create(int type)
|
|||
KResultOr<SocketPair> LocalSocket::try_create_connected_pair(int type)
|
||||
{
|
||||
auto socket = TRY(LocalSocket::try_create(type));
|
||||
auto description1 = TRY(FileDescription::try_create(*socket));
|
||||
auto description1 = TRY(OpenFileDescription::try_create(*socket));
|
||||
|
||||
TRY(socket->try_set_path("[socketpair]"sv));
|
||||
|
||||
|
@ -60,7 +60,7 @@ KResultOr<SocketPair> LocalSocket::try_create_connected_pair(int type)
|
|||
socket->set_connect_side_role(Role::Connected);
|
||||
socket->set_role(Role::Accepted);
|
||||
|
||||
auto description2 = TRY(FileDescription::try_create(*socket));
|
||||
auto description2 = TRY(OpenFileDescription::try_create(*socket));
|
||||
|
||||
return SocketPair { move(description1), move(description2) };
|
||||
}
|
||||
|
@ -155,7 +155,7 @@ KResult LocalSocket::bind(Userspace<const sockaddr*> user_address, socklen_t add
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
KResult LocalSocket::connect(FileDescription& description, Userspace<const sockaddr*> address, socklen_t address_size, ShouldBlock)
|
||||
KResult LocalSocket::connect(OpenFileDescription& description, Userspace<const sockaddr*> address, socklen_t address_size, ShouldBlock)
|
||||
{
|
||||
VERIFY(!m_bound);
|
||||
if (address_size != sizeof(sockaddr_un))
|
||||
|
@ -212,7 +212,7 @@ KResult LocalSocket::connect(FileDescription& description, Userspace<const socka
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
auto unblock_flags = Thread::FileDescriptionBlocker::BlockFlags::None;
|
||||
auto unblock_flags = Thread::OpenFileDescriptionBlocker::BlockFlags::None;
|
||||
if (Thread::current()->block<Thread::ConnectBlocker>({}, description, unblock_flags).was_interrupted()) {
|
||||
set_connect_side_role(Role::None);
|
||||
return set_so_error(EINTR);
|
||||
|
@ -220,7 +220,7 @@ KResult LocalSocket::connect(FileDescription& description, Userspace<const socka
|
|||
|
||||
dbgln_if(LOCAL_SOCKET_DEBUG, "LocalSocket({}) connect({}) status is {}", this, *m_path, to_string(setup_state()));
|
||||
|
||||
if (!has_flag(unblock_flags, Thread::FileDescriptionBlocker::BlockFlags::Connect)) {
|
||||
if (!has_flag(unblock_flags, Thread::OpenFileDescriptionBlocker::BlockFlags::Connect)) {
|
||||
set_connect_side_role(Role::None);
|
||||
return set_so_error(ECONNREFUSED);
|
||||
}
|
||||
|
@ -243,7 +243,7 @@ KResult LocalSocket::listen(size_t backlog)
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
KResult LocalSocket::attach(FileDescription& description)
|
||||
KResult LocalSocket::attach(OpenFileDescription& description)
|
||||
{
|
||||
VERIFY(!m_accept_side_fd_open);
|
||||
if (m_connect_side_role == Role::None) {
|
||||
|
@ -258,7 +258,7 @@ KResult LocalSocket::attach(FileDescription& description)
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
void LocalSocket::detach(FileDescription& description)
|
||||
void LocalSocket::detach(OpenFileDescription& description)
|
||||
{
|
||||
if (m_connect_side_fd == &description) {
|
||||
m_connect_side_fd = nullptr;
|
||||
|
@ -270,7 +270,7 @@ void LocalSocket::detach(FileDescription& description)
|
|||
evaluate_block_conditions();
|
||||
}
|
||||
|
||||
bool LocalSocket::can_read(const FileDescription& description, size_t) const
|
||||
bool LocalSocket::can_read(const OpenFileDescription& description, size_t) const
|
||||
{
|
||||
auto role = this->role(description);
|
||||
if (role == Role::Listener)
|
||||
|
@ -282,7 +282,7 @@ bool LocalSocket::can_read(const FileDescription& description, size_t) const
|
|||
return false;
|
||||
}
|
||||
|
||||
bool LocalSocket::has_attached_peer(const FileDescription& description) const
|
||||
bool LocalSocket::has_attached_peer(const OpenFileDescription& description) const
|
||||
{
|
||||
auto role = this->role(description);
|
||||
if (role == Role::Accepted)
|
||||
|
@ -292,7 +292,7 @@ bool LocalSocket::has_attached_peer(const FileDescription& description) const
|
|||
return false;
|
||||
}
|
||||
|
||||
bool LocalSocket::can_write(const FileDescription& description, size_t) const
|
||||
bool LocalSocket::can_write(const OpenFileDescription& description, size_t) const
|
||||
{
|
||||
auto role = this->role(description);
|
||||
if (role == Role::Accepted)
|
||||
|
@ -302,7 +302,7 @@ bool LocalSocket::can_write(const FileDescription& description, size_t) const
|
|||
return false;
|
||||
}
|
||||
|
||||
KResultOr<size_t> LocalSocket::sendto(FileDescription& description, const UserOrKernelBuffer& data, size_t data_size, int, Userspace<const sockaddr*>, socklen_t)
|
||||
KResultOr<size_t> LocalSocket::sendto(OpenFileDescription& description, const UserOrKernelBuffer& data, size_t data_size, int, Userspace<const sockaddr*>, socklen_t)
|
||||
{
|
||||
if (!has_attached_peer(description))
|
||||
return set_so_error(EPIPE);
|
||||
|
@ -315,7 +315,7 @@ KResultOr<size_t> LocalSocket::sendto(FileDescription& description, const UserOr
|
|||
return nwritten_or_error;
|
||||
}
|
||||
|
||||
DoubleBuffer* LocalSocket::receive_buffer_for(FileDescription& description)
|
||||
DoubleBuffer* LocalSocket::receive_buffer_for(OpenFileDescription& description)
|
||||
{
|
||||
auto role = this->role(description);
|
||||
if (role == Role::Accepted)
|
||||
|
@ -325,7 +325,7 @@ DoubleBuffer* LocalSocket::receive_buffer_for(FileDescription& description)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
DoubleBuffer* LocalSocket::send_buffer_for(FileDescription& description)
|
||||
DoubleBuffer* LocalSocket::send_buffer_for(OpenFileDescription& description)
|
||||
{
|
||||
auto role = this->role(description);
|
||||
if (role == Role::Connected)
|
||||
|
@ -335,7 +335,7 @@ DoubleBuffer* LocalSocket::send_buffer_for(FileDescription& description)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
KResultOr<size_t> LocalSocket::recvfrom(FileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_size, int, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&)
|
||||
KResultOr<size_t> LocalSocket::recvfrom(OpenFileDescription& description, UserOrKernelBuffer& buffer, size_t buffer_size, int, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&)
|
||||
{
|
||||
auto* socket_buffer = receive_buffer_for(description);
|
||||
if (!socket_buffer)
|
||||
|
@ -347,7 +347,7 @@ KResultOr<size_t> LocalSocket::recvfrom(FileDescription& description, UserOrKern
|
|||
return set_so_error(EAGAIN);
|
||||
}
|
||||
} else if (!can_read(description, 0)) {
|
||||
auto unblock_flags = Thread::FileDescriptionBlocker::BlockFlags::None;
|
||||
auto unblock_flags = Thread::OpenFileDescriptionBlocker::BlockFlags::None;
|
||||
if (Thread::current()->block<Thread::ReadBlocker>({}, description, unblock_flags).was_interrupted())
|
||||
return set_so_error(EINTR);
|
||||
}
|
||||
|
@ -367,7 +367,7 @@ StringView LocalSocket::socket_path() const
|
|||
return m_path->view();
|
||||
}
|
||||
|
||||
String LocalSocket::absolute_path(const FileDescription& description) const
|
||||
String LocalSocket::absolute_path(const OpenFileDescription& description) const
|
||||
{
|
||||
StringBuilder builder;
|
||||
builder.append("socket:");
|
||||
|
@ -393,7 +393,7 @@ String LocalSocket::absolute_path(const FileDescription& description) const
|
|||
return builder.to_string();
|
||||
}
|
||||
|
||||
KResult LocalSocket::getsockopt(FileDescription& description, int level, int option, Userspace<void*> value, Userspace<socklen_t*> value_size)
|
||||
KResult LocalSocket::getsockopt(OpenFileDescription& description, int level, int option, Userspace<void*> value, Userspace<socklen_t*> value_size)
|
||||
{
|
||||
if (level != SOL_SOCKET)
|
||||
return Socket::getsockopt(description, level, option, value, value_size);
|
||||
|
@ -432,7 +432,7 @@ KResult LocalSocket::getsockopt(FileDescription& description, int level, int opt
|
|||
}
|
||||
}
|
||||
|
||||
KResult LocalSocket::ioctl(FileDescription& description, unsigned request, Userspace<void*> arg)
|
||||
KResult LocalSocket::ioctl(OpenFileDescription& description, unsigned request, Userspace<void*> arg)
|
||||
{
|
||||
switch (request) {
|
||||
case FIONREAD: {
|
||||
|
@ -444,7 +444,7 @@ KResult LocalSocket::ioctl(FileDescription& description, unsigned request, Users
|
|||
return ENOTTY;
|
||||
}
|
||||
|
||||
KResult LocalSocket::chmod(FileDescription&, mode_t mode)
|
||||
KResult LocalSocket::chmod(OpenFileDescription&, mode_t mode)
|
||||
{
|
||||
if (m_file)
|
||||
return m_file->chmod(mode);
|
||||
|
@ -453,7 +453,7 @@ KResult LocalSocket::chmod(FileDescription&, mode_t mode)
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
KResult LocalSocket::chown(FileDescription&, UserID uid, GroupID gid)
|
||||
KResult LocalSocket::chown(OpenFileDescription&, UserID uid, GroupID gid)
|
||||
{
|
||||
if (m_file)
|
||||
return m_file->chown(uid, gid);
|
||||
|
@ -467,7 +467,7 @@ KResult LocalSocket::chown(FileDescription&, UserID uid, GroupID gid)
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
NonnullRefPtrVector<FileDescription>& LocalSocket::recvfd_queue_for(const FileDescription& description)
|
||||
NonnullRefPtrVector<OpenFileDescription>& LocalSocket::recvfd_queue_for(const OpenFileDescription& description)
|
||||
{
|
||||
auto role = this->role(description);
|
||||
if (role == Role::Connected)
|
||||
|
@ -477,7 +477,7 @@ NonnullRefPtrVector<FileDescription>& LocalSocket::recvfd_queue_for(const FileDe
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
NonnullRefPtrVector<FileDescription>& LocalSocket::sendfd_queue_for(const FileDescription& description)
|
||||
NonnullRefPtrVector<OpenFileDescription>& LocalSocket::sendfd_queue_for(const OpenFileDescription& description)
|
||||
{
|
||||
auto role = this->role(description);
|
||||
if (role == Role::Connected)
|
||||
|
@ -487,7 +487,7 @@ NonnullRefPtrVector<FileDescription>& LocalSocket::sendfd_queue_for(const FileDe
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
KResult LocalSocket::sendfd(const FileDescription& socket_description, FileDescription& passing_description)
|
||||
KResult LocalSocket::sendfd(const OpenFileDescription& socket_description, OpenFileDescription& passing_description)
|
||||
{
|
||||
MutexLocker locker(mutex());
|
||||
auto role = this->role(socket_description);
|
||||
|
@ -502,7 +502,7 @@ KResult LocalSocket::sendfd(const FileDescription& socket_description, FileDescr
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
KResultOr<NonnullRefPtr<FileDescription>> LocalSocket::recvfd(const FileDescription& socket_description)
|
||||
KResultOr<NonnullRefPtr<OpenFileDescription>> LocalSocket::recvfd(const OpenFileDescription& socket_description)
|
||||
{
|
||||
MutexLocker locker(mutex());
|
||||
auto role = this->role(socket_description);
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
|
||||
namespace Kernel {
|
||||
|
||||
class FileDescription;
|
||||
class OpenFileDescription;
|
||||
|
||||
struct SocketPair {
|
||||
NonnullRefPtr<FileDescription> description0;
|
||||
NonnullRefPtr<FileDescription> description1;
|
||||
NonnullRefPtr<OpenFileDescription> description0;
|
||||
NonnullRefPtr<OpenFileDescription> description1;
|
||||
};
|
||||
|
||||
class LocalSocket final : public Socket {
|
||||
|
@ -26,40 +26,40 @@ public:
|
|||
static KResultOr<SocketPair> try_create_connected_pair(int type);
|
||||
virtual ~LocalSocket() override;
|
||||
|
||||
KResult sendfd(const FileDescription& socket_description, FileDescription& passing_description);
|
||||
KResultOr<NonnullRefPtr<FileDescription>> recvfd(const FileDescription& socket_description);
|
||||
KResult sendfd(const OpenFileDescription& socket_description, OpenFileDescription& passing_description);
|
||||
KResultOr<NonnullRefPtr<OpenFileDescription>> recvfd(const OpenFileDescription& socket_description);
|
||||
|
||||
static void for_each(Function<void(const LocalSocket&)>);
|
||||
|
||||
StringView socket_path() const;
|
||||
String absolute_path(const FileDescription& description) const override;
|
||||
String absolute_path(const OpenFileDescription& description) const override;
|
||||
|
||||
// ^Socket
|
||||
virtual KResult bind(Userspace<const sockaddr*>, socklen_t) override;
|
||||
virtual KResult connect(FileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
|
||||
virtual KResult connect(OpenFileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
|
||||
virtual KResult listen(size_t) override;
|
||||
virtual void get_local_address(sockaddr*, socklen_t*) override;
|
||||
virtual void get_peer_address(sockaddr*, socklen_t*) override;
|
||||
virtual KResult attach(FileDescription&) override;
|
||||
virtual void detach(FileDescription&) override;
|
||||
virtual bool can_read(const FileDescription&, size_t) const override;
|
||||
virtual bool can_write(const FileDescription&, size_t) const override;
|
||||
virtual KResultOr<size_t> sendto(FileDescription&, const UserOrKernelBuffer&, size_t, int, Userspace<const sockaddr*>, socklen_t) override;
|
||||
virtual KResultOr<size_t> recvfrom(FileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) override;
|
||||
virtual KResult getsockopt(FileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>) override;
|
||||
virtual KResult ioctl(FileDescription&, unsigned request, Userspace<void*> arg) override;
|
||||
virtual KResult chown(FileDescription&, UserID, GroupID) override;
|
||||
virtual KResult chmod(FileDescription&, mode_t) override;
|
||||
virtual KResult attach(OpenFileDescription&) override;
|
||||
virtual void detach(OpenFileDescription&) override;
|
||||
virtual bool can_read(const OpenFileDescription&, size_t) const override;
|
||||
virtual bool can_write(const OpenFileDescription&, size_t) const override;
|
||||
virtual KResultOr<size_t> sendto(OpenFileDescription&, const UserOrKernelBuffer&, size_t, int, Userspace<const sockaddr*>, socklen_t) override;
|
||||
virtual KResultOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) override;
|
||||
virtual KResult getsockopt(OpenFileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>) override;
|
||||
virtual KResult ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override;
|
||||
virtual KResult chown(OpenFileDescription&, UserID, GroupID) override;
|
||||
virtual KResult chmod(OpenFileDescription&, mode_t) override;
|
||||
|
||||
private:
|
||||
explicit LocalSocket(int type, NonnullOwnPtr<DoubleBuffer> client_buffer, NonnullOwnPtr<DoubleBuffer> server_buffer);
|
||||
virtual StringView class_name() const override { return "LocalSocket"; }
|
||||
virtual bool is_local() const override { return true; }
|
||||
bool has_attached_peer(const FileDescription&) const;
|
||||
DoubleBuffer* receive_buffer_for(FileDescription&);
|
||||
DoubleBuffer* send_buffer_for(FileDescription&);
|
||||
NonnullRefPtrVector<FileDescription>& sendfd_queue_for(const FileDescription&);
|
||||
NonnullRefPtrVector<FileDescription>& recvfd_queue_for(const FileDescription&);
|
||||
bool has_attached_peer(const OpenFileDescription&) const;
|
||||
DoubleBuffer* receive_buffer_for(OpenFileDescription&);
|
||||
DoubleBuffer* send_buffer_for(OpenFileDescription&);
|
||||
NonnullRefPtrVector<OpenFileDescription>& sendfd_queue_for(const OpenFileDescription&);
|
||||
NonnullRefPtrVector<OpenFileDescription>& recvfd_queue_for(const OpenFileDescription&);
|
||||
|
||||
void set_connect_side_role(Role connect_side_role, bool force_evaluate_block_conditions = false)
|
||||
{
|
||||
|
@ -72,7 +72,7 @@ private:
|
|||
KResult try_set_path(StringView);
|
||||
|
||||
// An open socket file on the filesystem.
|
||||
RefPtr<FileDescription> m_file;
|
||||
RefPtr<OpenFileDescription> m_file;
|
||||
|
||||
UserID m_prebind_uid { 0 };
|
||||
GroupID m_prebind_gid { 0 };
|
||||
|
@ -83,9 +83,9 @@ private:
|
|||
// an additional role for the connect side and differentiate
|
||||
// between them.
|
||||
Role m_connect_side_role { Role::None };
|
||||
FileDescription* m_connect_side_fd { nullptr };
|
||||
OpenFileDescription* m_connect_side_fd { nullptr };
|
||||
|
||||
virtual Role role(const FileDescription& description) const override
|
||||
virtual Role role(const OpenFileDescription& description) const override
|
||||
{
|
||||
if (m_connect_side_fd == &description)
|
||||
return m_connect_side_role;
|
||||
|
@ -99,8 +99,8 @@ private:
|
|||
NonnullOwnPtr<DoubleBuffer> m_for_client;
|
||||
NonnullOwnPtr<DoubleBuffer> m_for_server;
|
||||
|
||||
NonnullRefPtrVector<FileDescription> m_fds_for_client;
|
||||
NonnullRefPtrVector<FileDescription> m_fds_for_server;
|
||||
NonnullRefPtrVector<OpenFileDescription> m_fds_for_client;
|
||||
NonnullRefPtrVector<OpenFileDescription> m_fds_for_server;
|
||||
|
||||
IntrusiveListNode<LocalSocket> m_list_node;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
#include <AK/StringView.h>
|
||||
#include <Kernel/Debug.h>
|
||||
#include <Kernel/FileSystem/FileDescription.h>
|
||||
#include <Kernel/FileSystem/OpenFileDescription.h>
|
||||
#include <Kernel/Net/IPv4Socket.h>
|
||||
#include <Kernel/Net/LocalSocket.h>
|
||||
#include <Kernel/Net/NetworkingManagement.h>
|
||||
|
@ -133,7 +133,7 @@ KResult Socket::setsockopt(int level, int option, Userspace<const void*> user_va
|
|||
}
|
||||
}
|
||||
|
||||
KResult Socket::getsockopt(FileDescription&, int level, int option, Userspace<void*> value, Userspace<socklen_t*> value_size)
|
||||
KResult Socket::getsockopt(OpenFileDescription&, int level, int option, Userspace<void*> value, Userspace<socklen_t*> value_size)
|
||||
{
|
||||
socklen_t size;
|
||||
TRY(copy_from_user(&size, value_size.unsafe_userspace_ptr()));
|
||||
|
@ -199,7 +199,7 @@ KResult Socket::getsockopt(FileDescription&, int level, int option, Userspace<vo
|
|||
}
|
||||
}
|
||||
|
||||
KResultOr<size_t> Socket::read(FileDescription& description, u64, UserOrKernelBuffer& buffer, size_t size)
|
||||
KResultOr<size_t> Socket::read(OpenFileDescription& description, u64, UserOrKernelBuffer& buffer, size_t size)
|
||||
{
|
||||
if (is_shut_down_for_reading())
|
||||
return 0;
|
||||
|
@ -207,7 +207,7 @@ KResultOr<size_t> Socket::read(FileDescription& description, u64, UserOrKernelBu
|
|||
return recvfrom(description, buffer, size, 0, {}, 0, t);
|
||||
}
|
||||
|
||||
KResultOr<size_t> Socket::write(FileDescription& description, u64, const UserOrKernelBuffer& data, size_t size)
|
||||
KResultOr<size_t> Socket::write(OpenFileDescription& description, u64, const UserOrKernelBuffer& data, size_t size)
|
||||
{
|
||||
if (is_shut_down_for_writing())
|
||||
return set_so_error(EPIPE);
|
||||
|
|
|
@ -23,7 +23,7 @@ enum class ShouldBlock {
|
|||
Yes = 1
|
||||
};
|
||||
|
||||
class FileDescription;
|
||||
class OpenFileDescription;
|
||||
|
||||
class Socket : public File {
|
||||
public:
|
||||
|
@ -68,7 +68,7 @@ public:
|
|||
SetupState setup_state() const { return m_setup_state; }
|
||||
void set_setup_state(SetupState setup_state);
|
||||
|
||||
virtual Role role(const FileDescription&) const { return m_role; }
|
||||
virtual Role role(const OpenFileDescription&) const { return m_role; }
|
||||
|
||||
bool is_connected() const { return m_connected; }
|
||||
void set_connected(bool);
|
||||
|
@ -79,17 +79,17 @@ public:
|
|||
KResult shutdown(int how);
|
||||
|
||||
virtual KResult bind(Userspace<const sockaddr*>, socklen_t) = 0;
|
||||
virtual KResult connect(FileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock) = 0;
|
||||
virtual KResult connect(OpenFileDescription&, Userspace<const sockaddr*>, socklen_t, ShouldBlock) = 0;
|
||||
virtual KResult listen(size_t) = 0;
|
||||
virtual void get_local_address(sockaddr*, socklen_t*) = 0;
|
||||
virtual void get_peer_address(sockaddr*, socklen_t*) = 0;
|
||||
virtual bool is_local() const { return false; }
|
||||
virtual bool is_ipv4() const { return false; }
|
||||
virtual KResultOr<size_t> sendto(FileDescription&, const UserOrKernelBuffer&, size_t, int flags, Userspace<const sockaddr*>, socklen_t) = 0;
|
||||
virtual KResultOr<size_t> recvfrom(FileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) = 0;
|
||||
virtual KResultOr<size_t> sendto(OpenFileDescription&, const UserOrKernelBuffer&, size_t, int flags, Userspace<const sockaddr*>, socklen_t) = 0;
|
||||
virtual KResultOr<size_t> recvfrom(OpenFileDescription&, UserOrKernelBuffer&, size_t, int flags, Userspace<sockaddr*>, Userspace<socklen_t*>, Time&) = 0;
|
||||
|
||||
virtual KResult setsockopt(int level, int option, Userspace<const void*>, socklen_t);
|
||||
virtual KResult getsockopt(FileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>);
|
||||
virtual KResult getsockopt(OpenFileDescription&, int level, int option, Userspace<void*>, Userspace<socklen_t*>);
|
||||
|
||||
ProcessID origin_pid() const { return m_origin.pid; }
|
||||
UserID origin_uid() const { return m_origin.uid; }
|
||||
|
@ -102,10 +102,10 @@ public:
|
|||
Mutex& mutex() { return m_mutex; }
|
||||
|
||||
// ^File
|
||||
virtual KResultOr<size_t> read(FileDescription&, u64, UserOrKernelBuffer&, size_t) override final;
|
||||
virtual KResultOr<size_t> write(FileDescription&, u64, const UserOrKernelBuffer&, size_t) override final;
|
||||
virtual KResultOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override final;
|
||||
virtual KResultOr<size_t> write(OpenFileDescription&, u64, const UserOrKernelBuffer&, size_t) override final;
|
||||
virtual KResult stat(::stat&) const override;
|
||||
virtual String absolute_path(const FileDescription&) const override = 0;
|
||||
virtual String absolute_path(const OpenFileDescription&) const override = 0;
|
||||
|
||||
bool has_receive_timeout() const { return m_receive_timeout != Time::zero(); }
|
||||
const Time& receive_timeout() const { return m_receive_timeout; }
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <AK/Time.h>
|
||||
#include <Kernel/Debug.h>
|
||||
#include <Kernel/Devices/RandomDevice.h>
|
||||
#include <Kernel/FileSystem/FileDescription.h>
|
||||
#include <Kernel/FileSystem/OpenFileDescription.h>
|
||||
#include <Kernel/Locking/MutexProtected.h>
|
||||
#include <Kernel/Net/EthernetFrameHeader.h>
|
||||
#include <Kernel/Net/IPv4.h>
|
||||
|
@ -394,7 +394,7 @@ KResult TCPSocket::protocol_listen(bool did_allocate_port)
|
|||
return KSuccess;
|
||||
}
|
||||
|
||||
KResult TCPSocket::protocol_connect(FileDescription& description, ShouldBlock should_block)
|
||||
KResult TCPSocket::protocol_connect(OpenFileDescription& description, ShouldBlock should_block)
|
||||
{
|
||||
MutexLocker locker(mutex());
|
||||
|
||||
|
@ -597,7 +597,7 @@ void TCPSocket::retransmit_packets()
|
|||
});
|
||||
}
|
||||
|
||||
bool TCPSocket::can_write(const FileDescription& file_description, size_t size) const
|
||||
bool TCPSocket::can_write(const OpenFileDescription& file_description, size_t size) const
|
||||
{
|
||||
if (!IPv4Socket::can_write(file_description, size))
|
||||
return false;
|
||||
|
|
|
@ -157,7 +157,7 @@ public:
|
|||
|
||||
virtual KResult close() override;
|
||||
|
||||
virtual bool can_write(const FileDescription&, size_t) const override;
|
||||
virtual bool can_write(const OpenFileDescription&, size_t) const override;
|
||||
|
||||
static NetworkOrdered<u16> compute_tcp_checksum(IPv4Address const& source, IPv4Address const& destination, TCPPacket const&, u16 payload_size);
|
||||
|
||||
|
@ -172,7 +172,7 @@ private:
|
|||
|
||||
virtual KResultOr<size_t> protocol_receive(ReadonlyBytes raw_ipv4_packet, UserOrKernelBuffer& buffer, size_t buffer_size, int flags) override;
|
||||
virtual KResultOr<size_t> protocol_send(const UserOrKernelBuffer&, size_t) override;
|
||||
virtual KResult protocol_connect(FileDescription&, ShouldBlock) override;
|
||||
virtual KResult protocol_connect(OpenFileDescription&, ShouldBlock) override;
|
||||
virtual KResultOr<u16> protocol_allocate_local_port() override;
|
||||
virtual bool protocol_is_disconnected() const override;
|
||||
virtual KResult protocol_bind() override;
|
||||
|
|
|
@ -95,7 +95,7 @@ KResultOr<size_t> UDPSocket::protocol_send(const UserOrKernelBuffer& data, size_
|
|||
return data_length;
|
||||
}
|
||||
|
||||
KResult UDPSocket::protocol_connect(FileDescription&, ShouldBlock)
|
||||
KResult UDPSocket::protocol_connect(OpenFileDescription&, ShouldBlock)
|
||||
{
|
||||
set_role(Role::Connected);
|
||||
set_connected(true);
|
||||
|
|
|
@ -27,7 +27,7 @@ private:
|
|||
|
||||
virtual KResultOr<size_t> protocol_receive(ReadonlyBytes raw_ipv4_packet, UserOrKernelBuffer& buffer, size_t buffer_size, int flags) override;
|
||||
virtual KResultOr<size_t> protocol_send(const UserOrKernelBuffer&, size_t) override;
|
||||
virtual KResult protocol_connect(FileDescription&, ShouldBlock) override;
|
||||
virtual KResult protocol_connect(OpenFileDescription&, ShouldBlock) override;
|
||||
virtual KResultOr<u16> protocol_allocate_local_port() override;
|
||||
virtual KResult protocol_bind() override;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue