# HG changeset patch # User David Demelier # Date 1617909361 -7200 # Node ID b460e70a324d99dd0e8b215a78a171e4bc6d2093 # Parent a0353c77f24ffe259b498566682d14fd39c6770a irccdctl: implement server-connect diff -r a0353c77f24f -r b460e70a324d irccd/peer.c --- 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 }, diff -r a0353c77f24f -r b460e70a324d irccdctl/main.c --- 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 }, diff -r a0353c77f24f -r b460e70a324d man/irccdctl.1 --- 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