]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Now clears the autoconns map on rehash
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 57774137772cb717094acbfe97422bb3350a1ed3..c9b2719424488569143c9fcc06173b3032ea863c 100644 (file)
@@ -401,6 +401,7 @@ void ReadConfig(bool bail, userrec* user)
        log(DEFAULT,"Applying K lines, Q lines and Z lines...");
        apply_lines();
 
+       autoconns.clear();
         for (int i = 0; i < ConfValueEnum("link",&config_f); i++)
         {
                char Link_ServerName[MAXBUF],Link_AConn[MAXBUF];
@@ -2517,6 +2518,26 @@ bool LoadModule(const char* filename)
        return true;
 }
 
+
+bool GotServer(std::string name)
+{
+        for (int j = 0; j < 32; j++)
+        {
+                if (me[j] != NULL)
+                {
+                        for (int k = 0; k < me[j]->connectors.size(); k++)
+                        {
+                               if (name == me[j]->connectors[k].GetServerName())
+                               {
+                                       return true;
+                               }
+                        }
+                }
+        }
+       return false;
+}
+
+
 int InspIRCd(char** argv, int argc)
 {
        struct sockaddr_in client,server;
@@ -2821,6 +2842,25 @@ int InspIRCd(char** argv, int argc)
                // them in a list, then reap the list every second or so.
                if (((TIME % 5) == 0) && (!expire_run))
                {
+                       for (int i = 0; i < ConfValueEnum("link",&config_f); i++)
+                       {
+                               char Link_ServerName[MAXBUF],Link_AConn[MAXBUF];
+                               ConfValue("link","name",i,Link_ServerName,&config_f);
+                               ConfValue("link","autoconnect",i,Link_AConn,&config_f);
+                               if ((Link_AConn[0]) && (!GotServer(Link_ServerName)))
+                               {
+                                       autoconnects::iterator a = autoconns.find(std::string(Link_ServerName));
+                                       if (a != autoconns.end())
+                                       {
+                                               if (TIME > a->second)
+                                               {
+                                                       ConnectServer(Link_ServerName,NULL);
+                                                       a->second = TIME + atoi(Link_AConn);
+                                               }
+                                       }
+                               }
+                       }
+
                        expire_lines();
                        FOREACH_MOD OnBackgroundTimer(TIME);
                        expire_run = true;