summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2005-12-16 01:14:02 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2005-12-16 01:14:02 +0000
commit0b6295a0aa384ba11522abf7b417593fb28c407c (patch)
tree2e88e54618710d8f55d87ec1185364445b197337 /src
parent0b675b72d5ca8a963734ca838e8ae81230046a66 (diff)
Changed I/O reading stuff for modules to be much faster (and exclusive :()
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2500 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/inspircd.cpp6
-rw-r--r--src/modules.cpp2
-rw-r--r--src/userprocess.cpp33
3 files changed, 27 insertions, 14 deletions
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 83f5948fb..b564ec396 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -75,6 +75,7 @@ extern int MODCOUNT;
int openSockfd[MAXSOCKS];
sockaddr_in client,server;
socklen_t length;
+extern Module* IOHookModule;
extern InspSocket* socket_ref[65535];
@@ -1184,7 +1185,10 @@ int InspIRCd::Run()
*/
if (incomingSockfd >= 0)
{
- FOREACH_MOD OnRawSocketAccept(incomingSockfd, target, in_port);
+ if (IOHookModule)
+ {
+ IOHookModule->OnRawSocketAccept(incomingSockfd, target, in_port);
+ }
stats->statsAccept++;
AddClient(incomingSockfd, target, in_port, false, target);
log(DEBUG,"Adding client on port %lu fd=%lu",(unsigned long)in_port,(unsigned long)incomingSockfd);
diff --git a/src/modules.cpp b/src/modules.cpp
index c2fa1a036..a5404038b 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -67,7 +67,7 @@ extern chan_hash chanlist;
extern command_table cmdlist;
ExtModeList EMode;
-Module* IOHookModule;
+Module* IOHookModule = NULL;
// returns true if an extended mode character is in use
bool ModeDefined(char modechar, int type)
diff --git a/src/userprocess.cpp b/src/userprocess.cpp
index b5a5b6683..f8d7218cf 100644
--- a/src/userprocess.cpp
+++ b/src/userprocess.cpp
@@ -79,22 +79,31 @@ char data[65536];
extern user_hash clientlist;
extern chan_hash chanlist;
+extern Module* IOHookModule;
+
void ProcessUser(userrec* cu)
{
int result = EAGAIN;
log(DEBUG,"Processing user with fd %d",cu->fd);
- int MOD_RESULT = 0;
- int result2 = 0;
- FOREACH_RESULT(OnRawSocketRead(cu->fd,data,65535,result2));
- if (!MOD_RESULT)
- {
- result = cu->ReadData(data, 65535);
- }
- else
- {
- log(DEBUG,"Data result returned by module: %d",MOD_RESULT);
- result = result2;
- }
+ if (IOHookModule)
+ {
+ int MOD_RESULT = 0;
+ int result2 = 0;
+ IOHookModule->OnRawSocketRead(cu->fd,data,65535,result2);
+ if (!MOD_RESULT)
+ {
+ result = cu->ReadData(data, 65535);
+ }
+ else
+ {
+ log(DEBUG,"Data result returned by module: %d",MOD_RESULT);
+ result = result2;
+ }
+ }
+ else
+ {
+ result = cu->ReadData(data, 65535);
+ }
log(DEBUG,"Read result: %d",result);
if (result)
{