mirror of
https://github.com/RGBCube/serenity
synced 2025-05-22 16:55:09 +00:00
Kernel: Customize absolute_path() for more file types
This commit is contained in:
parent
1d03391488
commit
dadf6337ef
7 changed files with 91 additions and 15 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
#include <AK/StringBuilder.h>
|
||||||
#include <Kernel/FileSystem/FileDescription.h>
|
#include <Kernel/FileSystem/FileDescription.h>
|
||||||
#include <Kernel/Net/ARP.h>
|
#include <Kernel/Net/ARP.h>
|
||||||
#include <Kernel/Net/ICMP.h>
|
#include <Kernel/Net/ICMP.h>
|
||||||
|
@ -268,3 +269,35 @@ void IPv4Socket::did_receive(const IPv4Address& source_address, u16 source_port,
|
||||||
kprintf("IPv4Socket(%p): did_receive %d bytes, total_received=%u, packets in queue: %d\n", this, packet_size, m_bytes_received, m_receive_queue.size_slow());
|
kprintf("IPv4Socket(%p): did_receive %d bytes, total_received=%u, packets in queue: %d\n", this, packet_size, m_bytes_received, m_receive_queue.size_slow());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String IPv4Socket::absolute_path(const FileDescription&) const
|
||||||
|
{
|
||||||
|
if (m_role == Role::None)
|
||||||
|
return "socket";
|
||||||
|
|
||||||
|
StringBuilder builder;
|
||||||
|
builder.append("socket:");
|
||||||
|
|
||||||
|
builder.appendf("%s:%d", m_local_address.to_string().characters(), m_local_port);
|
||||||
|
if (m_role == Role::Accepted || m_role == Role::Connected)
|
||||||
|
builder.appendf(" / %s:%d", m_peer_address.to_string().characters(), m_peer_port);
|
||||||
|
|
||||||
|
switch (m_role) {
|
||||||
|
case Role::Listener:
|
||||||
|
builder.append(" (listening)");
|
||||||
|
break;
|
||||||
|
case Role::Accepted:
|
||||||
|
builder.append(" (accepted)");
|
||||||
|
break;
|
||||||
|
case Role::Connected:
|
||||||
|
builder.append(" (connected)");
|
||||||
|
break;
|
||||||
|
case Role::Connecting:
|
||||||
|
builder.append(" (connecting)");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT_NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.to_string();
|
||||||
|
}
|
||||||
|
|
|
@ -45,6 +45,8 @@ public:
|
||||||
|
|
||||||
IPv4SocketTuple tuple() const { return IPv4SocketTuple(m_local_address, m_local_port, m_peer_address, m_peer_port); }
|
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;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
IPv4Socket(int type, int protocol);
|
IPv4Socket(int type, int protocol);
|
||||||
virtual const char* class_name() const override { return "IPv4Socket"; }
|
virtual const char* class_name() const override { return "IPv4Socket"; }
|
||||||
|
|
|
@ -254,3 +254,29 @@ StringView LocalSocket::socket_path() const
|
||||||
int len = strnlen(m_address.sun_path, sizeof(m_address.sun_path));
|
int len = strnlen(m_address.sun_path, sizeof(m_address.sun_path));
|
||||||
return { m_address.sun_path, len };
|
return { m_address.sun_path, len };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String LocalSocket::absolute_path(const FileDescription& description) const
|
||||||
|
{
|
||||||
|
StringBuilder builder;
|
||||||
|
builder.append("socket:");
|
||||||
|
builder.append(socket_path());
|
||||||
|
|
||||||
|
switch (role(description)) {
|
||||||
|
case Role::Listener:
|
||||||
|
builder.append(" (listening)");
|
||||||
|
break;
|
||||||
|
case Role::Accepted:
|
||||||
|
builder.appendf(" (accepted from pid %d)", origin_pid());
|
||||||
|
break;
|
||||||
|
case Role::Connected:
|
||||||
|
builder.appendf(" (connected to pid %d)", acceptor_pid());
|
||||||
|
break;
|
||||||
|
case Role::Connecting:
|
||||||
|
builder.append(" (connecting)");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.to_string();
|
||||||
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@ public:
|
||||||
static void for_each(Function<void(LocalSocket&)>);
|
static void for_each(Function<void(LocalSocket&)>);
|
||||||
|
|
||||||
StringView socket_path() const;
|
StringView socket_path() const;
|
||||||
|
String absolute_path(const FileDescription& description) const override;
|
||||||
|
|
||||||
// ^Socket
|
// ^Socket
|
||||||
virtual KResult bind(const sockaddr*, socklen_t) override;
|
virtual KResult bind(const sockaddr*, socklen_t) override;
|
||||||
virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
|
virtual KResult connect(FileDescription&, const sockaddr*, socklen_t, ShouldBlock = ShouldBlock::Yes) override;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#include <AK/StringBuilder.h>
|
||||||
#include <Kernel/FileSystem/FileDescription.h>
|
#include <Kernel/FileSystem/FileDescription.h>
|
||||||
#include <Kernel/Net/IPv4Socket.h>
|
#include <Kernel/Net/IPv4Socket.h>
|
||||||
#include <Kernel/Net/LocalSocket.h>
|
#include <Kernel/Net/LocalSocket.h>
|
||||||
|
@ -149,23 +150,28 @@ void Socket::load_send_deadline()
|
||||||
m_send_deadline.tv_usec %= 1000000;
|
m_send_deadline.tv_usec %= 1000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* to_string(Socket::Role role)
|
|
||||||
{
|
|
||||||
switch (role) {
|
|
||||||
case Socket::Role::Listener:
|
|
||||||
return "Listener";
|
|
||||||
case Socket::Role::Accepted:
|
|
||||||
return "Accepted";
|
|
||||||
case Socket::Role::Connected:
|
|
||||||
return "Connected";
|
|
||||||
default:
|
|
||||||
return "None";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String Socket::absolute_path(const FileDescription& description) const
|
String Socket::absolute_path(const FileDescription& description) const
|
||||||
{
|
{
|
||||||
return String::format("socket:%x (role: %s)", this, ::to_string(role(description)));
|
StringBuilder builder;
|
||||||
|
builder.appendf("socket:%x", this);
|
||||||
|
|
||||||
|
switch (role(description)) {
|
||||||
|
case Role::None:
|
||||||
|
break;
|
||||||
|
case Role::Listener:
|
||||||
|
builder.append(" (listening)");
|
||||||
|
break;
|
||||||
|
case Role::Accepted:
|
||||||
|
builder.append(" (accepted)");
|
||||||
|
break;
|
||||||
|
case Role::Connected:
|
||||||
|
builder.append(" (connected)");
|
||||||
|
break;
|
||||||
|
case Role::Connecting:
|
||||||
|
builder.append(" (connecting)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return builder.to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t Socket::read(FileDescription& description, u8* buffer, ssize_t size)
|
ssize_t Socket::read(FileDescription& description, u8* buffer, ssize_t size)
|
||||||
|
|
|
@ -102,3 +102,8 @@ int MasterPTY::ioctl(FileDescription& description, unsigned request, unsigned ar
|
||||||
return m_slave->ioctl(description, request, arg);
|
return m_slave->ioctl(description, request, arg);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String MasterPTY::absolute_path(const FileDescription&) const
|
||||||
|
{
|
||||||
|
return String::format("ptm:%s", m_pts_name.characters());
|
||||||
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ public:
|
||||||
void notify_slave_closed(Badge<SlavePTY>);
|
void notify_slave_closed(Badge<SlavePTY>);
|
||||||
bool is_closed() const { return m_closed; }
|
bool is_closed() const { return m_closed; }
|
||||||
|
|
||||||
|
virtual String absolute_path(const FileDescription&) const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// ^CharacterDevice
|
// ^CharacterDevice
|
||||||
virtual ssize_t read(FileDescription&, u8*, ssize_t) override;
|
virtual ssize_t read(FileDescription&, u8*, ssize_t) override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue