From: Andrew Miller Date: Fri, 5 Jul 2002 03:38:30 +0000 (+0000) Subject: - Now server connections really work, and don't lose part of the burst X-Git-Url: http://git.pk910.de/?a=commitdiff_plain;h=04a05217a0f7588b065a1e8c5175697f5df79e50;p=ircu2.10.12-pk.git - Now server connections really work, and don't lose part of the burst on larger bursts. git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@788 c9e4aea6-c8fd-4c43-8297-357d70d61c8c --- diff --git a/ChangeLog b/ChangeLog index 4e18836..50bdb47 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2002-07-05 Andrew Miller + * 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 * ircd/packet.c * ircd/packet.h: (connect_dopacket): Made a dopacket function for diff --git a/ircd/packet.c b/ircd/packet.c index bfeebfa..4743f47 100644 --- a/ircd/packet.c +++ b/ircd/packet.c @@ -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) diff --git a/ircd/s_bsd.c b/ircd/s_bsd.c index d446957..0b5324b 100644 --- a/ircd/s_bsd.c +++ b/ircd/s_bsd.c @@ -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 */