summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/server-connect-rec.h2
-rw-r--r--src/core/servers-reconnect.c1
-rw-r--r--src/core/servers-setup.c2
-rw-r--r--src/core/servers.c1
-rw-r--r--src/irc/core/irc-servers.c9
5 files changed, 13 insertions, 2 deletions
diff --git a/src/core/server-connect-rec.h b/src/core/server-connect-rec.h
index 4aeba819..a59880e4 100644
--- a/src/core/server-connect-rec.h
+++ b/src/core/server-connect-rec.h
@@ -8,7 +8,7 @@ int refcount;
/* if we're connecting via proxy, or just NULLs */
char *proxy;
int proxy_port;
-char *proxy_string, *proxy_password;
+char *proxy_string, *proxy_string_after, *proxy_password;
unsigned short family; /* 0 = don't care, AF_INET or AF_INET6 */
char *tag; /* try to keep this tag when connected to server */
diff --git a/src/core/servers-reconnect.c b/src/core/servers-reconnect.c
index 8b59d06d..429ffc43 100644
--- a/src/core/servers-reconnect.c
+++ b/src/core/servers-reconnect.c
@@ -140,6 +140,7 @@ server_connect_copy_skeleton(SERVER_CONNECT_REC *src, int connect_info)
dest->proxy = g_strdup(src->proxy);
dest->proxy_port = src->proxy_port;
dest->proxy_string = g_strdup(src->proxy_string);
+ dest->proxy_string_after = g_strdup(src->proxy_string_after);
dest->proxy_password = g_strdup(src->proxy_password);
dest->tag = g_strdup(src->tag);
diff --git a/src/core/servers-setup.c b/src/core/servers-setup.c
index c1db7d1c..3f500a07 100644
--- a/src/core/servers-setup.c
+++ b/src/core/servers-setup.c
@@ -131,6 +131,7 @@ static void server_setup_fill(SERVER_CONNECT_REC *conn,
conn->proxy = g_strdup(settings_get_str("proxy_address"));
conn->proxy_port = settings_get_int("proxy_port");
conn->proxy_string = g_strdup(settings_get_str("proxy_string"));
+ conn->proxy_string_after = g_strdup(settings_get_str("proxy_string_after"));
conn->proxy_password = g_strdup(settings_get_str("proxy_password"));
}
@@ -515,6 +516,7 @@ void servers_setup_init(void)
settings_add_str("proxy", "proxy_address", "");
settings_add_int("proxy", "proxy_port", 6667);
settings_add_str("proxy", "proxy_string", "CONNECT %s %d");
+ settings_add_str("proxy", "proxy_string_after", "");
settings_add_str("proxy", "proxy_password", "");
setupservers = NULL;
diff --git a/src/core/servers.c b/src/core/servers.c
index 89f32aea..d31f64ad 100644
--- a/src/core/servers.c
+++ b/src/core/servers.c
@@ -467,6 +467,7 @@ void server_connect_unref(SERVER_CONNECT_REC *conn)
g_free_not_null(conn->proxy);
g_free_not_null(conn->proxy_string);
+ g_free_not_null(conn->proxy_string_after);
g_free_not_null(conn->proxy_password);
g_free_not_null(conn->tag);
diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c
index fe3e5fcc..4da561eb 100644
--- a/src/irc/core/irc-servers.c
+++ b/src/irc/core/irc-servers.c
@@ -144,12 +144,19 @@ static void server_init(IRC_SERVER_REC *server)
username = g_strdup(conn->username);
ptr = strchr(username, ' ');
if (ptr != NULL) *ptr = '\0';
-
+
irc_send_cmdv(server, "USER %s %s %s :%s", username, hostname,
address, conn->realname);
g_free(username);
server->cmdcount = 0;
+
+ if (conn->proxy_string_after != NULL) {
+ irc_send_cmdv(server, conn->proxy_string_after,
+ conn->address, conn->port);
+ }
+
+ server->cmdcount = 0;
}
IRC_SERVER_REC *irc_server_connect(IRC_SERVER_CONNECT_REC *conn)