summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-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;
 }