commit - ec34878030f89c79a18054c9f008a5f12cd53c2f
commit + 5b30aca674fcba8d97a4da8fabbc55413eb6220e
blob - 4a12ec5e428acf72ca569eae5b02f9c7dc53d634
blob + cb520b93e981d42e809768609ced4ec673ac9009
--- irc.c
+++ irc.c
char irc_nick[256];
char irc_channel[256];
int in_irc_channel;
+int in_cap;
/*
* irc_recv() receives read(2) chunks and assembles complete lines, which are
}
static void
+irc_complete_registration(int server_fd)
+{
+ if (icb_logged_in || *irc_nick == '\0' || *irc_ident == '\0')
+ return;
+ if (in_cap)
+ return;
+ icb_send_login(server_fd, irc_nick, irc_ident, irc_pass);
+}
+
+static void
irc_cmd(char *cmd, int client_fd, int server_fd)
{
char *argv[10], *p;
strlcpy(irc_pass, argv[1], sizeof(irc_pass));
} else if (!strcasecmp(argv[0], "USER")) {
strlcpy(irc_ident, argv[1], sizeof(irc_ident));
- if (!icb_logged_in && irc_nick[0] && irc_ident[0])
- icb_send_login(server_fd, irc_nick,
- irc_ident, irc_pass);
+ irc_complete_registration(server_fd);
} else if (!strcasecmp(argv[0], "NICK")) {
strlcpy(irc_nick, argv[1], sizeof(irc_nick));
if (icb_logged_in)
icbirc_quit();
} else if (!strcasecmp(argv[0], "CAP")) {
if (!strcasecmp(argv[1], "LS")) {
+ in_cap = 1;
printf("CAP * LS :\n");
fflush(stdout);
} else if (!strcasecmp(argv[1], "REQ")) {
+ in_cap = 1;
printf("CAP * NAK :%s\n", argv[2]);
fflush(stdout);
- } else if (!strcasecmp(argv[1], "END"))
- ;
- else
+ } else if (!strcasecmp(argv[1], "END")) {
+ in_cap = 0;
+ irc_complete_registration(server_fd);
+ } else
warnx("irc_cmd: unknown command 'CAP %s'", argv[1]);
} else
warnx("irc_cmd: unknown command '%s'", argv[0]);