summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-09-08 16:58:41 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-09-08 16:58:41 +0000
commit74f401f1997b89783217cd636f396e35f5c2a9d0 (patch)
treec988875a1ceb7ba3b3baa37d04485ac0e02988a4
parent484b718ccf1505360d62401dd09e3eca6b2568d8 (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.h4
-rw-r--r--include/socket.h18
-rw-r--r--src/listensocket.cpp20
-rw-r--r--src/socket.cpp9
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))
{