summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--client.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/client.c b/client.c
index 9bc8a4a..3e6c2f9 100644
--- a/client.c
+++ b/client.c
@@ -37,6 +37,7 @@ struct Client {
 	bool error;
 	struct tls *tls;
 	enum Need need;
+	bool serverTime;
 	char buf[4096];
 	size_t len;
 };
@@ -48,6 +49,7 @@ struct Client *clientAlloc(struct tls *tls) {
 	client->error = false;
 	client->tls = tls;
 	client->need = NeedNick | NeedUser | (clientPass ? NeedPass : 0);
+	client->serverTime = false;
 	client->len = 0;
 
 	return client;
@@ -125,7 +127,34 @@ static void handlePass(struct Client *client, struct Message msg) {
 }
 
 static void handleCap(struct Client *client, struct Message msg) {
-	// TODO...
+	if (!msg.params[0]) msg.params[0] = "";
+
+	if (!strcmp(msg.params[0], "END")) {
+		client->need &= ~NeedCapEnd;
+		if (!client->need) stateSync(client);
+
+	} else if (!strcmp(msg.params[0], "LS")) {
+		client->need |= NeedCapEnd;
+		clientFormat(client, ":invalid CAP * LS :server-time\r\n");
+
+	} else if (!strcmp(msg.params[0], "REQ") && msg.params[1]) {
+		client->need |= NeedCapEnd;
+		if (!strcmp(msg.params[1], "server-time")) {
+			client->serverTime = true;
+			clientFormat(client, ":invalid CAP * ACK :server-time\r\n");
+		} else {
+			clientFormat(client, ":invalid CAP * NAK :%s\r\n", msg.params[1]);
+		}
+
+	} else if (!strcmp(msg.params[0], "LIST")) {
+		clientFormat(
+			client, ":invalid CAP * LIST :%s\r\n",
+			(client->serverTime ? "server-time" : "")
+		);
+
+	} else {
+		clientFormat(client, ":invalid 410 * :Invalid CAP subcommand\r\n");
+	}
 }
 
 static const struct {
nohover-highlight'> 2020-03-09Remove 1sh sourcesJune McEnroe I'm going to recreate it from fresh sh sources for clean git history. 2020-03-08Add The Stone SkyJune McEnroe 2020-03-08Publish "How I Relay Chat"June McEnroe 2020-03-03Don't use $ inside $(())June McEnroe 2020-03-03Remove setoptJune McEnroe 2020-03-03Use getopts in shell scriptsJune McEnroe WTF why did no one tell me about this? 2020-02-27Style %T outside of Rs in italicJune McEnroe 2020-02-26Add Fierce Femmes and Notorious LiarsJune McEnroe 2020-02-23Add This Is How You Lose the Time WarJune McEnroe 2020-02-22Add See Ya LaterJune McEnroe 2020-02-20Remove wiki scriptJune McEnroe Wikipedia seems to have removed the one-sentence extracts from the opensearch results. Too bad. It's not a wiki script, what we need is a command that fetches single-sentence summaries of articles on Wikipedia. 2020-02-19Add The Obelisk GateJune McEnroe 2020-02-17Add Four Tet — HandsJune McEnroe One from the cafe that caught my attention. 2020-02-12Simplify macOS notify-sendJune McEnroe 2020-02-12Add imbox and notemap to pageJune McEnroe 2020-02-12Collapse simple linksJune McEnroe 2020-02-12Move catgirl up the pageJune McEnroe 2020-02-12Update catgirl pty grabJune McEnroe 2020-02-12Link to cgit /about pages where appropriateJune McEnroe 2020-02-11Separate LINKS from BINS for html to workJune McEnroe 2020-02-11Add margin to Bl-bullet itemsJune McEnroe 2020-02-10Match URLs inside parens or with paired parens insideJune McEnroe 2020-02-10Duplicate effective URL before passing it back to curlJune McEnroe Apparently sometimes it didn't like receiving its own internal storage to parse again. Understandable. 2020-02-09Add To Be Taught, If FortunateJune McEnroe 2020-02-04Add The Future of Another TimelineJune McEnroe Wow. One of the best I've read. 2020-01-31Reorganize the Makefile for the umpteenth timeJune McEnroe Broke out LDLIBS for each bin, and made everything more uniform. 2020-01-28Change scout sensitivity to 1.4June McEnroe idk it seems to work. 2020-01-28Import shows.txtJune McEnroe