Index: doc/en/config.xml
===================================================================
RCS file: /sources/weechat/weechat/doc/en/config.xml,v
retrieving revision 1.27
diff -u -d -1 -0 -r1.27 config.xml
--- doc/en/config.xml 4 Dec 2006 09:44:24 -0000 1.27
+++ doc/en/config.xml 28 Feb 2007 23:29:13 -0000
@@ -1098,20 +1098,27 @@
Standard plugins extension in filename, used for autoload (if empty, then all files are loaded when autoload is "*")stringany string''Name associated to IRC server (for display only)
+
+boolean
+ 'on' or 'off'
+ 'off'
+ never use proxy while connecting to server
+
+boolean'on' or 'off''on'Automatically connect to server when WeeChat is startingboolean'on' or 'off'
Index: doc/en/weechat.en.xml
===================================================================
RCS file: /sources/weechat/weechat/doc/en/weechat.en.xml,v
retrieving revision 1.62
diff -u -d -1 -0 -r1.62 weechat.en.xml
--- doc/en/weechat.en.xml 5 Feb 2007 22:18:35 -0000 1.62
+++ doc/en/weechat.en.xml 28 Feb 2007 23:29:15 -0000
@@ -3362,20 +3362,25 @@
char *nameserver internal nameint
+ proxy_disable
+ 1 if proxy should be disabled for the server even if proxy_use is ON, 0 otherwise
+
+
+ intautoconnect1 if autoconnect at start-up, 0 otherwiseintautoreconnect
1 if autoreconnect when disconnected,
0 otherwise
Index: doc/en/weechat_commands.xml
===================================================================
RCS file: /sources/weechat/weechat/doc/en/weechat_commands.xml,v
retrieving revision 1.22
diff -u -d -1 -0 -r1.22 weechat_commands.xml
--- doc/en/weechat_commands.xml 12 Feb 2007 17:39:36 -0000 1.22
+++ doc/en/weechat_commands.xml 28 Feb 2007 23:29:15 -0000
@@ -126,21 +126,21 @@
list: list loaded plugins
listfull: list loaded plugins with detailed info for each plugin
load: load a plugin
autoload: autoload plugins in system or user directory
reload: reload one plugin (if no name given, unload all plugins, then autoload plugins)
unload: unload one or all plugins
Without argument, /plugin command lists loaded plugins.
-server [servername] | [servername hostname port [-auto | -noauto] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 nick2 nick3] [-username username] [-realname realname] [-command command] [-autojoin channel[,channel]] ] | [del servername]
+server [servername] | [servername hostname port [-auto | -noauto] [-noproxy] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 nick2 nick3] [-username username] [-realname realname] [-command command] [-autojoin channel[,channel]] ] | [del servername]
list, add or remove servers
servername: server name, for internal and display use
hostname: name or IP address of server
port: port for server (integer)
ipv6: use IPv6 protocol
ssl: use SSL protocol
password: password for server
nick1: first nick for server
Index: src/common/command.c
===================================================================
RCS file: /sources/weechat/weechat/src/common/command.c,v
retrieving revision 1.158
diff -u -d -1 -0 -r1.158 command.c
--- src/common/command.c 12 Feb 2007 17:39:35 -0000 1.158
+++ src/common/command.c 28 Feb 2007 23:29:17 -0000
@@ -142,21 +142,21 @@
N_(" list: list loaded plugins\n"
"listfull: list loaded plugins with detailed info for each plugin\n"
" load: load a plugin\n"
"autoload: autoload plugins in system or user directory\n"
" reload: reload one plugin (if no name given, unload all plugins, then autoload plugins)\n"
" unload: unload one or all plugins\n\n"
"Without argument, /plugin command lists loaded plugins."),
"list|listfull|load|autoload|reload|unload %P", 0, 2, 0, weechat_cmd_plugin, NULL },
{ "server", N_("list, add or remove servers"),
N_("[servername] | "
- "[servername hostname port [-auto | -noauto] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 "
+ "[servername hostname port [-auto | -noauto] [-noproxy] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 "
"nick2 nick3] [-username username] [-realname realname] "
"[-command command] [-autojoin channel[,channel]] ] | "
"[del servername]"),
N_("servername: server name, for internal and display use\n"
" hostname: name or IP address of server\n"
" port: port for server (integer)\n"
" ipv6: use IPv6 protocol\n"
" ssl: use SSL protocol\n"
" password: password for server\n"
" nick1: first nick for server\n"
@@ -2765,20 +2765,22 @@
server_tmp.name = strdup (argv[0]);
server_tmp.address = strdup (argv[1]);
server_tmp.port = atoi (argv[2]);
/* parse arguments */
for (i = 3; i < argc; i++)
{
if (argv[i][0] == '-')
{
+ if (ascii_strcasecmp (argv[i], "-noproxy") == 0)
+ server_tmp.proxy_disable = 1;
if (ascii_strcasecmp (argv[i], "-auto") == 0)
server_tmp.autoconnect = 1;
if (ascii_strcasecmp (argv[i], "-noauto") == 0)
server_tmp.autoconnect = 0;
if (ascii_strcasecmp (argv[i], "-ipv6") == 0)
server_tmp.ipv6 = 1;
if (ascii_strcasecmp (argv[i], "-ssl") == 0)
server_tmp.ssl = 1;
if (ascii_strcasecmp (argv[i], "-pwd") == 0)
{
@@ -2857,21 +2859,22 @@
WEECHAT_ERROR, "-autojoin");
server_destroy (&server_tmp);
return -1;
}
server_tmp.autojoin = strdup (argv[++i]);
}
}
}
/* create new server */
- new_server = server_new (server_tmp.name, server_tmp.autoconnect,
+ new_server = server_new (server_tmp.name, server_tmp.proxy_disable,
+ server_tmp.autoconnect,
server_tmp.autoreconnect,
server_tmp.autoreconnect_delay,
0, server_tmp.address, server_tmp.port,
server_tmp.ipv6, server_tmp.ssl,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
server_tmp.username, server_tmp.realname,
server_tmp.hostname,
server_tmp.command, 1, server_tmp.autojoin, 1, NULL);
if (new_server)
Index: src/common/session.c
===================================================================
RCS file: /sources/weechat/weechat/src/common/session.c,v
retrieving revision 1.31
diff -u -d -1 -0 -r1.31 session.c
--- src/common/session.c 5 Jan 2007 23:41:39 -0000 1.31
+++ src/common/session.c 28 Feb 2007 23:29:17 -0000
@@ -210,20 +210,21 @@
t_irc_server *ptr_server;
t_irc_channel *ptr_channel;
rc = 1;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
rc = rc && (session_write_id (file, SESSION_OBJ_SERVER));
rc = rc && (session_write_str (file, SESSION_SERV_NAME, ptr_server->name));
+ rc = rc && (session_write_int (file, SESSION_SERV_PROXY_DISABLE, ptr_server->proxy_disable));
rc = rc && (session_write_int (file, SESSION_SERV_AUTOCONNECT, ptr_server->autoconnect));
rc = rc && (session_write_int (file, SESSION_SERV_AUTORECONNECT, ptr_server->autoreconnect));
rc = rc && (session_write_int (file, SESSION_SERV_AUTORECONNECT_DELAY, ptr_server->autoreconnect_delay));
rc = rc && (session_write_int (file, SESSION_SERV_COMMAND_LINE, ptr_server->command_line));
rc = rc && (session_write_str (file, SESSION_SERV_ADDRESS, ptr_server->address));
rc = rc && (session_write_int (file, SESSION_SERV_PORT, ptr_server->port));
rc = rc && (session_write_int (file, SESSION_SERV_IPV6, ptr_server->ipv6));
rc = rc && (session_write_int (file, SESSION_SERV_SSL, ptr_server->ssl));
rc = rc && (session_write_str (file, SESSION_SERV_PASSWORD, ptr_server->password));
rc = rc && (session_write_str (file, SESSION_SERV_NICK1, ptr_server->nick1));
@@ -865,20 +866,23 @@
{
session_crash (file, _("unexpected end of file (reading server)"));
return 0;
}
if (fread ((void *)(&object_id), sizeof (int), 1, file) == 0)
return 0;
switch (object_id)
{
case SESSION_SERV_END:
return 1;
+ case SESSION_SERV_PROXY_DISABLE:
+ rc = rc && (session_read_int (file, &(session_current_server->proxy_disable)));
+ break;
case SESSION_SERV_AUTOCONNECT:
rc = rc && (session_read_int (file, &(session_current_server->autoconnect)));
break;
case SESSION_SERV_AUTORECONNECT:
rc = rc && (session_read_int (file, &(session_current_server->autoreconnect)));
break;
case SESSION_SERV_AUTORECONNECT_DELAY:
rc = rc && (session_read_int (file, &(session_current_server->autoreconnect_delay)));
break;
case SESSION_SERV_COMMAND_LINE:
Index: src/common/session.h
===================================================================
RCS file: /sources/weechat/weechat/src/common/session.h,v
retrieving revision 1.20
diff -u -d -1 -0 -r1.20 session.h
--- src/common/session.h 5 Jan 2007 23:41:39 -0000 1.20
+++ src/common/session.h 28 Feb 2007 23:29:17 -0000
@@ -45,20 +45,21 @@
SESSION_OBJ_BUFFER,
SESSION_OBJ_LINE,
SESSION_OBJ_UPTIME,
SESSION_OBJ_HOTLIST
};
enum t_session_server
{
SESSION_SERV_END = 0,
SESSION_SERV_NAME,
+ SESSION_SERV_PROXY_DISABLE,
SESSION_SERV_AUTOCONNECT,
SESSION_SERV_AUTORECONNECT,
SESSION_SERV_AUTORECONNECT_DELAY,
SESSION_SERV_COMMAND_LINE,
SESSION_SERV_ADDRESS,
SESSION_SERV_PORT,
SESSION_SERV_IPV6,
SESSION_SERV_SSL,
SESSION_SERV_PASSWORD,
SESSION_SERV_NICK1,
Index: src/common/weechat.c
===================================================================
RCS file: /sources/weechat/weechat/src/common/weechat.c,v
retrieving revision 1.93
diff -u -d -1 -0 -r1.93 weechat.c
--- src/common/weechat.c 12 Feb 2007 17:39:35 -0000 1.93
+++ src/common/weechat.c 28 Feb 2007 23:29:18 -0000
@@ -406,21 +406,21 @@
else if ((ascii_strncasecmp (argv[i], "irc", 3) == 0))
{
if (server_init_with_url (argv[i], &server_tmp) < 0)
{
weechat_iconv_fprintf (stderr,
_("%s invalid syntax for IRC server ('%s'), ignored\n"),
WEECHAT_WARNING, argv[i]);
}
else
{
- if (!server_new (server_tmp.name, server_tmp.autoconnect,
+ if (!server_new (server_tmp.name, 0, server_tmp.autoconnect,
server_tmp.autoreconnect,
server_tmp.autoreconnect_delay,
1, server_tmp.address, server_tmp.port,
server_tmp.ipv6, server_tmp.ssl,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
NULL, NULL, NULL, NULL, 0,
server_tmp.autojoin, 1, NULL))
weechat_iconv_fprintf (stderr,
_("%s unable to create server ('%s'), ignored\n"),
Index: src/common/weeconfig.c
===================================================================
RCS file: /sources/weechat/weechat/src/common/weeconfig.c,v
retrieving revision 1.147
diff -u -d -1 -0 -r1.147 weeconfig.c
--- src/common/weeconfig.c 12 Feb 2007 17:39:35 -0000 1.147
+++ src/common/weeconfig.c 28 Feb 2007 23:29:19 -0000
@@ -943,20 +943,24 @@
/* config, server section */
static t_irc_server cfg_server;
t_config_option weechat_options_server[] =
{ { "server_name", N_("server name"),
N_("name associated to IRC server (for display only)"),
OPTION_TYPE_STRING, 0, 0, 0,
"", NULL, NULL, &(cfg_server.name), NULL },
+ { "server_proxy_disable", N_("do not use proxy even when proxy_on = ON"),
+ N_("do not use proxy even when proxy_on = ON"),
+ OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
+ NULL, NULL, &(cfg_server.proxy_disable), NULL, NULL },
{ "server_autoconnect", N_("automatically connect to server"),
N_("automatically connect to server when WeeChat is starting"),
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
NULL, NULL, &(cfg_server.autoconnect), NULL, NULL },
{ "server_autoreconnect", N_("automatically reconnect to server"),
N_("automatically reconnect to server when disconnected"),
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
NULL, NULL, &(cfg_server.autoreconnect), NULL, NULL },
{ "server_autoreconnect_delay", N_("delay before trying again to reconnect"),
N_("delay (in seconds) before trying again to reconnect to server"),
@@ -1499,20 +1503,22 @@
/*
* config_get_server_option_ptr: get a pointer to a server config option
*/
void *
config_get_server_option_ptr (t_irc_server *server, char *option_name)
{
if (ascii_strcasecmp (option_name, "server_name") == 0)
return (void *)(&server->name);
+ if (ascii_strcasecmp (option_name, "server_proxy_disable") == 0)
+ return (void *)(&server->proxy_disable);
if (ascii_strcasecmp (option_name, "server_autoconnect") == 0)
return (void *)(&server->autoconnect);
if (ascii_strcasecmp (option_name, "server_autoreconnect") == 0)
return (void *)(&server->autoreconnect);
if (ascii_strcasecmp (option_name, "server_autoreconnect_delay") == 0)
return (void *)(&server->autoreconnect_delay);
if (ascii_strcasecmp (option_name, "server_address") == 0)
return (void *)(&server->address);
if (ascii_strcasecmp (option_name, "server_port") == 0)
return (void *)(&server->port);
@@ -1762,20 +1768,21 @@
}
if (server_name_already_exists (cfg_server.name))
{
server_free_all ();
gui_printf (NULL,
_("%s %s, line %d: server '%s' already exists\n"),
WEECHAT_WARNING, filename, line_number, cfg_server.name);
return 0;
}
if (!server_new (cfg_server.name,
+ cfg_server.proxy_disable,
cfg_server.autoconnect, cfg_server.autoreconnect,
cfg_server.autoreconnect_delay, 0, cfg_server.address,
cfg_server.port, cfg_server.ipv6, cfg_server.ssl,
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
cfg_server.nick3, cfg_server.username, cfg_server.realname,
cfg_server.hostname, cfg_server.command,
cfg_server.command_delay, cfg_server.autojoin,
cfg_server.autorejoin, cfg_server.notify_levels))
{
server_free_all ();
@@ -2264,20 +2271,21 @@
weechat_iconv_fprintf (file, "W = \"who\"\n");
weechat_iconv_fprintf (file, "WC = \"window merge\"\n");
weechat_iconv_fprintf (file, "WI = \"whois\"\n");
weechat_iconv_fprintf (file, "WW = \"whowas\"\n");
/* no ignore by default */
/* default server is freenode */
weechat_iconv_fprintf (file, "\n[server]\n");
weechat_iconv_fprintf (file, "server_name = \"freenode\"\n");
+ weechat_iconv_fprintf (file, "server_proxy_disable = off\n");
weechat_iconv_fprintf (file, "server_autoconnect = on\n");
weechat_iconv_fprintf (file, "server_autoreconnect = on\n");
weechat_iconv_fprintf (file, "server_autoreconnect_delay = 30\n");
weechat_iconv_fprintf (file, "server_address = \"irc.freenode.net\"\n");
weechat_iconv_fprintf (file, "server_port = 6667\n");
weechat_iconv_fprintf (file, "server_ipv6 = off\n");
weechat_iconv_fprintf (file, "server_ssl = off\n");
weechat_iconv_fprintf (file, "server_password = \"\"\n");
/* Get the user's name from /etc/passwd */
@@ -2479,20 +2487,22 @@
}
/* server section */
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (!ptr_server->command_line)
{
weechat_iconv_fprintf (file, "\n[server]\n");
weechat_iconv_fprintf (file, "server_name = \"%s\"\n", ptr_server->name);
+ weechat_iconv_fprintf (file, "server_proxy_disable = %s\n",
+ (ptr_server->proxy_disable) ? "on" : "off");
weechat_iconv_fprintf (file, "server_autoconnect = %s\n",
(ptr_server->autoconnect) ? "on" : "off");
weechat_iconv_fprintf (file, "server_autoreconnect = %s\n",
(ptr_server->autoreconnect) ? "on" : "off");
weechat_iconv_fprintf (file, "server_autoreconnect_delay = %d\n",
ptr_server->autoreconnect_delay);
weechat_iconv_fprintf (file, "server_address = \"%s\"\n", ptr_server->address);
weechat_iconv_fprintf (file, "server_port = %d\n", ptr_server->port);
weechat_iconv_fprintf (file, "server_ipv6 = %s\n",
(ptr_server->ipv6) ? "on" : "off");
Index: src/irc/irc-dcc.c
===================================================================
RCS file: /sources/weechat/weechat/src/irc/irc-dcc.c,v
retrieving revision 1.57
diff -u -d -1 -0 -r1.57 irc-dcc.c
--- src/irc/irc-dcc.c 5 Jan 2007 23:41:38 -0000 1.57
+++ src/irc/irc-dcc.c 28 Feb 2007 23:29:19 -0000
@@ -281,21 +281,21 @@
*/
int
dcc_connect_to_sender (t_irc_dcc *ptr_dcc)
{
struct sockaddr_in addr;
struct hostent *hostent;
char *ip4;
int ret;
- if (cfg_proxy_use)
+ if (server_use_proxy(ptr_dcc->server))
{
memset (&addr, 0, sizeof (addr));
addr.sin_addr.s_addr = htonl (ptr_dcc->addr);
ip4 = inet_ntoa(addr.sin_addr);
memset (&addr, 0, sizeof (addr));
addr.sin_port = htons (cfg_proxy_port);
addr.sin_family = AF_INET;
if ((hostent = gethostbyname (cfg_proxy_address)) == NULL)
return 0;
Index: src/irc/irc-display.c
===================================================================
RCS file: /sources/weechat/weechat/src/irc/irc-display.c,v
retrieving revision 1.43
diff -u -d -1 -0 -r1.43 irc-display.c
--- src/irc/irc-display.c 6 Jan 2007 22:24:54 -0000 1.43
+++ src/irc/irc-display.c 28 Feb 2007 23:29:19 -0000
@@ -376,20 +376,22 @@
gui_printf (NULL, _("%sServer: %s%s %s[%s%s%s]\n"),
GUI_COLOR(COLOR_WIN_CHAT),
GUI_COLOR(COLOR_WIN_CHAT_SERVER),
server->name,
GUI_COLOR(COLOR_WIN_CHAT_DARK),
GUI_COLOR(COLOR_WIN_CHAT),
(server->is_connected) ?
_("connected") : _("not connected"),
GUI_COLOR(COLOR_WIN_CHAT_DARK));
+ gui_printf (NULL, " server_proxy_disable . . . : %s\n",
+ (server->proxy_disable) ? _("on") : _("off"));
gui_printf (NULL, " server_autoconnect . . . . : %s%s\n",
(server->autoconnect) ? _("on") : _("off"),
(server->command_line) ?
_(" (temporary server, will not be saved)") : "");
gui_printf (NULL, " server_autoreconnect . . . : %s\n",
(server->autoreconnect) ? _("on") : _("off"));
gui_printf (NULL, " server_autoreconnect_delay : %d %s\n",
server->autoreconnect_delay,
_("seconds"));
gui_printf (NULL, " server_address . . . . . . : %s\n",
Index: src/irc/irc-server.c
===================================================================
RCS file: /sources/weechat/weechat/src/irc/irc-server.c,v
retrieving revision 1.105
diff -u -d -1 -0 -r1.105 irc-server.c
--- src/irc/irc-server.c 16 Jan 2007 14:54:38 -0000 1.105
+++ src/irc/irc-server.c 28 Feb 2007 23:29:20 -0000
@@ -67,20 +67,21 @@
/*
* server_init: init server struct with default values
*/
void
server_init (t_irc_server *server)
{
/* user choices */
server->name = NULL;
+ server->proxy_disable = 0;
server->autoconnect = 0;
server->autoreconnect = 1;
server->autoreconnect_delay = 30;
server->command_line = 0;
server->address = NULL;
server->port = -1;
server->ipv6 = 0;
server->ssl = 0;
server->password = NULL;
server->nick1 = NULL;
@@ -445,48 +446,49 @@
/* for each server in memory, remove it */
while (irc_servers)
server_free (irc_servers);
}
/*
* server_new: creates a new server, and initialize it
*/
t_irc_server *
-server_new (char *name, int autoconnect, int autoreconnect,
+server_new (char *name, int proxy_disable, int autoconnect, int autoreconnect,
int autoreconnect_delay, int command_line, char *address,
int port, int ipv6, int ssl, char *password,
char *nick1, char *nick2, char *nick3, char *username,
char *realname, char *hostname, char *command, int command_delay,
char *autojoin, int autorejoin, char *notify_levels)
{
t_irc_server *new_server;
if (!name || !address || (port < 0))
return NULL;
#ifdef DEBUG
weechat_log_printf ("Creating new server (name:%s, address:%s, port:%d, pwd:%s, "
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s, "
- "hostname: %s, command:%s, autojoin:%s, autorejoin:%s, "
+ "hostname: %s, command:%s, proxy_disable:%s, autojoin:%s, autorejoin:%s, "
"notify_levels:%s)\n",
name, address, port, (password) ? password : "",
(nick1) ? nick1 : "", (nick2) ? nick2 : "", (nick3) ? nick3 : "",
(username) ? username : "", (realname) ? realname : "",
(hostname) ? hostname : "", (command) ? command : "",
- (autojoin) ? autojoin : "", (autorejoin) ? "on" : "off",
+ (proxy_disable) ? "on" : "off", (autojoin) ? autojoin : "", (autorejoin) ? "on" : "off",
(notify_levels) ? notify_levels : "");
#endif
if ((new_server = server_alloc ()))
{
new_server->name = strdup (name);
+ new_server->proxy_disable = proxy_disable;
new_server->autoconnect = autoconnect;
new_server->autoreconnect = autoreconnect;
new_server->autoreconnect_delay = autoreconnect_delay;
new_server->command_line = command_line;
new_server->address = strdup (address);
new_server->port = port;
new_server->ipv6 = ipv6;
new_server->ssl = ssl;
new_server->password = (password) ? strdup (password) : strdup ("");
new_server->nick1 = (nick1) ? strdup (nick1) : strdup ("weechat_user");
@@ -1127,20 +1129,29 @@
server->reconnect_start = time (NULL);
irc_display_prefix (server, server->buffer, PREFIX_INFO);
gui_printf (server->buffer, _("%s: Reconnecting to server in %d seconds\n"),
PACKAGE_NAME, server->autoreconnect_delay);
}
else
server->reconnect_start = 0;
}
/*
+ * server_use_proxy : check if server should use proxy
+ */
+
+int server_use_proxy(t_irc_server *server)
+{
+ return (cfg_proxy_use && !server->proxy_disable);
+}
+
+/*
* server_child_read: read connection progress from child process
*/
void
server_child_read (t_irc_server *server)
{
char buffer[1];
int num_read;
num_read = read (server->child_read, buffer, sizeof (buffer));
@@ -1168,47 +1179,47 @@
}
}
#endif
/* kill child and login to server */
server_child_kill (server);
irc_login (server);
break;
/* adress not found */
case '1':
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
- if (cfg_proxy_use)
+ if (server_use_proxy(server))
gui_printf (server->buffer,
_("%s proxy address \"%s\" not found\n"),
WEECHAT_ERROR, server->address);
else
gui_printf (server->buffer,
_("%s address \"%s\" not found\n"),
WEECHAT_ERROR, server->address);
server_close_connection (server);
server_reconnect_schedule (server);
break;
/* IP address not found */
case '2':
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
- if (cfg_proxy_use)
+ if (server_use_proxy(server))
gui_printf (server->buffer,
_("%s proxy IP address not found\n"), WEECHAT_ERROR);
else
gui_printf (server->buffer,
_("%s IP address not found\n"), WEECHAT_ERROR);
server_close_connection (server);
server_reconnect_schedule (server);
break;
/* connection refused */
case '3':
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
- if (cfg_proxy_use)
+ if (server_use_proxy(server))
gui_printf (server->buffer,
_("%s proxy connection refused\n"), WEECHAT_ERROR);
else
gui_printf (server->buffer,
_("%s connection refused\n"), WEECHAT_ERROR);
server_close_connection (server);
server_reconnect_schedule (server);
break;
/* proxy fails to connect to server */
case '4':
@@ -1595,21 +1606,21 @@
int
server_child (t_irc_server *server)
{
struct addrinfo hints, *res, *res_local;
int rc;
res = NULL;
res_local = NULL;
- if (cfg_proxy_use)
+ if (server_use_proxy(server))
{
/* get info about server */
memset (&hints, 0, sizeof (hints));
hints.ai_family = (cfg_proxy_ipv6) ? AF_INET6 : AF_INET;
hints.ai_socktype = SOCK_STREAM;
if (getaddrinfo (cfg_proxy_address, NULL, &hints, &res) !=0)
{
write(server->child_write, "1", 1);
return 0;
}
@@ -1738,21 +1749,21 @@
if (server->ssl)
{
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
gui_printf (server->buffer,
_("%s cannot connect with SSL since WeeChat was not built "
"with GNUtls support\n"), WEECHAT_ERROR);
return 0;
}
#endif
irc_display_prefix (server, server->buffer, PREFIX_INFO);
- if (cfg_proxy_use)
+ if (server_use_proxy(server))
{
gui_printf (server->buffer,
_("%s: connecting to server %s:%d%s%s via %s proxy %s:%d%s...\n"),
PACKAGE_NAME, server->address, server->port,
(server->ipv6) ? " (IPv6)" : "",
(server->ssl) ? " (SSL)" : "",
cfg_proxy_type_values[cfg_proxy_type], cfg_proxy_address, cfg_proxy_port,
(cfg_proxy_ipv6) ? " (IPv6)" : "");
weechat_log_printf (_("Connecting to server %s:%d%s%s via %s proxy %s:%d%s...\n"),
server->address, server->port,
@@ -1801,21 +1812,21 @@
{
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
gui_printf (server->buffer,
_("%s cannot create pipe\n"), WEECHAT_ERROR);
return 0;
}
server->child_read = child_pipe[0];
server->child_write = child_pipe[1];
/* create socket and set options */
- if (cfg_proxy_use)
+ if (server_use_proxy(server))
server->sock = socket ((cfg_proxy_ipv6) ? AF_INET6 : AF_INET, SOCK_STREAM, 0);
else
server->sock = socket ((server->ipv6) ? AF_INET6 : AF_INET, SOCK_STREAM, 0);
if (server->sock == -1)
{
irc_display_prefix (server, server->buffer, PREFIX_ERROR);
gui_printf (server->buffer,
_("%s cannot create socket\n"), WEECHAT_ERROR);
return 0;
}
@@ -2166,20 +2177,21 @@
}
/*
* server_print_log: print server infos in log (usually for crash dump)
*/
void
server_print_log (t_irc_server *server)
{
weechat_log_printf ("[server %s (addr:0x%X)]\n", server->name, server);
+ weechat_log_printf (" proxy_disable . . . : %d\n", server->proxy_disable);
weechat_log_printf (" autoconnect . . . . : %d\n", server->autoconnect);
weechat_log_printf (" autoreconnect . . . : %d\n", server->autoreconnect);
weechat_log_printf (" autoreconnect_delay : %d\n", server->autoreconnect_delay);
weechat_log_printf (" command_line. . . . : %d\n", server->command_line);
weechat_log_printf (" address . . . . . . : '%s'\n", server->address);
weechat_log_printf (" port. . . . . . . . : %d\n", server->port);
weechat_log_printf (" ipv6. . . . . . . . : %d\n", server->ipv6);
weechat_log_printf (" ssl . . . . . . . . : %d\n", server->ssl);
weechat_log_printf (" password. . . . . . : '%s'\n",
(server->password && server->password[0]) ?
Index: src/irc/irc.h
===================================================================
RCS file: /sources/weechat/weechat/src/irc/irc.h,v
retrieving revision 1.120
diff -u -d -1 -0 -r1.120 irc.h
--- src/irc/irc.h 5 Jan 2007 23:41:38 -0000 1.120
+++ src/irc/irc.h 28 Feb 2007 23:29:20 -0000
@@ -135,20 +135,21 @@
t_irc_outqueue *next_outqueue; /* pointer to next message in queue */
t_irc_outqueue *prev_outqueue; /* pointer to previous message in queue */
};
typedef struct t_irc_server t_irc_server;
struct t_irc_server
{
/* user choices */
char *name; /* name of server (only for display) */
+ int proxy_disable; /* = 1 if server is reachable w/o proxy */
int autoconnect; /* = 1 if auto connect at startup */
int autoreconnect; /* = 1 if auto reco when disconnected */
int autoreconnect_delay; /* delay before trying again reconnect */
int command_line; /* server was given on command line */
char *address; /* address of server (IP or name) */
int port; /* port for server (6667 by default) */
int ipv6; /* use IPv6 protocol */
int ssl; /* SSL protocol */
char *password; /* password for server */
char *nick1; /* first nickname for the server */
@@ -352,31 +353,32 @@
/* server functions (irc-server.c) */
extern void server_init (t_irc_server *);
extern int server_init_with_url (char *, t_irc_server *);
extern t_irc_server *server_alloc ();
extern void server_outqueue_free_all (t_irc_server *);
extern void server_destroy (t_irc_server *);
extern void server_free (t_irc_server *);
extern void server_free_all ();
-extern t_irc_server *server_new (char *, int, int, int, int, char *, int, int, int,
+extern t_irc_server *server_new (char *, int, int, int, int, int, char *, int, int, int,
char *, char *, char *, char *, char *, char *,
char *, char *, int, char *, int, char *);
extern char *server_get_charset_decode_iso (t_irc_server *);
extern char *server_get_charset_decode_utf (t_irc_server *);
extern char *server_get_charset_encode (t_irc_server *);
extern int server_send (t_irc_server *, char *, int);
extern void server_outqueue_send (t_irc_server *);
extern void server_sendf (t_irc_server *, char *, ...);
extern void server_parse_message (char *, char **, char **, char **);
extern void server_recv (t_irc_server *);
+extern int server_use_proxy(t_irc_server *server);
extern void server_child_read (t_irc_server *);
extern int server_connect (t_irc_server *);
extern void server_reconnect (t_irc_server *);
extern void server_auto_connect (int, int);
extern void server_disconnect (t_irc_server *, int);
extern void server_disconnect_all ();
extern t_irc_server *server_search (char *);
extern int server_get_number_connected ();
extern void server_get_number_buffer (t_irc_server *, int *, int *);
extern int server_name_already_exists (char *);
Index: src/plugins/plugins-interface.c
===================================================================
RCS file: /sources/weechat/weechat/src/plugins/plugins-interface.c,v
retrieving revision 1.45
diff -u -d -1 -0 -r1.45 plugins-interface.c
--- src/plugins/plugins-interface.c 28 Feb 2007 22:59:47 -0000 1.45
+++ src/plugins/plugins-interface.c 28 Feb 2007 23:29:21 -0000
@@ -907,20 +907,21 @@
if (irc_servers)
{
server_info = NULL;
last_server_info = NULL;
for (ptr_server = irc_servers; ptr_server; ptr_server = ptr_server->next_server)
{
new_server_info = (t_plugin_server_info *) malloc (sizeof (t_plugin_server_info));
if (new_server_info)
{
new_server_info->name = (ptr_server->name) ? strdup (ptr_server->name) : strdup ("");
+ new_server_info->proxy_disable = ptr_server->proxy_disable;
new_server_info->autoconnect = ptr_server->autoconnect;
new_server_info->autoreconnect = ptr_server->autoreconnect;
new_server_info->autoreconnect_delay = ptr_server->autoreconnect_delay;
new_server_info->command_line = ptr_server->command_line;
new_server_info->address = (ptr_server->address) ? strdup (ptr_server->address) : strdup ("");
new_server_info->port = ptr_server->port;
new_server_info->ipv6 = ptr_server->ipv6;
new_server_info->ssl = ptr_server->ssl;
new_server_info->password = (ptr_server->password) ? strdup (ptr_server->password) : strdup ("");
new_server_info->nick1 = (ptr_server->nick1) ? strdup (ptr_server->nick1) : strdup ("");
Index: src/plugins/weechat-plugin.h
===================================================================
RCS file: /sources/weechat/weechat/src/plugins/weechat-plugin.h,v
retrieving revision 1.31
diff -u -d -1 -0 -r1.31 weechat-plugin.h
--- src/plugins/weechat-plugin.h 5 Feb 2007 22:18:34 -0000 1.31
+++ src/plugins/weechat-plugin.h 28 Feb 2007 23:29:21 -0000
@@ -75,20 +75,21 @@
unsigned long bytes_per_sec; /* bytes per second */
t_plugin_dcc_info *prev_dcc; /* link to previous dcc file/chat */
t_plugin_dcc_info *next_dcc; /* link to next dcc file/chat */
};
typedef struct t_plugin_server_info t_plugin_server_info;
struct t_plugin_server_info
{
char *name; /* name of server (only for display) */
+ int proxy_disable; /* = 1 if server is reachable w/o proxy */
int autoconnect; /* = 1 if auto connect at startup */
int autoreconnect; /* = 1 if auto reco when disconnected */
int autoreconnect_delay; /* delay before trying again reconnect */
int command_line; /* server was given on command line */
char *address; /* address of server (IP or name) */
int port; /* port for server (6667 by default) */
int ipv6; /* use IPv6 protocol */
int ssl; /* SSL protocol */
char *password; /* password for server */
char *nick1; /* first nickname for the server */
Index: src/plugins/scripts/lua/weechat-lua.c
===================================================================
RCS file: /sources/weechat/weechat/src/plugins/scripts/lua/weechat-lua.c,v
retrieving revision 1.35
diff -u -d -1 -0 -r1.35 weechat-lua.c
--- src/plugins/scripts/lua/weechat-lua.c 27 Feb 2007 22:22:56 -0000 1.35
+++ src/plugins/scripts/lua/weechat-lua.c 28 Feb 2007 23:29:22 -0000
@@ -1633,20 +1633,24 @@
lua_newtable (lua_current_interpreter);
for (ptr_server = server_info; ptr_server; ptr_server = ptr_server->next_server)
{
strftime(timebuffer, sizeof(timebuffer), "%F %T",
localtime(&ptr_server->away_time));
lua_pushstring (lua_current_interpreter, ptr_server->name);
lua_newtable (lua_current_interpreter);
+ lua_pushstring (lua_current_interpreter, "proxy_disable");
+ lua_pushnumber (lua_current_interpreter, ptr_server->proxy_disable);
+ lua_rawset (lua_current_interpreter, -3);
+
lua_pushstring (lua_current_interpreter, "autoconnect");
lua_pushnumber (lua_current_interpreter, ptr_server->autoconnect);
lua_rawset (lua_current_interpreter, -3);
lua_pushstring (lua_current_interpreter, "autoreconnect");
lua_pushnumber (lua_current_interpreter, ptr_server->autoreconnect);
lua_rawset (lua_current_interpreter, -3);
lua_pushstring (lua_current_interpreter, "autoreconnect_delay");
lua_pushnumber (lua_current_interpreter, ptr_server->autoreconnect_delay);
Index: src/plugins/scripts/perl/weechat-perl.c
===================================================================
RCS file: /sources/weechat/weechat/src/plugins/scripts/perl/weechat-perl.c,v
retrieving revision 1.56
diff -u -d -1 -0 -r1.56 weechat-perl.c
--- src/plugins/scripts/perl/weechat-perl.c 28 Feb 2007 22:59:47 -0000 1.56
+++ src/plugins/scripts/perl/weechat-perl.c 28 Feb 2007 23:29:22 -0000
@@ -1453,20 +1453,21 @@
XSRETURN_EMPTY;
}
for (ptr_server = server_info; ptr_server; ptr_server = ptr_server->next_server)
{
strftime(timebuffer, sizeof(timebuffer), "%F %T",
localtime(&ptr_server->away_time));
server_hash_member = (HV *) sv_2mortal((SV *) newHV());
+ hv_store (server_hash_member, "proxy_disable", 13, newSViv (ptr_server->proxy_disable), 0);
hv_store (server_hash_member, "autoconnect", 11, newSViv (ptr_server->autoconnect), 0);
hv_store (server_hash_member, "autoreconnect", 13, newSViv (ptr_server->autoreconnect), 0);
hv_store (server_hash_member, "autoreconnect_delay", 19, newSViv (ptr_server->autoreconnect_delay), 0);
hv_store (server_hash_member, "command_line", 12, newSViv (ptr_server->command_line), 0);
hv_store (server_hash_member, "address", 7, newSVpv (ptr_server->address, 0), 0);
hv_store (server_hash_member, "port", 4, newSViv (ptr_server->port), 0);
hv_store (server_hash_member, "ipv6", 4, newSViv (ptr_server->ipv6), 0);
hv_store (server_hash_member, "ssl", 3, newSViv (ptr_server->ssl), 0);
hv_store (server_hash_member, "password", 8, newSVpv (ptr_server->password, 0), 0);
hv_store (server_hash_member, "nick1", 5, newSVpv (ptr_server->nick1, 0), 0);
Index: src/plugins/scripts/python/weechat-python.c
===================================================================
RCS file: /sources/weechat/weechat/src/plugins/scripts/python/weechat-python.c,v
retrieving revision 1.61
diff -u -d -1 -0 -r1.61 weechat-python.c
--- src/plugins/scripts/python/weechat-python.c 28 Feb 2007 22:59:47 -0000 1.61
+++ src/plugins/scripts/python/weechat-python.c 28 Feb 2007 23:29:23 -0000
@@ -1468,20 +1468,26 @@
for(ptr_server = server_info; ptr_server; ptr_server = ptr_server->next_server)
{
strftime(timebuffer, sizeof(timebuffer), "%F %T",
localtime(&ptr_server->away_time));
server_hash_member = PyDict_New();
if (server_hash_member)
{
+ key = Py_BuildValue("s", "proxy_disable");
+ value = Py_BuildValue("i", ptr_server->proxy_disable);
+ PyDict_SetItem(server_hash_member, key, value);
+ Py_DECREF (key);
+ Py_DECREF (value);
+
key = Py_BuildValue("s", "autoconnect");
value = Py_BuildValue("i", ptr_server->autoconnect);
PyDict_SetItem(server_hash_member, key, value);
Py_DECREF (key);
Py_DECREF (value);
key = Py_BuildValue("s", "autoreconnect");
value = Py_BuildValue("i", ptr_server->autoreconnect);
PyDict_SetItem(server_hash_member, key, value);
Py_DECREF (key);
Index: src/plugins/scripts/ruby/weechat-ruby.c
===================================================================
RCS file: /sources/weechat/weechat/src/plugins/scripts/ruby/weechat-ruby.c,v
retrieving revision 1.49
diff -u -d -1 -0 -r1.49 weechat-ruby.c
--- src/plugins/scripts/ruby/weechat-ruby.c 17 Feb 2007 18:23:51 -0000 1.49
+++ src/plugins/scripts/ruby/weechat-ruby.c 28 Feb 2007 23:29:24 -0000
@@ -1654,20 +1654,22 @@
for(ptr_server = server_info; ptr_server; ptr_server = ptr_server->next_server)
{
strftime(timebuffer, sizeof(timebuffer), "%F %T",
localtime(&ptr_server->away_time));
server_hash_member = rb_hash_new ();
if (server_hash_member)
{
+ rb_hash_aset (server_hash_member, rb_str_new2("proxy_disable"),
+ INT2FIX(ptr_server->proxy_disable));
rb_hash_aset (server_hash_member, rb_str_new2("autoconnect"),
INT2FIX(ptr_server->autoconnect));
rb_hash_aset (server_hash_member, rb_str_new2("autoreconnect"),
INT2FIX(ptr_server->autoreconnect));
rb_hash_aset (server_hash_member, rb_str_new2("autoreconnect_delay"),
INT2FIX(ptr_server->autoreconnect_delay));
rb_hash_aset (server_hash_member, rb_str_new2("command_line"),
INT2FIX(ptr_server->command_line));
rb_hash_aset (server_hash_member, rb_str_new2("address"),
rb_str_new2(ptr_server->address));