Compare commits
1 Commits
76c9ee11de
...
91ece92e4f
Author | SHA1 | Date | |
---|---|---|---|
|
91ece92e4f |
27
src/irc.c
27
src/irc.c
@ -1025,6 +1025,31 @@ static int irc_cli_pass(bip_t *bip, struct link_client *ic, struct line *line)
|
|||||||
return OK_FORGET;
|
return OK_FORGET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int irc_cli_cap(bip_t *bip, struct link_client *ic, struct line *line)
|
||||||
|
{
|
||||||
|
if (irc_line_count(line) < 2)
|
||||||
|
return ERR_PROTOCOL;
|
||||||
|
|
||||||
|
/* When we decide to enable actual capabilities, we'll have to handle CAP
|
||||||
|
* version, add a flag cap_started or similar, and handle CAP END.
|
||||||
|
*/
|
||||||
|
if (irc_line_elem_equals(line, 1, "LS")) {
|
||||||
|
WRITE_LINE2(CONN(ic), NULL, "CAP", "*", "LS");
|
||||||
|
} else if (irc_line_elem_equals(line, 1, "LIST")) {
|
||||||
|
WRITE_LINE3(CONN(ic), NULL, "CAP", "*", "LIST", "");
|
||||||
|
} else if (irc_line_elem_equals(line, 1, "REQ")) {
|
||||||
|
char *caps = irc_line_to_string_skip(line, 2);
|
||||||
|
if (caps) {
|
||||||
|
caps++;
|
||||||
|
WRITE_LINE3(CONN(ic), NULL, "CAP", "*", "NAK", caps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ic->state & IRCC_READY) == IRCC_READY)
|
||||||
|
return irc_cli_startup(bip, ic, line);
|
||||||
|
return OK_FORGET;
|
||||||
|
}
|
||||||
|
|
||||||
static int irc_cli_quit(struct link_client *ic, struct line *line)
|
static int irc_cli_quit(struct link_client *ic, struct line *line)
|
||||||
{
|
{
|
||||||
(void)ic;
|
(void)ic;
|
||||||
@ -1403,6 +1428,8 @@ static int irc_dispatch_logging_client(bip_t *bip, struct link_client *ic,
|
|||||||
return irc_cli_user(bip, ic, line);
|
return irc_cli_user(bip, ic, line);
|
||||||
} else if (irc_line_elem_equals(line, 0, "PASS")) {
|
} else if (irc_line_elem_equals(line, 0, "PASS")) {
|
||||||
return irc_cli_pass(bip, ic, line);
|
return irc_cli_pass(bip, ic, line);
|
||||||
|
} else if (irc_line_elem_equals(line, 0, "CAP")) {
|
||||||
|
return irc_cli_cap(bip, ic, line);
|
||||||
}
|
}
|
||||||
return OK_FORGET;
|
return OK_FORGET;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user