1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00
irssi/src/irc/proxy/proxy.c

137 lines
3.4 KiB
C
Raw Normal View History

/*
sample.c : sample plugin for irssi
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "proxy.h"
#include "levels.h"
#include "fe-common/core/printtext.h"
#include "servers.h"
#include "net-sendbuffer.h"
#include "lib-config/iconfig.h"
#include "settings.h"
PLUGIN_DATA *proxy_data;
MODULE_REC *plug;
gchar *plugin_description(void)
{
return "IRC proxy plugin";
}
/*gint plugin_version(void)
{
return PLUGIN_LAYER_VERSION;
}
*/
void proxy_settings_init(void)
{
settings_add_str("proxy", "proxy_listen_addr", "localhost");
settings_add_int("proxy", "proxy_listen_port", 2777);
settings_add_str("proxy", "proxy_listen_password", "");
}
/* If we call plugin_deinit() in this code, it doesn't necessarily point to
_THIS_ module's plugin_deinit() but instead some other module's.. So,
we create static deinit() function which should be used.. */
static void deinit(/*MODULE_REC *plugin*/)
{
plugin_proxy_listen_deinit(proxy_data);
}
void proxy_deinit(/*MODULE_REC *plugin*/)
{
deinit(/*plugin*/);
}
gboolean proxy_init(void)
{
gchar ipaddr[MAX_IP_LEN];
const char *password;
const char *addr;
int port;
proxy_settings_init();
proxy_data = g_new0(PLUGIN_DATA, 1);
password = settings_get_str("proxy_listen_password");
addr = settings_get_str("proxy_listen_addr");
port = settings_get_int("proxy_listen_port");
plug = module_find("proxy");
proxy_data->plugin = plug;
if (*password != '\0')
{
/* args = password */
proxy_data->password = g_strdup(password);
}
if (*addr != '\0')
{
/* specify ip address to listen */
net_host2ip(addr, &proxy_data->ip);
}
if (port != 0)
{
/* specify port to use */
proxy_data->port = port;
}
if (proxy_data->password == NULL)
{
/* no password - bad idea! */
printtext(NULL, NULL, MSGLEVEL_CLIENTNOTICE, "Warning!! Password not specified, everyone can use this proxy! Use /set proxy_listen_password <password> to set it");
}
if (servers == NULL)
{
/* FIXME: not good */
printtext(NULL, NULL, MSGLEVEL_CLIENTERROR, "You need to specify IP address to listen with /set proxy_listen_addr <address>");
deinit();
return FALSE;
}
else
{
SERVER_REC *server;
server = servers->data;
if (net_getsockname(net_sendbuffer_handle(server->handle), &proxy_data->ip, NULL))
{
deinit();
return FALSE;
}
}
net_ip2host(&proxy_data->ip, ipaddr);
printtext(NULL, NULL, MSGLEVEL_CLIENTNOTICE, "Proxy plugin loaded - listening in interface %s port %d", ipaddr, proxy_data->port);
plugin_proxy_listen_init(proxy_data);
proxy_data->loaded = TRUE;
return TRUE;
}