summary refs log tree commit diff
path: root/client.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-10-24 17:29:49 -0400
committerJune McEnroe <june@causal.agency>2019-10-24 17:29:49 -0400
commit300891077709bba9899f3fdbe5dc4e10308eedd4 (patch)
treefa64e532b0d2740d361f3a0d899801ba5c0da3f9 /client.c
parentOnly set NeedCapEnd if unregistered (diff)
downloadpounce-300891077709bba9899f3fdbe5dc4e10308eedd4.tar.gz
pounce-300891077709bba9899f3fdbe5dc4e10308eedd4.zip
Intercept client QUIT
Diffstat (limited to 'client.c')
-rw-r--r--client.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/client.c b/client.c
index 6bbfdb5..bb1704f 100644
--- a/client.c
+++ b/client.c
@@ -162,6 +162,13 @@ static void handleCap(struct Client *client, struct Message msg) {
 	}
 }
 
+static void handleQuit(struct Client *client, struct Message msg) {
+	(void)msg;
+	clientFormat(client, "ERROR :Detaching\r\n");
+	client->error = true;
+	// TODO: Set AWAY if no more clients attached.
+}
+
 static const struct {
 	const char *cmd;
 	Handler *fn;
@@ -169,6 +176,7 @@ static const struct {
 	{ "CAP", handleCap },
 	{ "NICK", handleNick },
 	{ "PASS", handlePass },
+	{ "QUIT", handleQuit },
 	{ "USER", handleUser },
 };
 
@@ -189,6 +197,7 @@ static void clientParse(struct Client *client, char *line) {
 
 static bool intercept(const char *line, size_t len) {
 	if (len >= 4 && !memcmp(line, "CAP ", 4)) return true;
+	if (len >= 5 && !memcmp(line, "QUIT ", 5)) return true;
 	// TODO: Intercept PRIVMSG to send to other clients.
 	return false;
 }