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 "*") string any 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 starting boolean '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 * name server internal name int + proxy_disable + 1 if proxy should be disabled for the server even if proxy_use is ON, 0 otherwise + + + int autoconnect 1 if autoconnect at start-up, 0 otherwise int autoreconnect 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));