# HG changeset patch # User David Demelier # Date 1613148690 -3600 # Node ID c2cb87b19307554c06bf314a5bae50d3c08ef911 # Parent c50f954d8c673fa9c95fa2bae669003f0d1b7e50 irccd: handle error 433 diff -r c50f954d8c67 -r c2cb87b19307 lib/irccd/server.c --- a/lib/irccd/server.c Fri Feb 12 19:31:00 2021 +0100 +++ b/lib/irccd/server.c Fri Feb 12 17:51:30 2021 +0100 @@ -42,25 +42,6 @@ #define DELAY 30 /* Seconds to wait before reconnecting. */ #define TIMEOUT 1800 /* Seconds before marking a server as dead. */ -static inline const char * -statename(enum irc_server_state st) -{ - switch (st) { - case IRC_SERVER_STATE_NONE: - return "none"; - case IRC_SERVER_STATE_DISCONNECTED: - return "disconnected"; - case IRC_SERVER_STATE_CONNECTING: - return "connecting"; - case IRC_SERVER_STATE_CONNECTED: - return "connected"; - case IRC_SERVER_STATE_WAITING: - return "waiting"; - default: - return "unknown"; - } -} - static inline void clear_channels(struct irc_server *s, int free) { @@ -200,13 +181,9 @@ clear_server(s); if (s->flags & IRC_SERVER_FLAGS_AUTO_RECO) { - irc_log_debug("server %s: state %s -> %s", s->name, - statename(s->state), statename(IRC_SERVER_STATE_WAITING)); irc_log_info("server %s: waiting %u seconds before reconnecting", s->name, DELAY); s->state = IRC_SERVER_STATE_WAITING; } else { - irc_log_debug("server %s: state %s -> %s", s->name, - statename(s->state), statename(IRC_SERVER_STATE_DISCONNECTED)); s->state = IRC_SERVER_STATE_DISCONNECTED; } @@ -225,8 +202,6 @@ LIST_FOREACH(ch, &s->channels, link) irc_server_join(s, ch->name, ch->password); - irc_log_debug("server %s: state %s -> %s", s->name, - statename(s->state), statename(IRC_SERVER_STATE_CONNECTED)); s->state = IRC_SERVER_STATE_CONNECTED; ev->type = IRC_EVENT_CONNECT; @@ -508,6 +483,16 @@ } static void +handle_nicknameinuse(struct irc_server *s, struct irc_event *ev, struct irc_conn_msg *msg) +{ + (void)msg; + (void)ev; + + irc_log_warn("server %s: nickname %s is already in use", s->name, s->ident.nickname); + fail(s); +} + +static void handle_error(struct irc_server *s, struct irc_event *ev, struct irc_conn_msg *msg) { ev->type = IRC_EVENT_DISCONNECT; @@ -581,6 +566,7 @@ { "319", handle_whoischannels }, { "353", handle_names }, { "366", handle_endofnames }, + { "433", handle_nicknameinuse }, { "ERROR", handle_error }, { "INVITE", handle_invite }, { "JOIN", handle_join }, @@ -627,9 +613,6 @@ static void auth(struct irc_server *s) { - irc_log_debug("server %s: state %s -> %s", s->name, - statename(s->state), statename(IRC_SERVER_STATE_CONNECTED)); - s->state = IRC_SERVER_STATE_CONNECTED; if (s->ident.password[0]) @@ -686,11 +669,8 @@ if (irc_conn_connect(&s->conn) < 0) fail(s); - else { - irc_log_debug("server %s: state %s -> %s", s->name, - statename(s->state), statename(IRC_SERVER_STATE_CONNECTING)); + else s->state = IRC_SERVER_STATE_CONNECTING; - } /* * Assume the last time we received a message was now, so that @@ -705,8 +685,6 @@ { assert(s); - irc_log_debug("server %s: state %s -> %s", s->name, - statename(s->state), statename(IRC_SERVER_STATE_DISCONNECTED)); s->state = IRC_SERVER_STATE_DISCONNECTED; clear_channels(s, 0); @@ -770,8 +748,6 @@ * something else. */ if (s->state == IRC_SERVER_STATE_DISCONNECTED) { - irc_log_debug("server %s: state %s -> %s", s->name, - statename(s->state), statename(IRC_SERVER_STATE_NONE)); handle_disconnect(s, ev); s->state = IRC_SERVER_STATE_NONE; return 1;