From ac52bbe3427cda3bd2098ee35e06163885b21836 Mon Sep 17 00:00:00 2001 From: Nakidai Date: Sun, 1 Feb 2026 19:01:04 +0300 Subject: Refactor QUIT message sending After seeing same announcing code second time I decided it should be done before an actual quit in loop.c. Plus, channel exiting is now done in user_remove(). --- loop.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'loop.c') diff --git a/loop.c b/loop.c index 46c585c..c568c6f 100644 --- a/loop.c +++ b/loop.c @@ -16,11 +16,11 @@ #include "ircd.h" -#include - #include #include #include +#include +#include #include #include @@ -131,19 +131,31 @@ loop: } if (peers[i].ping && now - peers[i].ping > PEER_PONGTIMEOUT) { - announce( - &peers[i], - ":%s!%s@%s QUIT :Ping Timeout (%llu seconds)", - getnick(&peers[i]), - peers[i].user, - peers[i].host, + snprintf( + peers[i].quit, + sizeof(PEER_QUIT_MAX), + "Ping Timeout (%llu seconds)", now - peers[i].ping ); peers[i].flags |= DELETE; } if (peers[i].flags & DELETE) { - writef(peers[i].fd, "ERROR :Closing Link: %s", peers[i].host); + if (peers[i].type) + announce( + &peers[i], + ":%s!%s@%s QUIT :%s", + getnick(&peers[i]), + peers[i].user, + peers[i].host, + peers[i].quit + ); + writef( + peers[i].fd, + "ERROR :Closing Link: %s (%s)", + peers[i].host, + peers[i].quit + ); close(peers[i].fd); user_remove(i); --i; -- cgit 1.4.1