diff options
author | June McEnroe <june@causal.agency> | 2019-11-14 19:25:25 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2019-11-14 19:25:25 -0500 |
commit | 376cde311dc723e8496c8c8ab1048dbd2181170c (patch) | |
tree | 026899720670b193b56df3397f2fd219017ee450 | |
parent | Save and load full struct timeval (diff) | |
download | pounce-376cde311dc723e8496c8c8ab1048dbd2181170c.tar.gz pounce-376cde311dc723e8496c8c8ab1048dbd2181170c.zip |
Add concept of passive clients
-rw-r--r-- | client.c | 12 | ||||
-rw-r--r-- | 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. . |