changeset 1035:b460e70a324d

irccdctl: implement server-connect
author David Demelier <markand@malikania.fr>
date Thu, 08 Apr 2021 21:16:01 +0200
parents a0353c77f24f
children bafb5943cd35
files irccd/peer.c irccdctl/main.c man/irccdctl.1
diffstat 3 files changed, 78 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/irccd/peer.c	Thu Apr 08 21:15:02 2021 +0200
+++ b/irccd/peer.c	Thu Apr 08 21:16:01 2021 +0200
@@ -625,6 +625,36 @@
 }
 
 /*
+ * SERVER-CONNECT server host [+]port nickname username realname
+ */
+static int
+cmd_server_connect(struct peer *p, char *line)
+{
+	const char *args[6] = {0};
+	int ssl;
+	struct irc_server *s;
+
+	if (parse(line, args, 6) != 6)
+		return EINVAL;
+	if (irc_bot_server_get(args[0]))
+		return EEXIST;
+
+	/* If port starts with +, it means SSL support. */
+	if ((ssl = args[2][0] == '+'))
+		++args[2];
+
+	s = irc_server_new(args[0], args[3], args[4], args[5], args[1], atoi(args[2]));
+	s->flags |= IRC_SERVER_FLAGS_AUTO_RECO;
+
+	if (ssl)
+		s->flags |= IRC_SERVER_FLAGS_SSL;
+
+	irc_bot_server_add(s);
+
+	return ok(p);
+}
+
+/*
  * SERVER-DISCONNECT [server]
  */
 static int
@@ -919,6 +949,7 @@
 	{ "RULE-LIST",          cmd_rule_list           },
 	{ "RULE-MOVE",          cmd_rule_move           },
 	{ "RULE-REMOVE",        cmd_rule_remove         },
+	{ "SERVER-CONNECT",     cmd_server_connect      },
 	{ "SERVER-DISCONNECT",  cmd_server_disconnect   },
 	{ "SERVER-INFO",        cmd_server_info         },
 	{ "SERVER-INVITE",      cmd_server_invite       },
--- a/irccdctl/main.c	Thu Apr 08 21:15:02 2021 +0200
+++ b/irccdctl/main.c	Thu Apr 08 21:16:01 2021 +0200
@@ -647,6 +647,49 @@
 }
 
 static void
+cmd_server_connect(int argc, char **argv)
+{
+	ketopt_t ko = KETOPT_INIT;
+	int ssl = 0;
+	const char *nickname = "irccd",
+	           *username = "irccd",
+	           *realname = "IRC Client Daemon",
+	           *port = "6667";
+
+	for (int ch; (ch = ketopt(&ko, argc, argv, 0, "sn:r:u:p:", NULL)) != -1; ) {
+		switch (ch) {
+		case 's':
+			ssl = 1;
+			break;
+		case 'n':
+			nickname = ko.arg;
+			break;
+		case 'r':
+			realname = ko.arg;
+			break;
+		case 'u':
+			username = ko.arg;
+			break;
+		case 'p':
+			port = ko.arg;
+			break;
+		default:
+			break;
+		}
+	}
+
+	argc -= ko.ind;
+	argv += ko.ind;
+
+	if (argc < 2)
+		errx(1, "missing id and/or host");
+
+	req("SERVER-CONNECT %s %s %s%s %s %s %s", argv[0], argv[1], (ssl ? "+" : ""),
+	    port, nickname, username, realname);
+	ok();
+}
+
+static void
 cmd_server_disconnect(int argc, char **argv)
 {
 	if (argc == 1)
@@ -827,6 +870,7 @@
 	{ "rule-list",          0,      0,      cmd_rule_list           },
 	{ "rule-move",          2,      2,      cmd_rule_move           },
 	{ "rule-remove",        1,      1,      cmd_rule_remove         },
+	{ "server-connect",    -1,     -1,      cmd_server_connect      },
 	{ "server-disconnect",  0,      1,      cmd_server_disconnect   },
 	{ "server-info",        1,      1,      cmd_server_info         },
 	{ "server-join",        2,      3,      cmd_server_join         },
--- a/man/irccdctl.1	Thu Apr 08 21:15:02 2021 +0200
+++ b/man/irccdctl.1	Thu Apr 08 21:16:01 2021 +0200
@@ -104,7 +104,7 @@
 .\" server-connect
 .Nm
 .Cm server-connect
-.Op Fl 46s
+.Op Fl s
 .Op Fl n Ar nickname
 .Op Fl r Ar realname
 .Op Fl u Ar username
@@ -368,8 +368,8 @@
 .Pp
 Available options:
 .Bl -tag -width 12n
-.It Fl c Ar character
-Specify the command character prefix.
+.It Fl s
+Enable SSL.
 .It Fl n Ar nickname
 Specify a nickname.
 .It Fl r Ar realname