]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Crash fixes when linking
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 7b4becedf1691db43f8d8e1feaf637d19346461f..267832127b3b2c41a3d0239ddcdcaa439f74e3b8 100644 (file)
@@ -6676,9 +6676,12 @@ void process_restricted_commands(char token,char* params,serverrec* source,serve
                case 'F':
                        WriteOpers("Server %s has completed netburst. (%d secs)",udp_host,time(NULL)-nb_start);
                        handle_F(token,params,source,reply,udp_host);
+               break;
+               case 'X':
                        WriteOpers("Sending my netburst to %s",udp_host);
                        DoSync(source,udp_host);
                        WriteOpers("Send of netburst to %s completed",udp_host);
+               
                break;
                // anything else
                default:
@@ -6740,7 +6743,9 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                                return;
                        }
                }
-               serv->SendPacket("E :Access is denied (no matching link block)",udp_host);
+               char buffer[MAXBUF];
+               sprintf(buffer,"E :Access is denied (no matching link block)");
+               serv->SendPacket(buffer,udp_host);
                WriteOpers("CONNECT from %s denied, no matching link block",servername);
                return;
        }
@@ -6791,8 +6796,10 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                                                if (!strcasecmp(servers[j]->name,udp_host))
                                                {
                                                        strcpy(servers[j]->description,serverdesc);
-                                                       WriteOpers("Server %s authenticated, exchanging server keys...",servername);
                                                        DoSync(serv,udp_host);
+                                                       char buffer[MAXBUF];
+                                                       sprintf(buffer,"X 0");
+                                                       serv->SendPacket(buffer,udp_host);
                                                        return;
                                                }
                                        }
@@ -6804,7 +6811,9 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                                log(DEBUG,"Server names '%s' and '%s' don't match",Link_ServerName,servername);
                        }
                }
-               serv->SendPacket("E :Access is denied (no matching link block)",udp_host);
+               char buffer[MAXBUF];
+               sprintf(buffer,"E :Access is denied (no matching link block)");
+               serv->SendPacket(buffer,udp_host);
                WriteOpers("CONNECT from %s denied, no matching link block",servername);
                return;
        }
@@ -7079,20 +7088,25 @@ int InspIRCd(void)
      
                for (int x = 0; x != UDPportCount; x++)
                {
-                       long theirkey = 0;
-                       if (me[x]->RecvPacket(udp_msg, udp_host))
-                       {
-                               if (strlen(udp_msg)<1) {
-                               log(DEBUG,"Invalid string from %s [route%d]",udp_host,x);
-                       }
-                       else
+                       std::deque<std::string> msgs;
+                       msgs.clear();
+                       if (me[x]->RecvPacket(msgs, udp_host))
                        {
-                               FOREACH_MOD OnPacketReceive(udp_msg);
-                               handle_link_packet(udp_msg, udp_host, me[x]);
+                               for (int ctr = 0; ctr < msgs.size(); ctr++)
+                               {
+                                       char udp_msg[MAXBUF];
+                                       strncpy(udp_msg,msgs[ctr].c_str(),MAXBUF);
+                                       if (strlen(udp_msg)<1)
+                                       {
+                                               log(DEBUG,"Invalid string from %s [route%d]",udp_host,x);
+                                               break;
+                                       }
+                                       FOREACH_MOD OnPacketReceive(udp_msg);
+                                       handle_link_packet(udp_msg, udp_host, me[x]);
+                               }
                                goto label;
                        }
                }
-       }
        
 
        while (count2 != clientlist.end())