diff options
| author | Nakidai <nakidai@disroot.org> | 2026-02-01 19:01:04 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2026-02-01 19:05:43 +0300 |
| commit | ac52bbe3427cda3bd2098ee35e06163885b21836 (patch) | |
| tree | 51387c4d5f8ebd56c19a345b2e34361c979579c8 /loop.c | |
| parent | 32e81cb7a0d4f4b1b24674439e5a948b39725f2e (diff) | |
| download | libreircd-ac52bbe3427cda3bd2098ee35e06163885b21836.tar.gz libreircd-ac52bbe3427cda3bd2098ee35e06163885b21836.zip | |
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().
Diffstat (limited to 'loop.c')
| -rw-r--r-- | loop.c | 30 |
1 files changed, 21 insertions, 9 deletions
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 <string.h> - #include <err.h> #include <poll.h> #include <signal.h> +#include <stdio.h> +#include <string.h> #include <time.h> #include <unistd.h> @@ -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; |