X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/2c00fbc2522a44891208fbc52f683968263415c8..e0ee1ed8a1244740d4cad80273e0f4603e9cf744:/src/proto-p10.c diff --git a/src/proto-p10.c b/src/proto-p10.c index 244ae8d..f55dd7e 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -744,6 +744,12 @@ irc_eob_ack(void) } } +void +irc_rpong(const char *from1, const char *from2, const char *pingtime, const char *clientinfo) +{ + putsock("%s " P10_RPONG " %s %s %s :%s", self->numeric, from1, from2, pingtime, clientinfo); +} + void irc_ping(const char *payload) { @@ -1304,6 +1310,19 @@ static CMD_FUNC(cmd_eob_ack) return 1; } +static CMD_FUNC(cmd_rping) +{ + struct server *dest; + + if (!(dest = GetServerN(argv[1]))) + return 0; + + if (dest == self) + irc_rpong(argv[2], argv[3], argv[4], argv[5]); + + return 1; +} + static CMD_FUNC(cmd_ping) { struct server *srv; @@ -2026,7 +2045,7 @@ static CMD_FUNC(cmd_svspart) if (argc < 3) return 0; - user = GetUserH(argv[1]); + user = GetUserN(argv[1]); if (!user) return 0; parse_foreach(argv[2], part_helper, NULL, NULL, NULL, user); @@ -2399,6 +2418,11 @@ init_parse(void) dict_insert(irc_func_dict, CMD_ADMIN, cmd_admin); dict_insert(irc_func_dict, TOK_ADMIN, cmd_admin); + dict_insert(irc_func_dict, CMD_RPING, cmd_rping); + dict_insert(irc_func_dict, TOK_RPING, cmd_rping); + dict_insert(irc_func_dict, CMD_RPONG, cmd_dummy); + dict_insert(irc_func_dict, TOK_RPONG, cmd_dummy); + /* In P10, DESTRUCT doesn't do anything except be broadcast to servers. * Apparently to obliterate channels from any servers that think they * exist?