From 4b55736dde3c03e6732d2d550b53218b35c37e21 Mon Sep 17 00:00:00 2001 From: Hugo Santos Date: Fri, 27 Apr 2007 07:09:46 +0000 Subject: [PATCH] added new helper ProtocolSocket. Moved some stuff together to achieve better inlining. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20848 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/net/AddressUtilities.h | 29 +++-------- headers/private/net/ProtocolUtilities.h | 51 +++++++++++++++++-- .../network/protocols/tcp/TCPEndpoint.cpp | 6 ++- .../network/protocols/tcp/TCPEndpoint.h | 26 ++-------- 4 files changed, 64 insertions(+), 48 deletions(-) diff --git a/headers/private/net/AddressUtilities.h b/headers/private/net/AddressUtilities.h index b43725d469..ddbaffc895 100644 --- a/headers/private/net/AddressUtilities.h +++ b/headers/private/net/AddressUtilities.h @@ -16,20 +16,13 @@ class SocketAddress { public: SocketAddress(net_address_module_info *module, sockaddr *address) - : fModule(module), fAddress(NULL) - { - SetAddressTo(address); - } + : fModule(module), fAddress(address) {} SocketAddress(net_address_module_info *module, sockaddr_storage *address) - : fModule(module), fAddress(NULL) - { - SetAddressTo((sockaddr *)address); - } + : fModule(module), fAddress((sockaddr *)address) {} SocketAddress(const SocketAddress &address) - : fModule(address.fModule), fAddress(address.fAddress) - {} + : fModule(address.fModule), fAddress(address.fAddress) {} void SetAddressTo(sockaddr *address) { @@ -113,25 +106,17 @@ class ConstSocketAddress { public: ConstSocketAddress(net_address_module_info *module, const sockaddr *address) - : fModule(module), fAddress(NULL) - { - SetAddressTo(address); - } + : fModule(module), fAddress(address) {} ConstSocketAddress(net_address_module_info *module, const sockaddr_storage *address) - : fModule(module), fAddress(NULL) - { - SetAddressTo((sockaddr *)address); - } + : fModule(module), fAddress((sockaddr *)address) {} ConstSocketAddress(const ConstSocketAddress &address) - : fModule(address.fModule), fAddress(address.fAddress) - {} + : fModule(address.fModule), fAddress(address.fAddress) {} ConstSocketAddress(const SocketAddress &address) - : fModule(address.Module()), fAddress(*address) - {} + : fModule(address.Module()), fAddress(*address) {} void SetAddressTo(const sockaddr *address) { diff --git a/headers/private/net/ProtocolUtilities.h b/headers/private/net/ProtocolUtilities.h index f100361fa6..050be7e1b6 100644 --- a/headers/private/net/ProtocolUtilities.h +++ b/headers/private/net/ProtocolUtilities.h @@ -14,9 +14,12 @@ #include #include +#include #include #include +#include + class BenaphoreLocking { public: typedef benaphore Type; @@ -40,9 +43,52 @@ public: }; +class ProtocolSocket { +public: + ProtocolSocket(net_socket *socket); + + status_t Open(); + + SocketAddress LocalAddress() + { return SocketAddress(fDomain->address_module, &fSocket->address); } + ConstSocketAddress LocalAddress() const + { return ConstSocketAddress(fDomain->address_module, &fSocket->address); } + + SocketAddress PeerAddress() + { return SocketAddress(fDomain->address_module, &fSocket->peer); } + ConstSocketAddress PeerAddress() const + { return ConstSocketAddress(fDomain->address_module, &fSocket->peer); } + + net_domain *Domain() const { return fDomain; } + net_address_module_info *AddressModule() const + { return fDomain->address_module; } + +protected: + net_socket *fSocket; + net_domain *fDomain; +}; + + +inline ProtocolSocket::ProtocolSocket(net_socket *socket) + : fSocket(socket), fDomain(NULL) {} + + +inline status_t +ProtocolSocket::Open() +{ + fDomain = fSocket->first_protocol->module->get_domain( + fSocket->first_protocol); + + if (fDomain == NULL || fDomain->address_module == NULL) + return EAFNOSUPPORT; + + return B_OK; +} + + template -class DatagramSocket { +class DatagramSocket : public ProtocolSocket { public: DatagramSocket(const char *name, net_socket *socket); virtual ~DatagramSocket(); @@ -83,7 +129,6 @@ protected: typedef DoublyLinkedListCLink NetBufferLink; typedef DoublyLinkedList BufferList; - net_socket *fSocket; sem_id fNotify; BufferList fBuffers; size_t fCurrentBytes; @@ -98,7 +143,7 @@ protected: DECL_DATAGRAM_SOCKET(inline)::DatagramSocket(const char *name, net_socket *socket) - : fSocket(socket), fCurrentBytes(0) + : ProtocolSocket(socket), fCurrentBytes(0) { status_t status = LockingBase::Init(&fLock, name); if (status < B_OK) diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp index 80ad60bb85..836e18d869 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.cpp @@ -211,6 +211,7 @@ WaitList::Signal() TCPEndpoint::TCPEndpoint(net_socket *socket) : + ProtocolSocket(socket), fManager(NULL), fReceiveList("tcp receive"), fSendList("tcp send"), @@ -298,8 +299,9 @@ TCPEndpoint::Open() { TRACE("Open()"); - if (Domain() == NULL || AddressModule() == NULL) - return EAFNOSUPPORT; + status_t status = ProtocolSocket::Open(); + if (status < B_OK) + return status; fManager = create_endpoint_manager(Domain()); if (fManager == NULL) diff --git a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.h b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.h index 35da4f2ab1..a4c9a99fbc 100644 --- a/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.h +++ b/src/add-ons/kernel/network/protocols/tcp/TCPEndpoint.h @@ -10,10 +10,12 @@ #define TCP_ENDPOINT_H -#include "tcp.h" #include "BufferQueue.h" +#include "EndpointManager.h" +#include "tcp.h" -#include + +#include #include #include #include @@ -23,8 +25,6 @@ #include -class EndpointManager; - class WaitList { public: WaitList(const char *name); @@ -40,7 +40,7 @@ private: }; -class TCPEndpoint : public net_protocol { +class TCPEndpoint : public net_protocol, public ProtocolSocket { public: TCPEndpoint(net_socket *socket); ~TCPEndpoint(); @@ -69,16 +69,6 @@ class TCPEndpoint : public net_protocol { tcp_state State() const { return fState; } bool IsBound() const; - SocketAddress LocalAddress() - { return SocketAddress(AddressModule(), &socket->address); } - ConstSocketAddress LocalAddress() const - { return ConstSocketAddress(AddressModule(), &socket->address); } - - SocketAddress PeerAddress() - { return SocketAddress(AddressModule(), &socket->peer); } - ConstSocketAddress PeerAddress() const - { return ConstSocketAddress(AddressModule(), &socket->peer); } - void DeleteSocket(); status_t DelayedAcknowledge(); @@ -89,12 +79,6 @@ class TCPEndpoint : public net_protocol { int32 Spawn(TCPEndpoint *parent, tcp_segment_header& segment, net_buffer *buffer); - net_domain *Domain() const - { return socket->first_protocol->module->get_domain( - socket->first_protocol); } - net_address_module_info *AddressModule() const - { return Domain()->address_module; } - private: friend class EndpointManager;