]> jfr.im git - irc/irssi/irssi.git/commitdiff
Add support for -proxy to /SERVER and /CONNECT. origin/orphaned/ahf/proxy
authorAlexander Færøy <redacted>
Tue, 18 Oct 2016 20:33:26 +0000 (22:33 +0200)
committerAlexander Færøy <redacted>
Sun, 18 Dec 2016 22:14:34 +0000 (23:14 +0100)
src/core/chat-commands.c
src/core/server-connect-rec.h
src/core/server-setup-rec.h
src/core/servers-reconnect.c
src/core/servers-setup.c
src/core/session.c
src/fe-common/core/fe-server.c
src/fe-common/irc/fe-irc-server.c

index 4b0b7b2a59eaee47cd26146201bbadbe6893e4ff..385459abc5917a52793a9a0711320458ea6d374c 100644 (file)
@@ -124,6 +124,8 @@ static SERVER_CONNECT_REC *get_server_connect(const char *data, int *plus_addr,
                conn->tls_verify = TRUE;
        if ((conn->tls_cert != NULL && conn->tls_cert[0] != '\0') || conn->tls_verify)
                conn->use_tls = TRUE;
+       if ((tmp = g_hash_table_lookup(optlist, "proxy")) != NULL)
+               conn->proxy = g_strdup(tmp);
 
        if (g_hash_table_lookup(optlist, "!") != NULL)
                conn->no_autojoin_channels = TRUE;
@@ -148,6 +150,7 @@ static SERVER_CONNECT_REC *get_server_connect(const char *data, int *plus_addr,
 /* SYNTAX: CONNECT [-4 | -6] [-ssl] [-ssl_cert <cert>] [-ssl_pkey <pkey>] [-ssl_pass <password>]
                    [-ssl_verify] [-ssl_cafile <cafile>] [-ssl_capath <capath>]
                    [-ssl_ciphers <list>]
+                   [-proxy <proxy>]
                    [-!] [-noautosendcmd]
                   [-network <network>] [-host <hostname>]
                   [-rawlog <file>]
@@ -255,6 +258,7 @@ static void sig_default_command_server(const char *data, SERVER_REC *server,
 /* SYNTAX: SERVER [-4 | -6] [-ssl] [-ssl_cert <cert>] [-ssl_pkey <pkey>] [-ssl_pass <password>]
                   [-ssl_verify] [-ssl_cafile <cafile>] [-ssl_capath <capath>]
                   [-ssl_ciphers <list>]
+                  [-proxy <proxy>]
                   [-!] [-noautosendcmd]
                  [-network <network>] [-host <hostname>]
                  [-rawlog <file>]
@@ -494,7 +498,7 @@ void chat_commands_init(void)
        signal_add("default command server", (SIGNAL_FUNC) sig_default_command_server);
        signal_add("server sendmsg", (SIGNAL_FUNC) sig_server_sendmsg);
 
-       command_set_options("connect", "4 6 !! -network ssl +ssl_cert +ssl_pkey +ssl_pass ssl_verify +ssl_cafile +ssl_capath +ssl_ciphers +ssl_pinned_cert +ssl_pinned_pubkey tls +tls_cert +tls_pkey +tls_pass tls_verify +tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert +tls_pinned_pubkey +host -rawlog noautosendcmd");
+       command_set_options("connect", "4 6 !! -network ssl +ssl_cert +ssl_pkey +ssl_pass ssl_verify +ssl_cafile +ssl_capath +ssl_ciphers +ssl_pinned_cert +ssl_pinned_pubkey tls +tls_cert +tls_pkey +tls_pass tls_verify +tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert +tls_pinned_pubkey +host +proxy -rawlog noautosendcmd");
        command_set_options("msg", "channel nick");
 }
 
index 914087f1c8de300cf87e083eed3fef7320278cea..f69f6a53d633b53f4a58d3e403f9d4ce071761db 100644 (file)
@@ -27,6 +27,8 @@ char *tls_ciphers;
 char *tls_pinned_cert;
 char *tls_pinned_pubkey;
 
+char *proxy;
+
 GIOChannel *connect_handle; /* connect using this handle */
 
 /* when reconnecting, the old server status */
index dc3d7906029e6cb306b23a8202951d6bebb7abec..360c975922075e08696991847b847cf5ff2a165d 100644 (file)
@@ -20,6 +20,8 @@ char *tls_ciphers;
 char *tls_pinned_cert;
 char *tls_pinned_pubkey;
 
+char *proxy;
+
 char *own_host; /* address to use when connecting this server */
 IPADDR *own_ip4, *own_ip6; /* resolved own_address if not NULL */
 
index 63d82adc1995f9d1740a1fc07afa7112c64ce66a..0cbffa45e8e935271c9bc6da80bd5e701ddb4618 100644 (file)
@@ -196,6 +196,8 @@ server_connect_copy_skeleton(SERVER_CONNECT_REC *src, int connect_info)
        dest->tls_pinned_cert = g_strdup(src->tls_pinned_cert);
        dest->tls_pinned_pubkey = g_strdup(src->tls_pinned_pubkey);
 
+       dest->proxy = g_strdup(src->proxy);
+
        return dest;
 }
 
index 2f4ea059f572c454f17b093c4736da5ef270fac4..4b636953d9488caf541c4789ca134baeba257677 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "chat-protocols.h"
 #include "chatnets.h"
+#include "proxy.h"
 #include "servers.h"
 #include "servers-setup.h"
 
@@ -173,6 +174,8 @@ static void server_setup_fill_server(SERVER_CONNECT_REC *conn,
                conn->tls_pinned_cert = g_strdup(sserver->tls_pinned_cert);
        if (conn->tls_pinned_pubkey == NULL && sserver->tls_pinned_pubkey != NULL && sserver->tls_pinned_pubkey[0] != '\0')
                conn->tls_pinned_pubkey = g_strdup(sserver->tls_pinned_pubkey);
+       if (conn->proxy == NULL && sserver->proxy != NULL && sserver->proxy[0] != '\0')
+               conn->proxy = g_strdup(sserver->proxy);
 
        server_setup_fill_reconn(conn, sserver);
 
@@ -445,6 +448,7 @@ static SERVER_SETUP_REC *server_setup_read(CONFIG_NODE *node)
        rec->port = port;
        rec->autoconnect = config_node_get_bool(node, "autoconnect", FALSE);
        rec->own_host = g_strdup(config_node_get_str(node, "own_host", NULL));
+       rec->proxy = g_strdup(config_node_get_str(node, "proxy", NULL));
 
        signal_emit("server setup read", 2, rec, node);
 
@@ -503,7 +507,7 @@ static void server_setup_save(SERVER_SETUP_REC *rec)
        iconfig_node_set_str(node, "tls_ciphers", rec->tls_ciphers);
        iconfig_node_set_str(node, "tls_pinned_cert", rec->tls_pinned_cert);
        iconfig_node_set_str(node, "tls_pinned_pubkey", rec->tls_pinned_pubkey);
-
+       iconfig_node_set_str(node, "proxy", rec->proxy);
        iconfig_node_set_str(node, "own_host", rec->own_host);
 
        iconfig_node_set_str(node, "family",
@@ -553,6 +557,7 @@ static void server_setup_destroy(SERVER_SETUP_REC *rec)
        g_free_not_null(rec->tls_ciphers);
        g_free_not_null(rec->tls_pinned_cert);
        g_free_not_null(rec->tls_pinned_pubkey);
+       g_free_not_null(rec->proxy);
        g_free(rec->address);
        g_free(rec);
 }
index 34190c529f8032aec753ed7e44891c4e27357680..d7314a04aef9fd75f5485e4629d410b9541d7d93 100644 (file)
@@ -168,6 +168,8 @@ static void session_save_server(SERVER_REC *server, CONFIG_REC *config,
        config_node_set_str(config, node, "tls_pinned_cert", server->connrec->tls_pinned_cert);
        config_node_set_str(config, node, "tls_pinned_pubkey", server->connrec->tls_pinned_pubkey);
 
+       config_node_set_str(config, node, "proxy", server->connrec->proxy);
+
        handle = g_io_channel_unix_get_fd(net_sendbuffer_handle(server->handle));
        config_node_set_int(config, node, "handle", handle);
 
index 37a176acb66efd88f2cd2b204e8962df30f85267..d935b529db7305e609c9eaeeabc60f830078e757 100644 (file)
@@ -215,6 +215,10 @@ static void cmd_server_add_modify(const char *data, gboolean add)
        if ((rec->tls_cert != NULL && rec->tls_cert[0] != '\0') || rec->tls_verify == TRUE)
                rec->use_tls = TRUE;
 
+       value = g_hash_table_lookup(optlist, "proxy");
+       if (value != NULL && *value != '\0')
+               rec->proxy = g_strdup(value);
+
        if (g_hash_table_lookup(optlist, "auto")) rec->autoconnect = TRUE;
        if (g_hash_table_lookup(optlist, "noauto")) rec->autoconnect = FALSE;
 
@@ -432,8 +436,8 @@ void fe_server_init(void)
        command_bind_first("server", NULL, (SIGNAL_FUNC) server_command);
        command_bind_first("disconnect", NULL, (SIGNAL_FUNC) server_command);
 
-       command_set_options("server add", "4 6 !! ssl +ssl_cert +ssl_pkey +ssl_pass ssl_verify +ssl_cafile +ssl_capath +ssl_ciphers +ssl_fingerprint tls +tls_cert +tls_pkey +tls_pass tls_verify +tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert +tls_pinned_pubkey auto noauto -host -port noautosendcmd");
-       command_set_options("server modify", "4 6 !! ssl +ssl_cert +ssl_pkey +ssl_pass ssl_verify +ssl_cafile +ssl_capath +ssl_ciphers +ssl_fingerprint tls +tls_cert +tls_pkey +tls_pass tls_verify +tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert +tls_pinned_pubkey auto noauto -host -port noautosendcmd");
+       command_set_options("server add", "4 6 !! ssl +ssl_cert +ssl_pkey +ssl_pass ssl_verify +ssl_cafile +ssl_capath +ssl_ciphers +ssl_fingerprint tls +tls_cert +tls_pkey +tls_pass tls_verify +tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert +tls_pinned_pubkey +proxy auto noauto -host -port noautosendcmd");
+       command_set_options("server modify", "4 6 !! ssl +ssl_cert +ssl_pkey +ssl_pass ssl_verify +ssl_cafile +ssl_capath +ssl_ciphers +ssl_fingerprint tls +tls_cert +tls_pkey +tls_pass tls_verify +tls_cafile +tls_capath +tls_ciphers +tls_pinned_cert +tls_pinned_pubkey +proxy auto noauto -host -port noautosendcmd");
 
        signal_add("server looking", (SIGNAL_FUNC) sig_server_looking);
        signal_add("server connecting", (SIGNAL_FUNC) sig_server_connecting);
index 017934d9d9599f223c165d6b3ffa5d7c3e015e35..748aae38f8b463ae54b2eef5150bb0253520f31d 100644 (file)
@@ -54,6 +54,7 @@ const char *get_visible_target(IRC_SERVER_REC *server, const char *target)
 /* SYNTAX: SERVER ADD|MODIFY [-4 | -6] [-ssl] [-ssl_cert <cert>] [-ssl_pkey <pkey>] [-ssl_pass <password>]
                              [-ssl_verify] [-ssl_cafile <cafile>] [-ssl_capath <capath>]
                              [-ssl_ciphers <list>]
+                             [-proxy <proxy>]
                              [-auto | -noauto] [-network <network>] [-host <hostname>]
                              [-cmdspeed <ms>] [-cmdmax <count>] [-port <port>]
                              <address> [<port> [<password>]] */
@@ -127,7 +128,6 @@ static void cmd_server_list(const char *data)
                                g_string_append_printf(str, "tls_pinned_cert: %s, ", rec->tls_pinned_cert);
                        if (rec->tls_pinned_pubkey)
                                g_string_append_printf(str, "tls_pinned_pubkey: %s, ", rec->tls_pinned_pubkey);
-
                }
                if (rec->max_cmds_at_once > 0)
                        g_string_append_printf(str, "cmdmax: %d, ", rec->max_cmds_at_once);
@@ -137,6 +137,8 @@ static void cmd_server_list(const char *data)
                        g_string_append_printf(str, "querychans: %d, ", rec->max_query_chans);
                if (rec->own_host != NULL)
                        g_string_append_printf(str, "host: %s, ", rec->own_host);
+               if (rec->proxy)
+                       g_string_append_printf(str, "proxy: %s, ", rec->proxy);
 
                if (str->len > 1) g_string_truncate(str, str->len-2);
                printformat(NULL, NULL, MSGLEVEL_CLIENTCRAP, IRCTXT_SETUPSERVER_LINE,