diff options
author | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-08 16:58:41 +0000 |
---|---|---|
committer | w00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7> | 2008-09-08 16:58:41 +0000 |
commit | 74f401f1997b89783217cd636f396e35f5c2a9d0 (patch) | |
tree | c988875a1ceb7ba3b3baa37d04485ac0e02988a4 | |
parent | 484b718ccf1505360d62401dd09e3eca6b2568d8 (diff) |
Make OnAcceptReady pure virtual, rename ListenSocket to ListenSocketBase, create ClientListenSocket and inherit from ListenSocketBase to create User objects.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@10469 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r-- | include/configreader.h | 4 | ||||
-rw-r--r-- | include/socket.h | 18 | ||||
-rw-r--r-- | src/listensocket.cpp | 20 | ||||
-rw-r--r-- | src/socket.cpp | 9 |
4 files changed, 27 insertions, 24 deletions
diff --git a/include/configreader.h b/include/configreader.h index af9c33533..029b8ac99 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -603,9 +603,9 @@ class CoreExport ServerConfig : public Extensible */ ClassVector Classes; - /** A list of the classes for listening client ports + /** A list of the classes for listening ports */ - std::vector<ListenSocket*> ports; + std::vector<ListenSocketBase *> ports; /** The 005 tokens of this server (ISUPPORT) * populated/repopulated upon loading or unloading diff --git a/include/socket.h b/include/socket.h index 1f699dbd7..961fbd98e 100644 --- a/include/socket.h +++ b/include/socket.h @@ -145,7 +145,7 @@ namespace irc * It will create a new User for every valid connection * and assign it a file descriptor. */ -class CoreExport ListenSocket : public EventHandler +class CoreExport ListenSocketBase : public EventHandler { protected: /** The creator/owner of this object @@ -171,13 +171,13 @@ class CoreExport ListenSocket : public EventHandler public: /** Create a new listening socket */ - ListenSocket(InspIRCd* Instance, int port, char* addr); + ListenSocketBase(InspIRCd* Instance, int port, char* addr); /** Handle an I/O event */ void HandleEvent(EventType et, int errornum = 0); /** Close the socket */ - ~ListenSocket(); + ~ListenSocketBase(); /** Set descriptive text */ void SetDescription(const std::string &description) @@ -212,13 +212,15 @@ class CoreExport ListenSocket : public EventHandler * @param fd The file descriptor of the new connection * @param incomingip The IP from which the connection was made */ - virtual void OnAcceptReady(const std::string &ipconnectedto, int fd, const std::string &incomingip); + virtual void OnAcceptReady(const std::string &ipconnectedto, int fd, const std::string &incomingip) = 0; }; -//class CoreExport ListenSocketClient : public ListenSocket -//{ -// -//} +class CoreExport ClientListenSocket : public ListenSocketBase +{ + virtual void OnAcceptReady(const std::string &ipconnectedto, int fd, const std::string &incomingip); + public: + ClientListenSocket(InspIRCd* Instance, int port, char* addr) : ListenSocketBase(Instance, port, addr) { } +}; #endif diff --git a/src/listensocket.cpp b/src/listensocket.cpp index d6fe2bb1f..3ecfbb432 100644 --- a/src/listensocket.cpp +++ b/src/listensocket.cpp @@ -19,12 +19,12 @@ /* Private static member data must be initialized in this manner */ -unsigned int ListenSocket::socketcount = 0; -sockaddr* ListenSocket::sock_us = NULL; -sockaddr* ListenSocket::client = NULL; -sockaddr* ListenSocket::raddr = NULL; +unsigned int ListenSocketBase::socketcount = 0; +sockaddr* ListenSocketBase::sock_us = NULL; +sockaddr* ListenSocketBase::client = NULL; +sockaddr* ListenSocketBase::raddr = NULL; -ListenSocket::ListenSocket(InspIRCd* Instance, int port, char* addr) : ServerInstance(Instance), desc("plaintext"), bind_addr(addr), bind_port(port) +ListenSocketBase::ListenSocketBase(InspIRCd* Instance, int port, char* addr) : ServerInstance(Instance), desc("plaintext"), bind_addr(addr), bind_port(port) { this->SetFd(irc::sockets::OpenTCPSocket(addr)); if (this->GetFd() > -1) @@ -51,7 +51,7 @@ ListenSocket::ListenSocket(InspIRCd* Instance, int port, char* addr) : ServerIns socketcount++; } -ListenSocket::~ListenSocket() +ListenSocketBase::~ListenSocketBase() { if (this->GetFd() > -1) { @@ -71,7 +71,7 @@ ListenSocket::~ListenSocket() } /* Just seperated into another func for tidiness really.. */ -void ListenSocket::AcceptInternal() +void ListenSocketBase::AcceptInternal() { ServerInstance->Logs->Log("SOCKET",DEBUG,"HandleEvent for Listensoket"); socklen_t uslen, length; // length of our port number @@ -150,7 +150,7 @@ void ListenSocket::AcceptInternal() this->OnAcceptReady(target, incomingSockfd, buf); } -void ListenSocket::HandleEvent(EventType e, int err) +void ListenSocketBase::HandleEvent(EventType e, int err) { switch (e) { @@ -166,7 +166,7 @@ void ListenSocket::HandleEvent(EventType e, int err) } } -void ListenSocket::OnAcceptReady(const std::string &ipconnectedto, int nfd, const std::string &incomingip) +void ClientListenSocket::OnAcceptReady(const std::string &ipconnectedto, int nfd, const std::string &incomingip) { - ServerInstance->Users->AddUser(ServerInstance, nfd, bind_port, false, this->family, client, ipconnectedto); + ServerInstance->Users->AddUser(ServerInstance, nfd, bind_port, false, this->family, client, ipconnectedto); } diff --git a/src/socket.cpp b/src/socket.cpp index f1a814358..01c07e2d0 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -172,6 +172,7 @@ int irc::sockets::OpenTCPSocket(char* addr, int socktype) } } +// XXX: it would be VERY nice to genericize this so all listen stuff (server/client) could use the one function. -- w00t int InspIRCd::BindPorts(bool, int &ports_found, FailedPortList &failed_ports) { char configToken[MAXBUF], Addr[MAXBUF], Type[MAXBUF]; @@ -180,7 +181,7 @@ int InspIRCd::BindPorts(bool, int &ports_found, FailedPortList &failed_ports) std::vector<std::pair<std::string, int> > old_ports; /* XXX: Make a copy of the old ip/port pairs here */ - for (std::vector<ListenSocket*>::iterator o = Config->ports.begin(); o != Config->ports.end(); ++o) + for (std::vector<ListenSocketBase *>::iterator o = Config->ports.begin(); o != Config->ports.end(); ++o) old_ports.push_back(make_pair((*o)->GetIP(), (*o)->GetPort())); for (int count = 0; count < Config->ConfValueEnum(Config->config_data, "bind"); count++) @@ -202,7 +203,7 @@ int InspIRCd::BindPorts(bool, int &ports_found, FailedPortList &failed_ports) *Addr = 0; bool skip = false; - for (std::vector<ListenSocket*>::iterator n = Config->ports.begin(); n != Config->ports.end(); ++n) + for (std::vector<ListenSocketBase *>::iterator n = Config->ports.begin(); n != Config->ports.end(); ++n) { if (((*n)->GetIP() == Addr) && ((*n)->GetPort() == portno)) { @@ -220,7 +221,7 @@ int InspIRCd::BindPorts(bool, int &ports_found, FailedPortList &failed_ports) } if (!skip) { - ListenSocket* ll = new ListenSocket(this, portno, Addr); + ClientListenSocket *ll = new ClientListenSocket(this, portno, Addr); if (ll->GetFd() > -1) { bound++; @@ -241,7 +242,7 @@ int InspIRCd::BindPorts(bool, int &ports_found, FailedPortList &failed_ports) { for (size_t k = 0; k < old_ports.size(); ++k) { - for (std::vector<ListenSocket*>::iterator n = Config->ports.begin(); n != Config->ports.end(); ++n) + for (std::vector<ListenSocketBase *>::iterator n = Config->ports.begin(); n != Config->ports.end(); ++n) { if (((*n)->GetIP() == old_ports[k].first) && ((*n)->GetPort() == old_ports[k].second)) { |