mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:57:44 +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/IPv4SocketTuple.h>
|
||||||
#include <Kernel/Net/Socket.h>
|
#include <Kernel/Net/Socket.h>
|
||||||
|
|
||||||
class IPv4SocketHandle;
|
|
||||||
class TCPSocketHandle;
|
|
||||||
class NetworkAdapter;
|
class NetworkAdapter;
|
||||||
class TCPPacket;
|
class TCPPacket;
|
||||||
class TCPSocket;
|
class TCPSocket;
|
||||||
|
@ -85,27 +83,3 @@ private:
|
||||||
|
|
||||||
bool m_can_read { false };
|
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;
|
NonnullRefPtrVector<Socket> m_pending;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename SocketType>
|
||||||
class SocketHandle {
|
class SocketHandle {
|
||||||
public:
|
public:
|
||||||
SocketHandle() {}
|
SocketHandle() {}
|
||||||
|
|
||||||
SocketHandle(RefPtr<Socket>&& socket)
|
SocketHandle(NonnullRefPtr<SocketType>&& socket)
|
||||||
: m_socket(move(socket))
|
: m_socket(move(socket))
|
||||||
{
|
{
|
||||||
if (m_socket)
|
if (m_socket)
|
||||||
|
@ -125,12 +126,12 @@ public:
|
||||||
|
|
||||||
operator bool() const { return m_socket; }
|
operator bool() const { return m_socket; }
|
||||||
|
|
||||||
Socket* operator->() { return &socket(); }
|
SocketType* operator->() { return &socket(); }
|
||||||
const Socket* operator->() const { return &socket(); }
|
const SocketType* operator->() const { return &socket(); }
|
||||||
|
|
||||||
Socket& socket() { return *m_socket; }
|
SocketType& socket() { return *m_socket; }
|
||||||
const Socket& socket() const { return *m_socket; }
|
const SocketType& socket() const { return *m_socket; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RefPtr<Socket> m_socket;
|
RefPtr<SocketType> m_socket;
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,33 +23,33 @@ Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>& TCPSocket::sockets_by_tuple()
|
||||||
return *s_map;
|
return *s_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
TCPSocketHandle TCPSocket::from_tuple(const IPv4SocketTuple& tuple)
|
SocketHandle<TCPSocket> TCPSocket::from_tuple(const IPv4SocketTuple& tuple)
|
||||||
{
|
{
|
||||||
LOCKER(sockets_by_tuple().lock());
|
LOCKER(sockets_by_tuple().lock());
|
||||||
|
|
||||||
auto exact_match = sockets_by_tuple().resource().get(tuple);
|
auto exact_match = sockets_by_tuple().resource().get(tuple);
|
||||||
if (exact_match.has_value())
|
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_tuple = IPv4SocketTuple(tuple.local_address(), tuple.local_port(), IPv4Address(), 0);
|
||||||
auto address_match = sockets_by_tuple().resource().get(address_tuple);
|
auto address_match = sockets_by_tuple().resource().get(address_tuple);
|
||||||
if (address_match.has_value())
|
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_tuple = IPv4SocketTuple(IPv4Address(), tuple.local_port(), IPv4Address(), 0);
|
||||||
auto wildcard_match = sockets_by_tuple().resource().get(wildcard_tuple);
|
auto wildcard_match = sockets_by_tuple().resource().get(wildcard_tuple);
|
||||||
if (wildcard_match.has_value())
|
if (wildcard_match.has_value())
|
||||||
return { move(wildcard_match.value()) };
|
return { *wildcard_match.value() };
|
||||||
|
|
||||||
return {};
|
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));
|
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);
|
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);
|
void record_incoming_data(int);
|
||||||
|
|
||||||
static Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>& sockets_by_tuple();
|
static Lockable<HashMap<IPv4SocketTuple, TCPSocket*>>& sockets_by_tuple();
|
||||||
static TCPSocketHandle from_tuple(const IPv4SocketTuple& tuple);
|
static SocketHandle<TCPSocket> 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_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:
|
protected:
|
||||||
void set_direction(Direction direction) { m_direction = direction; }
|
void set_direction(Direction direction) { m_direction = direction; }
|
||||||
|
@ -127,27 +127,3 @@ private:
|
||||||
u32 m_packets_out { 0 };
|
u32 m_packets_out { 0 };
|
||||||
u32 m_bytes_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;
|
return *s_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
UDPSocketHandle UDPSocket::from_port(u16 port)
|
SocketHandle<UDPSocket> UDPSocket::from_port(u16 port)
|
||||||
{
|
{
|
||||||
RefPtr<UDPSocket> socket;
|
RefPtr<UDPSocket> socket;
|
||||||
{
|
{
|
||||||
|
@ -24,7 +24,7 @@ UDPSocketHandle UDPSocket::from_port(u16 port)
|
||||||
socket = (*it).value;
|
socket = (*it).value;
|
||||||
ASSERT(socket);
|
ASSERT(socket);
|
||||||
}
|
}
|
||||||
return { move(socket) };
|
return { *socket };
|
||||||
}
|
}
|
||||||
|
|
||||||
UDPSocket::UDPSocket(int protocol)
|
UDPSocket::UDPSocket(int protocol)
|
||||||
|
|
|
@ -2,14 +2,12 @@
|
||||||
|
|
||||||
#include <Kernel/Net/IPv4Socket.h>
|
#include <Kernel/Net/IPv4Socket.h>
|
||||||
|
|
||||||
class UDPSocketHandle;
|
|
||||||
|
|
||||||
class UDPSocket final : public IPv4Socket {
|
class UDPSocket final : public IPv4Socket {
|
||||||
public:
|
public:
|
||||||
static NonnullRefPtr<UDPSocket> create(int protocol);
|
static NonnullRefPtr<UDPSocket> create(int protocol);
|
||||||
virtual ~UDPSocket() override;
|
virtual ~UDPSocket() override;
|
||||||
|
|
||||||
static UDPSocketHandle from_port(u16);
|
static SocketHandle<UDPSocket> from_port(u16);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit UDPSocket(int protocol);
|
explicit UDPSocket(int protocol);
|
||||||
|
@ -22,27 +20,3 @@ private:
|
||||||
virtual int protocol_allocate_local_port() override;
|
virtual int protocol_allocate_local_port() override;
|
||||||
virtual KResult protocol_bind() 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