From d30bd701e902137c58879ffdc8a8a48de68913dc Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Wed, 23 Oct 2019 19:58:42 -0400 Subject: Track nick changes --- state.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'state.c') diff --git a/state.c b/state.c index 48f7185..e86cf01 100644 --- a/state.c +++ b/state.c @@ -104,6 +104,20 @@ static void handleReplyISupport(struct Message msg) { } } +static bool self(struct Message msg) { + assert(nick); + size_t len = strlen(nick); + if (strncmp(msg.origin, nick, len)) return false; + if (strlen(msg.origin) < len || msg.origin[len] != '!') return false; + return true; +} + +static void handleNick(struct Message msg) { + if (!msg.origin) errx(EX_PROTOCOL, "NICK without origin"); + if (!msg.params[0]) errx(EX_PROTOCOL, "NICK without new nick"); + if (self(msg)) set(&nick, msg.params[0]); +} + static void handleError(struct Message msg) { errx(EX_UNAVAILABLE, "%s", msg.params[0]); } @@ -119,6 +133,7 @@ static const struct { { "005", handleReplyISupport }, { "CAP", handleCap }, { "ERROR", handleError }, + { "NICK", handleNick }, }; void stateParse(char *line) { -- cgit 1.4.1