+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
/* 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)
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
{
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
}
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 */