From 04603237dabe126e40683e77854b182732302671 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 9 Aug 2019 09:16:12 +0200 Subject: [PATCH] Kernel: Merge FooSocketHandle classes into a single SocketHandle - IPv4SocketHandle => SocketHandle - TCPSocketHandle => SocketHandle - UDPSocketHandle => SocketHandle --- Kernel/Net/IPv4Socket.h | 26 -------------------------- Kernel/Net/Socket.h | 13 +++++++------ Kernel/Net/TCPSocket.cpp | 12 ++++++------ Kernel/Net/TCPSocket.h | 30 +++--------------------------- Kernel/Net/UDPSocket.cpp | 4 ++-- Kernel/Net/UDPSocket.h | 28 +--------------------------- 6 files changed, 19 insertions(+), 94 deletions(-) diff --git a/Kernel/Net/IPv4Socket.h b/Kernel/Net/IPv4Socket.h index 9a2bf1f97a..dbdc717ee4 100644 --- a/Kernel/Net/IPv4Socket.h +++ b/Kernel/Net/IPv4Socket.h @@ -9,8 +9,6 @@ #include #include -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&& 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(SocketHandle::socket()); } - const IPv4Socket& socket() const { return static_cast(SocketHandle::socket()); } -}; diff --git a/Kernel/Net/Socket.h b/Kernel/Net/Socket.h index 12bc0edec5..73d040b5e6 100644 --- a/Kernel/Net/Socket.h +++ b/Kernel/Net/Socket.h @@ -98,11 +98,12 @@ private: NonnullRefPtrVector m_pending; }; +template class SocketHandle { public: SocketHandle() {} - SocketHandle(RefPtr&& socket) + SocketHandle(NonnullRefPtr&& 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 m_socket; + RefPtr m_socket; }; diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp index 67bf1a6bbd..95046a340f 100644 --- a/Kernel/Net/TCPSocket.cpp +++ b/Kernel/Net/TCPSocket.cpp @@ -23,33 +23,33 @@ Lockable>& TCPSocket::sockets_by_tuple() return *s_map; } -TCPSocketHandle TCPSocket::from_tuple(const IPv4SocketTuple& tuple) +SocketHandle 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::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::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); diff --git a/Kernel/Net/TCPSocket.h b/Kernel/Net/TCPSocket.h index 33b4756850..e43fa603a9 100644 --- a/Kernel/Net/TCPSocket.h +++ b/Kernel/Net/TCPSocket.h @@ -95,10 +95,10 @@ public: void record_incoming_data(int); static Lockable>& 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 from_tuple(const IPv4SocketTuple& tuple); + static SocketHandle 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 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&& 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(SocketHandle::socket()); } - const TCPSocket& socket() const { return static_cast(SocketHandle::socket()); } -}; diff --git a/Kernel/Net/UDPSocket.cpp b/Kernel/Net/UDPSocket.cpp index 7ceebbb1d9..0237d1ee90 100644 --- a/Kernel/Net/UDPSocket.cpp +++ b/Kernel/Net/UDPSocket.cpp @@ -13,7 +13,7 @@ Lockable>& UDPSocket::sockets_by_port() return *s_map; } -UDPSocketHandle UDPSocket::from_port(u16 port) +SocketHandle UDPSocket::from_port(u16 port) { RefPtr 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) diff --git a/Kernel/Net/UDPSocket.h b/Kernel/Net/UDPSocket.h index aa304f2b5b..b19cad00df 100644 --- a/Kernel/Net/UDPSocket.h +++ b/Kernel/Net/UDPSocket.h @@ -2,14 +2,12 @@ #include -class UDPSocketHandle; - class UDPSocket final : public IPv4Socket { public: static NonnullRefPtr create(int protocol); virtual ~UDPSocket() override; - static UDPSocketHandle from_port(u16); + static SocketHandle 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&& 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(SocketHandle::socket()); } - const UDPSocket& socket() const { return static_cast(SocketHandle::socket()); } -};