1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:17:45 +00:00

Kernel: Merge FooSocketHandle classes into a single SocketHandle<Foo>

- IPv4SocketHandle => SocketHandle<IPv4Socket>
- TCPSocketHandle => SocketHandle<TCPSocket>
- UDPSocketHandle => SocketHandle<UDPSocket>
This commit is contained in:
Andreas Kling 2019-08-09 09:16:12 +02:00
parent 5c66c67f32
commit 04603237da
6 changed files with 19 additions and 94 deletions

View file

@ -9,8 +9,6 @@
#include <Kernel/Net/IPv4SocketTuple.h>
#include <Kernel/Net/Socket.h>
class IPv4SocketHandle;
class TCPSocketHandle;
class NetworkAdapter;
class TCPPacket;
class TCPSocket;
@ -85,27 +83,3 @@ private:
bool m_can_read { false };
};
class IPv4SocketHandle : public SocketHandle {
public:
IPv4SocketHandle() {}
IPv4SocketHandle(RefPtr<IPv4Socket>&& socket)
: SocketHandle(move(socket))
{
}
IPv4SocketHandle(IPv4SocketHandle&& other)
: SocketHandle(move(other))
{
}
IPv4SocketHandle(const IPv4SocketHandle&) = delete;
IPv4SocketHandle& operator=(const IPv4SocketHandle&) = delete;
IPv4Socket* operator->() { return &socket(); }
const IPv4Socket* operator->() const { return &socket(); }
IPv4Socket& socket() { return static_cast<IPv4Socket&>(SocketHandle::socket()); }
const IPv4Socket& socket() const { return static_cast<const IPv4Socket&>(SocketHandle::socket()); }
};

View file

@ -98,11 +98,12 @@ private:
NonnullRefPtrVector<Socket> m_pending;
};
template<typename SocketType>
class SocketHandle {
public:
SocketHandle() {}
SocketHandle(RefPtr<Socket>&& socket)
SocketHandle(NonnullRefPtr<SocketType>&& socket)
: m_socket(move(socket))
{
if (m_socket)
@ -125,12 +126,12 @@ public:
operator bool() const { return m_socket; }
Socket* operator->() { return &socket(); }
const Socket* operator->() const { return &socket(); }
SocketType* operator->() { return &socket(); }
const SocketType* operator->() const { return &socket(); }
Socket& socket() { return *m_socket; }
const Socket& socket() const { return *m_socket; }
SocketType& socket() { return *m_socket; }
const SocketType& socket() const { return *m_socket; }
private:
RefPtr<Socket> m_socket;
RefPtr<SocketType> m_socket;
};

View file

@ -23,33 +23,33 @@ Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>& TCPSocket::sockets_by_tuple()
return *s_map;
}
TCPSocketHandle TCPSocket::from_tuple(const IPv4SocketTuple& tuple)
SocketHandle<TCPSocket> TCPSocket::from_tuple(const IPv4SocketTuple& tuple)
{
LOCKER(sockets_by_tuple().lock());
auto exact_match = sockets_by_tuple().resource().get(tuple);
if (exact_match.has_value())
return { move(exact_match.value()) };
return { *exact_match.value() };
auto address_tuple = IPv4SocketTuple(tuple.local_address(), tuple.local_port(), IPv4Address(), 0);
auto address_match = sockets_by_tuple().resource().get(address_tuple);
if (address_match.has_value())
return { move(address_match.value()) };
return { *address_match.value() };
auto wildcard_tuple = IPv4SocketTuple(IPv4Address(), tuple.local_port(), IPv4Address(), 0);
auto wildcard_match = sockets_by_tuple().resource().get(wildcard_tuple);
if (wildcard_match.has_value())
return { move(wildcard_match.value()) };
return { *wildcard_match.value() };
return {};
}
TCPSocketHandle TCPSocket::from_endpoints(const IPv4Address& local_address, u16 local_port, const IPv4Address& peer_address, u16 peer_port)
SocketHandle<TCPSocket> TCPSocket::from_endpoints(const IPv4Address& local_address, u16 local_port, const IPv4Address& peer_address, u16 peer_port)
{
return from_tuple(IPv4SocketTuple(local_address, local_port, peer_address, peer_port));
}
TCPSocketHandle TCPSocket::create_client(const IPv4Address& new_local_address, u16 new_local_port, const IPv4Address& new_peer_address, u16 new_peer_port)
SocketHandle<TCPSocket> TCPSocket::create_client(const IPv4Address& new_local_address, u16 new_local_port, const IPv4Address& new_peer_address, u16 new_peer_port)
{
auto tuple = IPv4SocketTuple(new_local_address, new_local_port, new_peer_address, new_peer_port);

View file

@ -95,10 +95,10 @@ public:
void record_incoming_data(int);
static Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>& sockets_by_tuple();
static TCPSocketHandle from_tuple(const IPv4SocketTuple& tuple);
static TCPSocketHandle from_endpoints(const IPv4Address& local_address, u16 local_port, const IPv4Address& peer_address, u16 peer_port);
static SocketHandle<TCPSocket> from_tuple(const IPv4SocketTuple& tuple);
static SocketHandle<TCPSocket> from_endpoints(const IPv4Address& local_address, u16 local_port, const IPv4Address& peer_address, u16 peer_port);
TCPSocketHandle create_client(const IPv4Address& local_address, u16 local_port, const IPv4Address& peer_address, u16 peer_port);
SocketHandle<TCPSocket> create_client(const IPv4Address& local_address, u16 local_port, const IPv4Address& peer_address, u16 peer_port);
protected:
void set_direction(Direction direction) { m_direction = direction; }
@ -127,27 +127,3 @@ private:
u32 m_packets_out { 0 };
u32 m_bytes_out { 0 };
};
class TCPSocketHandle : public SocketHandle {
public:
TCPSocketHandle() {}
TCPSocketHandle(RefPtr<TCPSocket>&& socket)
: SocketHandle(move(socket))
{
}
TCPSocketHandle(TCPSocketHandle&& other)
: SocketHandle(move(other))
{
}
TCPSocketHandle(const TCPSocketHandle&) = delete;
TCPSocketHandle& operator=(const TCPSocketHandle&) = delete;
TCPSocket* operator->() { return &socket(); }
const TCPSocket* operator->() const { return &socket(); }
TCPSocket& socket() { return static_cast<TCPSocket&>(SocketHandle::socket()); }
const TCPSocket& socket() const { return static_cast<const TCPSocket&>(SocketHandle::socket()); }
};

View file

@ -13,7 +13,7 @@ Lockable<HashMap<u16, UDPSocket*>>& UDPSocket::sockets_by_port()
return *s_map;
}
UDPSocketHandle UDPSocket::from_port(u16 port)
SocketHandle<UDPSocket> UDPSocket::from_port(u16 port)
{
RefPtr<UDPSocket> socket;
{
@ -24,7 +24,7 @@ UDPSocketHandle UDPSocket::from_port(u16 port)
socket = (*it).value;
ASSERT(socket);
}
return { move(socket) };
return { *socket };
}
UDPSocket::UDPSocket(int protocol)

View file

@ -2,14 +2,12 @@
#include <Kernel/Net/IPv4Socket.h>
class UDPSocketHandle;
class UDPSocket final : public IPv4Socket {
public:
static NonnullRefPtr<UDPSocket> create(int protocol);
virtual ~UDPSocket() override;
static UDPSocketHandle from_port(u16);
static SocketHandle<UDPSocket> from_port(u16);
private:
explicit UDPSocket(int protocol);
@ -22,27 +20,3 @@ private:
virtual int protocol_allocate_local_port() override;
virtual KResult protocol_bind() override;
};
class UDPSocketHandle : public SocketHandle {
public:
UDPSocketHandle() {}
UDPSocketHandle(RefPtr<UDPSocket>&& socket)
: SocketHandle(move(socket))
{
}
UDPSocketHandle(UDPSocketHandle&& other)
: SocketHandle(move(other))
{
}
UDPSocketHandle(const UDPSocketHandle&) = delete;
UDPSocketHandle& operator=(const UDPSocketHandle&) = delete;
UDPSocket* operator->() { return &socket(); }
const UDPSocket* operator->() const { return &socket(); }
UDPSocket& socket() { return static_cast<UDPSocket&>(SocketHandle::socket()); }
const UDPSocket& socket() const { return static_cast<const UDPSocket&>(SocketHandle::socket()); }
};