diff options
Diffstat (limited to 'src/irc/proxy/proxy.c')
-rw-r--r-- | src/irc/proxy/proxy.c | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/irc/proxy/proxy.c b/src/irc/proxy/proxy.c new file mode 100644 index 0000000..d32b600 --- /dev/null +++ b/src/irc/proxy/proxy.c @@ -0,0 +1,116 @@ +/* + proxy.c : irc proxy + + Copyright (C) 1999-2001 Timo Sirainen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "module.h" +#include <irssi/src/core/signals.h> +#include <irssi/src/core/settings.h> +#include <irssi/src/core/levels.h> + +#include <irssi/src/fe-common/core/printtext.h> + +/* SYNTAX: IRSSIPROXY STATUS */ +static void cmd_irssiproxy_status(const char *data, IRC_SERVER_REC *server) +{ + GSList *tmp; + + if (!settings_get_bool("irssiproxy")) { + printtext(server, NULL, MSGLEVEL_CLIENTNOTICE, + "Proxy is currently disabled"); + return; + } + + + printtext(server, NULL, MSGLEVEL_CLIENTNOTICE, + "Proxy: Currently connected clients: %d", + g_slist_length(proxy_clients)); + + for (tmp = proxy_clients; tmp != NULL; tmp = tmp->next) { + CLIENT_REC *rec = tmp->data; + + printtext(server, NULL, MSGLEVEL_CLIENTNOTICE, + " %s connect%s to %s (%s)", + rec->addr, + rec->connected ? "ed" : "ing", + rec->listen->port_or_path, rec->listen->ircnet); + } +} + +/* SYNTAX: IRSSIPROXY */ +static void cmd_irssiproxy(const char *data, IRC_SERVER_REC *server, void *item) +{ + if (*data == '\0') { + cmd_irssiproxy_status(data, server); + return; + } + + command_runsub("irssiproxy", data, server, item); +} + +static void irc_proxy_setup_changed(void) +{ + if (settings_get_bool("irssiproxy")) { + proxy_listen_init(); + } else { + proxy_listen_deinit(); + } +} + +void irc_proxy_init(void) +{ + settings_add_str("irssiproxy", "irssiproxy_ports", ""); + settings_add_str("irssiproxy", "irssiproxy_password", ""); + settings_add_str("irssiproxy", "irssiproxy_bind", ""); + settings_add_bool("irssiproxy", "irssiproxy", TRUE); + + if (*settings_get_str("irssiproxy_password") == '\0') { + /* no password - bad idea! */ + signal_emit("gui dialog", 2, "warning", + "Warning!! Password not specified, everyone can " + "use this proxy! Use /set irssiproxy_password " + "<password> to set it"); + } + if (*settings_get_str("irssiproxy_ports") == '\0') { + signal_emit("gui dialog", 2, "warning", + "No proxy ports specified. Use /SET " + "irssiproxy_ports <ircnet>=<port> <ircnet2>=<port2> " + "... to set them."); + } + + command_bind("irssiproxy", NULL, (SIGNAL_FUNC) cmd_irssiproxy); + command_bind("irssiproxy status", NULL, (SIGNAL_FUNC) cmd_irssiproxy_status); + + signal_add_first("setup changed", (SIGNAL_FUNC) irc_proxy_setup_changed); + + if (settings_get_bool("irssiproxy")) { + proxy_listen_init(); + } + settings_check(); + module_register("proxy", "irc"); +} + +void irc_proxy_deinit(void) +{ + proxy_listen_deinit(); +} + +void irc_proxy_abicheck(int *version) +{ + *version = IRSSI_ABI_VERSION; +} |