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:
parent
5c66c67f32
commit
04603237da
6 changed files with 19 additions and 94 deletions
|
@ -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()); }
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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()); }
|
||||
};
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()); }
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue