From 376cde311dc723e8496c8c8ab1048dbd2181170c Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Thu, 14 Nov 2019 19:25:25 -0500 Subject: Add concept of passive clients --- client.c | 12 +++++++++--- pounce.1 | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/client.c b/client.c index 3dce5e9..2dcccaa 100644 --- a/client.c +++ b/client.c @@ -30,7 +30,7 @@ #include "bounce.h" -static size_t count; +static size_t active; enum Need { BIT(NeedNick), @@ -43,6 +43,7 @@ struct Client { struct tls *tls; enum Need need; size_t consumer; + bool passive; enum Cap caps; char buf[1024]; size_t len; @@ -59,7 +60,9 @@ struct Client *clientAlloc(struct tls *tls) { void clientFree(struct Client *client) { if (!client->need) { - if (!--count) serverFormat("AWAY :%s\r\n", clientAway); + if (!client->passive && !--active) { + serverFormat("AWAY :%s\r\n", clientAway); + } } tls_close(client->tls); tls_free(client->tls); @@ -109,7 +112,9 @@ static void maybeSync(struct Client *client) { if (client->need == NeedPass) passRequired(client); if (!client->need) { stateSync(client); - if (!count++) serverFormat("AWAY\r\n"); + if (!client->passive && !active++) { + serverFormat("AWAY\r\n"); + } } } @@ -131,6 +136,7 @@ static void handleUser(struct Client *client, struct Message *msg) { } else { client->need &= ~NeedUser; client->consumer = ringConsumer(msg->params[0]); + client->passive = (msg->params[0][0] == '-'); maybeSync(client); } } diff --git a/pounce.1 b/pounce.1 index 6b7c5d9..9a004c4 100644 --- a/pounce.1 +++ b/pounce.1 @@ -275,6 +275,10 @@ New clients with the same username are assumed to be reconnections and will cause previous connections to stop receiving messages. +Clients with usernames beginning with hyphen +.Ql - +are considered passive +and do not affect away status. The nickname and real name sent by clients are ignored. . -- cgit 1.4.1