summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--handle.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/handle.c b/handle.c
index 3b52f0c..dd42452 100644
--- a/handle.c
+++ b/handle.c
@@ -105,6 +105,24 @@ static void handleError(char *prefix, char *params) {
}
}
+static void handleCap(char *prefix, char *params) {
+ char *subc, *list;
+ parse(prefix, NULL, NULL, NULL, params, 3, 0, NULL, &subc, &list);
+ if (!strcmp(subc, "ACK") && self.auth) {
+ size_t len = strlen(self.auth);
+ byte plain[1 + len];
+ plain[0] = 0;
+ for (size_t i = 0; i < len; ++i) {
+ plain[1 + i] = (self.auth[i] == ':' ? 0 : self.auth[i]);
+ }
+ char *b64 = base64(plain, sizeof(plain));
+ ircFmt("AUTHENTICATE PLAIN\r\n");
+ ircFmt("AUTHENTICATE %s\r\n", b64);
+ free(b64);
+ }
+ ircFmt("CAP END\r\n");
+}
+
static void handleErrorErroneousNickname(char *prefix, char *params) {
char *mesg;
parse(prefix, NULL, NULL, NULL, params, 3, 0, NULL, NULL, &mesg);
@@ -481,6 +499,7 @@ static const struct {
{ "401", handleErrorNoSuchNick },
{ "432", handleErrorErroneousNickname },
{ "433", handleErrorErroneousNickname },
+ { "CAP", handleCap },
{ "ERROR", handleError },
{ "JOIN", handleJoin },
{ "KICK", handleKick },