From abc0e4f821568e135623d035312d7a92f5f507cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Sat, 13 Jun 2015 21:52:12 +0200 Subject: kike: implement LINKS --- kike.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'kike.c') diff --git a/kike.c b/kike.c index 08b015b..602f654 100644 --- a/kike.c +++ b/kike.c @@ -2917,6 +2917,23 @@ irc_handle_stats (const struct irc_message *msg, struct client *c) irc_send_reply (c, IRC_RPL_ENDOFSTATS, query); } +static void +irc_handle_links (const struct irc_message *msg, struct client *c) +{ + if (msg->params.len > 1 && !irc_is_this_me (c->ctx, msg->params.vector[0])) + RETURN_WITH_REPLY (c, IRC_ERR_NOSUCHSERVER, msg->params.vector[0]); + + const char *mask = "*"; + if (msg->params.len > 0) + mask = msg->params.vector[msg->params.len > 1]; + + if (!irc_fnmatch (mask, c->ctx->server_name)) + irc_send_reply (c, IRC_RPL_LINKS, mask, + c->ctx->server_name, 0 /* hop count */, + str_map_find (&c->ctx->config, "server_info")); + irc_send_reply (c, IRC_RPL_ENDOFLINKS, mask); +} + static void irc_handle_kill (const struct irc_message *msg, struct client *c) { @@ -2973,6 +2990,7 @@ irc_register_handlers (struct server_context *ctx) { "AWAY", true, irc_handle_away, 0, 0 }, { "ADMIN", true, irc_handle_admin, 0, 0 }, { "STATS", true, irc_handle_stats, 0, 0 }, + { "LINKS", true, irc_handle_links, 0, 0 }, { "MODE", true, irc_handle_mode, 0, 0 }, { "PRIVMSG", true, irc_handle_privmsg, 0, 0 }, -- cgit v1.2.3