]> 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 4207e4f23d58a33b8b094fea9f60818ff52e6367..267832127b3b2c41a3d0239ddcdcaa439f74e3b8 100644 (file)
@@ -6743,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;
        }
@@ -6795,7 +6797,9 @@ void handle_link_packet(char* udp_msg, char* udp_host, serverrec *serv)
                                                {
                                                        strcpy(servers[j]->description,serverdesc);
                                                        DoSync(serv,udp_host);
-                                                       Serv->SendPacket("X 0",udp_host);
+                                                       char buffer[MAXBUF];
+                                                       sprintf(buffer,"X 0");
+                                                       serv->SendPacket(buffer,udp_host);
                                                        return;
                                                }
                                        }
@@ -6807,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;
        }
@@ -7082,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())