From d39908ab72efde02fabd17c222cd0105ebda9a22 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 10 Jan 2020 23:22:27 -0500 Subject: Add a vendor capability for passive clients This way things like litterbox can do it automatically without having to be configured with a hyphen-prefixed username, which is usually invalid anywhere else. --- client.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'client.c') diff --git a/client.c b/client.c index 0766ef1..a598ec0 100644 --- a/client.c +++ b/client.c @@ -46,7 +46,6 @@ struct Client { struct tls *tls; enum Need need; size_t consumer; - bool passive; enum Cap caps; char buf[1024]; size_t len; @@ -63,7 +62,7 @@ struct Client *clientAlloc(struct tls *tls) { void clientFree(struct Client *client) { if (!client->need) { - if (!client->passive && !--active) { + if (!(client->caps & CapPassive) && !--active) { serverFormat("AWAY :%s\r\n", clientAway); } } @@ -115,7 +114,7 @@ static void maybeSync(struct Client *client) { if (client->need == NeedPass) passRequired(client); if (!client->need) { stateSync(client); - if (!client->passive && !active++) { + if (!(client->caps & CapPassive) && !active++) { serverFormat("AWAY\r\n"); } } @@ -139,7 +138,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] == '-'); + if (msg->params[0][0] == '-') client->caps |= CapPassive; maybeSync(client); } } @@ -161,7 +160,7 @@ static void handlePass(struct Client *client, struct Message *msg) { static void handleCap(struct Client *client, struct Message *msg) { if (!msg->params[0]) msg->params[0] = ""; - enum Cap avail = CapServerTime | (stateCaps & ~CapSASL); + enum Cap avail = CapServerTime | CapPassive | (stateCaps & ~CapSASL); if (!strcmp(msg->params[0], "END")) { if (!client->need) return; -- cgit 1.4.1