diff options
author | June McEnroe <june@causal.agency> | 2020-01-10 23:22:27 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-01-10 23:27:39 -0500 |
commit | d39908ab72efde02fabd17c222cd0105ebda9a22 (patch) | |
tree | 218ee887d26ddf94da586e02b79dba0c5de6c12b /client.c | |
parent | Rename -A and -Q to -y and -q (diff) | |
download | pounce-d39908ab72efde02fabd17c222cd0105ebda9a22.tar.gz pounce-d39908ab72efde02fabd17c222cd0105ebda9a22.zip |
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.
Diffstat (limited to '')
-rw-r--r-- | client.c | 9 |
1 files changed, 4 insertions, 5 deletions
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; |