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)