diff options
author | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2015-09-19 02:53:25 +0200 |
---|---|---|
committer | ailin-nemui <ailin-nemui@users.noreply.github.com> | 2015-09-19 02:53:25 +0200 |
commit | 2b13e793c4872711bc046363303cca4bc060e017 (patch) | |
tree | e56c1428a5d474faeb1902541ad4395a48d881f1 /src/irc/proxy/proxy.c | |
parent | 7b46dae1825fc90d97163b40cdca2ffaceb2e13c (diff) | |
parent | 51496cd09f5d2f2da0a4ae678663c66e2ceae17c (diff) | |
download | irssi-2b13e793c4872711bc046363303cca4bc060e017.zip |
Merge pull request #259 from dequis/irssiproxy
Updates for irssiproxy
Diffstat (limited to 'src/irc/proxy/proxy.c')
-rw-r--r-- | src/irc/proxy/proxy.c | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/irc/proxy/proxy.c b/src/irc/proxy/proxy.c index c8f47bdf..ce79e2b7 100644 --- a/src/irc/proxy/proxy.c +++ b/src/irc/proxy/proxy.c @@ -23,11 +23,60 @@ #include "settings.h" #include "levels.h" +#include "fe-common/core/printtext.h" + +/* SYNTAX: IRSSIPROXY STATUS */ +static void cmd_irssiproxy_status(const char *data, IRC_SERVER_REC *server) +{ + if (!settings_get_bool("irssiproxy")) { + printtext(server, NULL, MSGLEVEL_CLIENTNOTICE, + "Proxy is currently disabled"); + return; + } + + GSList *tmp; + + 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:%d connect%s to %d (%s)", + rec->host, rec->port, + rec->connected ? "ed" : "ing", + rec->listen->port, 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! */ @@ -43,7 +92,14 @@ void irc_proxy_init(void) "... to set them."); } - proxy_listen_init(); + 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"); } |