diff options
-rw-r--r-- | include/modules.h | 8 | ||||
-rw-r--r-- | include/usermanager.h | 4 | ||||
-rw-r--r-- | src/listensocket.cpp | 2 | ||||
-rw-r--r-- | src/modules.cpp | 2 | ||||
-rw-r--r-- | src/modules/extra/m_ssl_gnutls.cpp | 6 | ||||
-rw-r--r-- | src/modules/extra/m_ssl_openssl.cpp | 6 | ||||
-rw-r--r-- | src/usermanager.cpp | 4 |
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()) { |