summary refs log tree commit diff
path: root/state.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-11-10 18:14:46 -0500
committerJune McEnroe <june@causal.agency>2019-11-10 18:14:46 -0500
commit45fc4fdd0805f4108c83726f8998293d24d48c41 (patch)
tree0996b7a4bedc57ca2e285a4514b87b6919d8fd70 /state.c
parentFilter ACCOUNT, AWAY, CHGHOST for incapable clients (diff)
downloadpounce-45fc4fdd0805f4108c83726f8998293d24d48c41.tar.gz
pounce-45fc4fdd0805f4108c83726f8998293d24d48c41.zip
Request all supported caps from server
Diffstat (limited to 'state.c')
-rw-r--r--state.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/state.c b/state.c
index e17d9e6..b786adb 100644
--- a/state.c
+++ b/state.c
@@ -43,6 +43,7 @@ void stateLogin(
 	const char *pass, bool sasl, const char *plain,
 	const char *nick, const char *user, const char *real
 ) {
+	serverFormat("CAP LS\r\n");
 	if (pass) serverFormat("PASS :%s\r\n", pass);
 	if (sasl) {
 		serverFormat("CAP REQ :%s\r\n", capList(CapSASL));
@@ -59,19 +60,25 @@ void stateLogin(
 	}
 	serverFormat("NICK %s\r\n", nick);
 	serverFormat("USER %s 0 * :%s\r\n", user, real);
-	serverFormat("CAP LS\r\n");
 }
 
 static void handleCap(struct Message *msg) {
 	require(msg, false, 3);
 	enum Cap caps = capParse(msg->params[2]);
-	if (!strcmp(msg->params[1], "ACK")) {
+
+	if (!strcmp(msg->params[1], "LS")) {
+		caps &= ~(CapSASL | CapServerTime | CapUnsupported);
+		serverFormat("CAP REQ :%s\r\n", capList(caps));
+
+	} else if (!strcmp(msg->params[1], "ACK")) {
 		stateCaps |= caps;
 		if (caps & CapSASL) {
 			serverFormat(
 				"AUTHENTICATE %s\r\n", (plainBase64 ? "PLAIN" : "EXTERNAL")
 			);
 		}
+		if (!(stateCaps & CapSASL)) serverFormat("CAP END\r\n");
+
 	} else if (!strcmp(msg->params[1], "NAK")) {
 		errx(EX_CONFIG, "server does not support %s", msg->params[2]);
 	}
amp;id=8e6629ca5bde365470b194c738b09f40867745f2&follow=1'>Move in insert direction on ~June McEnroe 2017-08-02Preserve color on replaceJune McEnroe 2017-08-02Split tile access and modifyJune McEnroe 2017-08-01Madvise RANDOM and NOSYNCJune McEnroe 2017-07-31Fix removing clients from clientCastJune McEnroe 2017-07-31Build with debug infoJune McEnroe 2017-07-31Don't dump tiles in coreJune McEnroe 2017-07-31Use designated initializers for messagesJune McEnroe I did not realize this syntax was so powerful. 2017-07-31Show other clients' cursorsJune McEnroe Also unfuck removing on send failure. 2017-07-31Perform enter as two moves rather than a loopJune McEnroe 2017-07-31Track tile access countsJune McEnroe 2017-07-31Adjust move speed in clientJune McEnroe 2017-07-31Handle large movesJune McEnroe 2017-07-30Optimize builds for chrootJune McEnroe 2017-07-30Persist bright across color changesJune McEnroe 2017-07-30Add index.htmlJune McEnroe 2017-07-30Add snapshot.shJune McEnroe 2017-07-30Fix termcap patch for background colorsJune McEnroe 2017-07-30Update helpJune McEnroe 2017-07-30Fix help to track colorJune McEnroe 2017-07-30Support background colorsJune McEnroe 2017-07-30Track color only client-sideJune McEnroe 2017-07-30Add ostensible support for background colorsJune McEnroe 2017-07-30Add tile create and access timestampsJune McEnroe 2017-07-30Assert stable struct Tile field offsetsJune McEnroe 2017-07-30Add chroot.shJune McEnroe 2017-07-30Add ` commandJune McEnroe 2017-07-30Add sshd_configJune McEnroe 2017-07-30Add termcap patchJune McEnroe