changeset 1000:c2cb87b19307

irccd: handle error 433
author David Demelier <markand@malikania.fr>
date Fri, 12 Feb 2021 17:51:30 +0100
parents c50f954d8c67
children b01f5d65d62a
files lib/irccd/server.c
diffstat 1 files changed, 12 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- 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;