]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/userprocess.cpp
Tweaks to closed socket detection
[user/henk/code/inspircd.git] / src / userprocess.cpp
index 2599361532975d6de0d17cc0a206e3b0d0a22b2a..d40ba494bcf43eb2be66e9c66a5687e972b83994 100644 (file)
@@ -70,6 +70,7 @@ extern std::vector<InspSocket*> module_sockets;
 extern time_t TIME;
 extern time_t OLDTIME;
 extern std::vector<userrec*> local_users;
+char LOG_FILE[MAXBUF];
 
 extern InspIRCd* ServerInstance;
 extern ServerConfig *Config;
@@ -88,8 +89,16 @@ void ProcessUser(userrec* cu)
        if (Config->GetIOHook(cu->port))
        {
                int result2 = 0;
-               int MOD_RESULT = Config->GetIOHook(cu->port)->OnRawSocketRead(cu->fd,data,65535,result2);
-                log(DEBUG,"Data result returned by module: %d",MOD_RESULT);
+               int MOD_RESULT = 0;
+               try
+               {
+                       MOD_RESULT = Config->GetIOHook(cu->port)->OnRawSocketRead(cu->fd,data,65535,result2);
+                       log(DEBUG,"Data result returned by module: %d",MOD_RESULT);
+               }
+                catch (ModuleException& modexcept)
+                {
+                        log(DEBUG,"Module exception cought: %s",modexcept.GetReason()); \
+                }
                if (MOD_RESULT < 0)
                {
                        result = -EAGAIN;
@@ -259,16 +268,10 @@ void ProcessUser(userrec* cu)
         }
 }
 
-/**
- * This function is called once a second from the mainloop.
- * It is intended to do background checking on all the user structs, e.g.
- * stuff like ping checks, registration timeouts, etc. This function is
- * also responsible for checking if InspSocket derived classes are timed out.
- */
-void DoBackgroundUserStuff(time_t TIME)
+void DoSocketTimeouts(time_t TIME)
 {
         unsigned int numsockets = module_sockets.size();
-       SocketEngine* SE = ServerInstance->SE;
+        SocketEngine* SE = ServerInstance->SE;
         for (std::vector<InspSocket*>::iterator a = module_sockets.begin(); a < module_sockets.end(); a++)
         {
                 InspSocket* s = (InspSocket*)*a;
@@ -283,6 +286,16 @@ void DoBackgroundUserStuff(time_t TIME)
                 }
                 if (module_sockets.size() != numsockets) break;
         }
+}
+
+/**
+ * This function is called once a second from the mainloop.
+ * It is intended to do background checking on all the user structs, e.g.
+ * stuff like ping checks, registration timeouts, etc. This function is
+ * also responsible for checking if InspSocket derived classes are timed out.
+ */
+void DoBackgroundUserStuff(time_t TIME)
+{
         CullList* GlobalGoners = new CullList();
         for (std::vector<userrec*>::iterator count2 = local_users.begin(); count2 != local_users.end(); count2++)
         {
@@ -352,9 +365,22 @@ void DoBackgroundUserStuff(time_t TIME)
 
 void OpenLog(char** argv, int argc)
 {
-       if (Config->logpath == "")
+       if (!*LOG_FILE)
+       {
+               if (Config->logpath == "")
+               {
+                       Config->logpath = GetFullProgDir(argv,argc) + "/ircd.log";
+               }
+       }
+       else
        {
-               Config->logpath = GetFullProgDir(argv,argc) + "/ircd.log";
+               Config->log_file = fopen(LOG_FILE,"a+");
+               if (!Config->log_file)
+               {
+                       printf("ERROR: Could not write to logfile %s, bailing!\n\n",Config->logpath.c_str());
+                       Exit(ERROR);
+               }
+               return;
        }
         Config->log_file = fopen(Config->logpath.c_str(),"a+");
         if (!Config->log_file)