- Now server connections really work, and don't lose part of the burst
authorAndrew Miller <a1kmm@amxl.com>
Fri, 5 Jul 2002 03:38:30 +0000 (03:38 +0000)
committerAndrew Miller <a1kmm@amxl.com>
Fri, 5 Jul 2002 03:38:30 +0000 (03:38 +0000)
  on larger bursts.

git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@788 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
ircd/packet.c
ircd/s_bsd.c

index 4e1883669c2dbb6a3bb80c56604a57c8357b192f..50bdb4764c69a1b6040e7411a0d300172b488a02 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2002-07-05 Andrew Miller <a1kmm@mware.virtualave.net>
+       * ircd/packet.c(connect_dopacket): Pass the job on to server_dopacket
+       when they become a server.
+       * ircd/s_bsd.c(read_packet): Check they are now a server *after* the
+       packet is sent.
+       * ircd/class.c(make_class): Fixed an assert to be more useful.
+       
 2002-07-05 Andrew Miller <a1kmm@mware.virtualave.net>
        * ircd/packet.c
        * ircd/packet.h: (connect_dopacket): Made a dopacket function for
index bfeebfa284dc5417f3a5f5dbab428b47eea611b4..4743f47ac83888f9bde672d5ca3d3143321fd6b7 100644 (file)
@@ -150,6 +150,11 @@ int connect_dopacket(struct Client *cptr, const char *buffer, int length)
       /* Socket is dead so exit */
       if (IsDead(cptr))
         return exit_client(cptr, cptr, &me, cli_info(cptr));
+      else if (IsServer(cptr))
+      {
+        cli_count(cptr) = 0;
+        return server_dopacket(cptr, src, length);
+      }
       endp = client_buffer;
     }
     else if (endp < client_buffer + BUFSIZE)
index d44695718b43f3a0f27edea78436c93439fcf62e..0b5324bb842607c246eadf0dc2389d35584d3d62 100644 (file)
@@ -727,10 +727,8 @@ static int read_packet(struct Client *cptr, int socket_ready)
   if (length <= 0)
     ;
   else if (IsServer(cptr))
-  {
     return server_dopacket(cptr, readbuf, length);
-  }
-  else if (IsHandshake(cptr) || IsConnecting(cptr))
+  else if (IsConnecting(cptr)  || IsHandshake(cptr))
     return connect_dopacket(cptr, readbuf, length);
   else
   {
@@ -747,24 +745,6 @@ static int read_packet(struct Client *cptr, int socket_ready)
     while (DBufLength(&(cli_recvQ(cptr))) && !NoNewLine(cptr) && 
            (IsTrusted(cptr) || cli_since(cptr) - CurrentTime < 10))
     {
-      /*
-       * If it has become registered as a Server
-       * then skip the per-message parsing below.
-       */
-      if (IsHandshake(cptr) || IsServer(cptr))
-      {
-        int ret;
-        while (-1)
-        {
-          dolen = dbuf_get(&(cli_recvQ(cptr)), readbuf, sizeof(readbuf));
-          if (dolen <= 0)
-            return 1;
-          ret = IsServer(cptr) ? server_dopacket(cptr, readbuf, dolen) :
-                                 connect_dopacket(cptr, readbuf, dolen);
-          if (ret != 1)
-            return ret;
-        }
-      }
       dolen = dbuf_getmsg(&(cli_recvQ(cptr)), cli_buffer(cptr), BUFSIZE);
       /*
        * Devious looking...whats it do ? well..if a client
@@ -783,6 +763,31 @@ static int read_packet(struct Client *cptr, int socket_ready)
       }
       else if (client_dopacket(cptr, dolen) == CPTR_KILLED)
         return CPTR_KILLED;
+      /*
+       * If it has become registered as a Server
+       * then skip the per-message parsing below.
+       */
+      if (IsHandshake(cptr) || IsServer(cptr))
+      {
+        while (DBufLength(&(cli_recvQ(cptr))) && !NoNewLine(cptr))
+        {
+          dolen = dbuf_get(&(cli_recvQ(cptr)), readbuf, sizeof(readbuf));
+          if (dolen < 0)
+            return 1;
+          else if (dolen == 0)
+          {
+            if (DBufLength(&(cli_recvQ(cptr))) < 510)
+              cli_flags(cptr) |= FLAGS_NONL;
+            else
+              DBufClear(&(cli_recvQ(cptr)));
+          }
+          else if ((IsServer(cptr) &&
+                    server_dopacket(cptr, readbuf, dolen) == CPTR_KILLED) ||
+                   (!IsServer(cptr) &&
+                    connect_dopacket(cptr, readbuf, dolen) == CPTR_KILLED))
+            return CPTR_KILLED;
+        }
+      }
     }
 
     /* If there's still data to process, wait 2 seconds first */