summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules.h8
-rw-r--r--include/usermanager.h4
-rw-r--r--src/listensocket.cpp2
-rw-r--r--src/modules.cpp2
-rw-r--r--src/modules/extra/m_ssl_gnutls.cpp6
-rw-r--r--src/modules/extra/m_ssl_openssl.cpp6
-rw-r--r--src/usermanager.cpp4
7 files changed, 18 insertions, 14 deletions
diff --git a/include/modules.h b/include/modules.h
index 3f36f23da..f4a9b0fb6 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -461,7 +461,7 @@ enum Implementation
I_OnChangeLocalUserGECOS, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete,
I_OnPostOper, I_OnSyncNetwork, I_OnSetAway, I_OnUserList, I_OnPostCommand, I_OnPostJoin,
I_OnWhoisLine, I_OnBuildExemptList, I_OnRawSocketConnect, I_OnGarbageCollect, I_OnBufferFlushed,
- I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookUserIO,
+ I_OnText, I_OnPassCompare, I_OnRunTestSuite, I_OnNamesListItem, I_OnNumeric, I_OnHookIO,
I_OnHostCycle, I_OnPreRehash, I_OnModuleRehash,
I_END
};
@@ -1313,7 +1313,11 @@ class CoreExport Module : public Extensible
*/
virtual int OnDelBan(User* source, Channel* channel,const std::string &banmask);
- virtual void OnHookUserIO(User* user);
+ /** Called to install an I/O hook on an event handler
+ * @param user The item to possibly install the I/O hook on
+ * @param via The port that <user> connected on
+ */
+ virtual void OnHookIO(EventHandler* user, ListenSocketBase* via);
/** Called immediately after any connection is accepted. This is intended for raw socket
* processing (e.g. modules which wrap the tcp connection within another library) and provides
diff --git a/include/usermanager.h b/include/usermanager.h
index 56a545353..72b10b224 100644
--- a/include/usermanager.h
+++ b/include/usermanager.h
@@ -75,12 +75,12 @@ class CoreExport UserManager : public Extensible
* initialize it as not yet registered, and add it to the socket engine.
* @param Instance a pointer to the server instance
* @param socket The socket id (file descriptor) this user is on
- * @param iscached This variable is reserved for future use
+ * @param via The socket that this user connected using
* @param client The IP address and client port of the user
* @param server The server IP address and port used by the user
* @return This function has no return value, but a call to AddClient may remove the user.
*/
- void AddUser(InspIRCd* Instance, int socket, bool iscached, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server);
+ void AddUser(InspIRCd* Instance, int socket, ClientListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server);
/** Disconnect a user gracefully
* @param user The user to remove
diff --git a/src/listensocket.cpp b/src/listensocket.cpp
index ed99c2787..663f912e6 100644
--- a/src/listensocket.cpp
+++ b/src/listensocket.cpp
@@ -148,5 +148,5 @@ void ListenSocketBase::HandleEvent(EventType e, int err)
void ClientListenSocket::OnAcceptReady(int nfd)
{
- ServerInstance->Users->AddUser(ServerInstance, nfd, false, &client, &server);
+ ServerInstance->Users->AddUser(ServerInstance, nfd, this, &client, &server);
}
diff --git a/src/modules.cpp b/src/modules.cpp
index ad7efdb06..701b76ae2 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -196,7 +196,7 @@ void Module::OnText(User*, void*, int, const std::string&, char, CUList&) { }
void Module::OnRunTestSuite() { }
void Module::OnNamesListItem(User*, User*, Channel*, std::string&, std::string&) { }
int Module::OnNumeric(User*, unsigned int, const std::string&) { return 0; }
-void Module::OnHookUserIO(User*) { }
+void Module::OnHookIO(EventHandler*, ListenSocketBase*) { }
bool Module::OnHostCycle(User* user) { return false; }
ModuleManager::ModuleManager(InspIRCd* Ins) : ModCount(0), Instance(Ins)
diff --git a/src/modules/extra/m_ssl_gnutls.cpp b/src/modules/extra/m_ssl_gnutls.cpp
index 1c90428b2..7e3b62671 100644
--- a/src/modules/extra/m_ssl_gnutls.cpp
+++ b/src/modules/extra/m_ssl_gnutls.cpp
@@ -132,7 +132,7 @@ class ModuleSSLGnuTLS : public Module
Implementation eventlist[] = { I_On005Numeric, I_OnRawSocketConnect, I_OnRawSocketAccept,
I_OnRawSocketClose, I_OnRawSocketRead, I_OnRawSocketWrite, I_OnCleanup,
I_OnBufferFlushed, I_OnRequest, I_OnUnloadModule, I_OnRehash, I_OnModuleRehash,
- I_OnPostConnect, I_OnEvent, I_OnHookUserIO };
+ I_OnPostConnect, I_OnEvent, I_OnHookIO };
ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
ServerInstance->AddCommand(&starttls);
@@ -346,9 +346,9 @@ class ModuleSSLGnuTLS : public Module
output.append(" STARTTLS");
}
- virtual void OnHookUserIO(User* user)
+ virtual void OnHookIO(EventHandler* user, ListenSocketBase* lsb)
{
- if (!user->GetIOHook() && isin(user->GetServerIP(),user->GetServerPort(),listenports))
+ if (!user->GetIOHook() && isin(lsb->GetIP(),lsb->GetPort(),listenports))
{
/* Hook the user with our module */
user->AddIOHook(this);
diff --git a/src/modules/extra/m_ssl_openssl.cpp b/src/modules/extra/m_ssl_openssl.cpp
index 55b7d8416..fc0de61f4 100644
--- a/src/modules/extra/m_ssl_openssl.cpp
+++ b/src/modules/extra/m_ssl_openssl.cpp
@@ -153,13 +153,13 @@ class ModuleSSLOpenSSL : public Module
Implementation eventlist[] = { I_OnRawSocketConnect, I_OnRawSocketAccept,
I_OnRawSocketClose, I_OnRawSocketRead, I_OnRawSocketWrite, I_OnCleanup, I_On005Numeric,
I_OnBufferFlushed, I_OnRequest, I_OnUnloadModule, I_OnRehash, I_OnModuleRehash,
- I_OnPostConnect, I_OnHookUserIO };
+ I_OnPostConnect, I_OnHookIO };
ServerInstance->Modules->Attach(eventlist, this, sizeof(eventlist)/sizeof(Implementation));
}
- virtual void OnHookUserIO(User* user)
+ virtual void OnHookIO(EventHandler* user, ListenSocketBase* lsb)
{
- if (!user->GetIOHook() && isin(user->GetServerIP(),user->GetServerPort(), listenports))
+ if (!user->GetIOHook() && isin(lsb->GetIP(),lsb->GetPort(),listenports))
{
/* Hook the user with our module */
user->AddIOHook(this);
diff --git a/src/usermanager.cpp b/src/usermanager.cpp
index f62daf892..a31ac086e 100644
--- a/src/usermanager.cpp
+++ b/src/usermanager.cpp
@@ -18,7 +18,7 @@
#include "bancache.h"
/* add a client connection to the sockets list */
-void UserManager::AddUser(InspIRCd* Instance, int socket, bool iscached, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server)
+void UserManager::AddUser(InspIRCd* Instance, int socket, ClientListenSocket* via, irc::sockets::sockaddrs* client, irc::sockets::sockaddrs* server)
{
/* NOTE: Calling this one parameter constructor for User automatically
* allocates a new UUID and places it in the hash_map.
@@ -40,7 +40,7 @@ void UserManager::AddUser(InspIRCd* Instance, int socket, bool iscached, irc::so
memcpy(&New->server_sa, server, sizeof(irc::sockets::sockaddrs));
/* Give each of the modules an attempt to hook the user for I/O */
- FOREACH_MOD_I(Instance, I_OnHookUserIO, OnHookUserIO(New));
+ FOREACH_MOD_I(Instance, I_OnHookIO, OnHookIO(New, via));
if (New->GetIOHook())
{