From 3beb01f99ac5ea9a22c55edbf0e7b095e1cb5b0d Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sat, 26 Oct 2019 02:25:04 -0400 Subject: Set AWAY when no clients are connected --- bounce.c | 8 ++++++-- pounce.1 | 6 ++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bounce.c b/bounce.c index 712b9c3..648a17b 100644 --- a/bounce.c +++ b/bounce.c @@ -91,10 +91,12 @@ int main(int argc, char *argv[]) { const char *user = NULL; const char *real = NULL; const char *join = NULL; + const char *away = "pounced :3"; int opt; - while (0 < (opt = getopt(argc, argv, "C:H:K:NTP:W:a:h:j:n:p:r:u:vw:"))) { + while (0 < (opt = getopt(argc, argv, "A:C:H:K:NTP:W:a:h:j:n:p:r:u:vw:"))) { switch (opt) { + break; case 'A': away = optarg; break; case 'C': strlcpy(certPath, optarg, sizeof(certPath)); break; case 'H': localHost = optarg; break; case 'K': strlcpy(privPath, optarg, sizeof(privPath)); @@ -147,6 +149,7 @@ int main(int argc, char *argv[]) { } eventAdd(server, NULL); + size_t clients = 0; while (0 < poll(event.fds, event.len, -1)) { for (size_t i = 0; i < event.len; ++i) { short revents = event.fds[i].revents; @@ -156,6 +159,7 @@ int main(int argc, char *argv[]) { int fd; struct tls *tls = listenAccept(&fd, event.fds[i].fd); eventAdd(fd, clientAlloc(tls)); + if (!clients++) serverFormat("AWAY\r\n"); continue; } @@ -172,10 +176,10 @@ int main(int argc, char *argv[]) { if (revents & POLLIN) clientRecv(client); if (revents & POLLOUT) clientConsume(client); if (clientError(client) || revents & (POLLHUP | POLLERR)) { - // TODO: Set AWAY if no more clients remain. clientFree(client); close(event.fds[i].fd); eventRemove(i); + if (!--clients) serverFormat("AWAY :%s\r\n", away); break; } } diff --git a/pounce.1 b/pounce.1 index 8c76f02..95e554b 100644 --- a/pounce.1 +++ b/pounce.1 @@ -9,6 +9,7 @@ .Sh SYNOPSIS .Nm .Op Fl NTv +.Op Fl A Ar away .Op Fl C Ar cert .Op Fl H Ar host .Op Fl K Ar priv @@ -39,6 +40,11 @@ and uniquely identify themselves by username. The arguments are as follows: . .Bl -tag -width "-W @file" +.It Fl A Ar away +Set away status to +.Ar away +when no clients are connected. +. .It Fl C Ar cert Load TLS certificate from .Ar cert . -- cgit 1.4.1