diff --git a/src/core/servers-reconnect.c b/src/core/servers-reconnect.c index 97175f78..2cbe60b4 100644 --- a/src/core/servers-reconnect.c +++ b/src/core/servers-reconnect.c @@ -151,10 +151,6 @@ static int server_reconnect_timeout(void) static void sserver_connect(SERVER_SETUP_REC *rec, SERVER_CONNECT_REC *conn) { - conn->family = rec->family; - conn->address = g_strdup(rec->address); - if (conn->port == 0) conn->port = rec->port; - server_setup_fill_reconn(conn, rec); server_reconnect_add(conn, rec->last_connect+reconnect_time); server_connect_unref(conn); @@ -181,10 +177,20 @@ server_connect_copy_skeleton(SERVER_CONNECT_REC *src, int connect_info) dest->tag = g_strdup(src->tag); if (connect_info) { - dest->family = src->family; + dest->family = src->family; dest->address = g_strdup(src->address); dest->port = src->port; dest->password = g_strdup(src->password); + + dest->use_tls = src->use_tls; + dest->tls_cert = g_strdup(src->tls_cert); + dest->tls_pkey = g_strdup(src->tls_pkey); + dest->tls_verify = src->tls_verify; + dest->tls_cafile = g_strdup(src->tls_cafile); + dest->tls_capath = g_strdup(src->tls_capath); + dest->tls_ciphers = g_strdup(src->tls_ciphers); + dest->tls_pinned_cert = g_strdup(src->tls_pinned_cert); + dest->tls_pinned_pubkey = g_strdup(src->tls_pinned_pubkey); } dest->chatnet = g_strdup(src->chatnet); @@ -207,16 +213,6 @@ server_connect_copy_skeleton(SERVER_CONNECT_REC *src, int connect_info) dest->no_autosendcmd = src->no_autosendcmd; dest->unix_socket = src->unix_socket; - dest->use_tls = src->use_tls; - dest->tls_cert = g_strdup(src->tls_cert); - dest->tls_pkey = g_strdup(src->tls_pkey); - dest->tls_verify = src->tls_verify; - dest->tls_cafile = g_strdup(src->tls_cafile); - dest->tls_capath = g_strdup(src->tls_capath); - dest->tls_ciphers = g_strdup(src->tls_ciphers); - dest->tls_pinned_cert = g_strdup(src->tls_pinned_cert); - dest->tls_pinned_pubkey = g_strdup(src->tls_pinned_pubkey); - return dest; } @@ -293,7 +289,7 @@ static void sig_reconnect(SERVER_REC *server) (!rec->last_connect || !rec->last_failed || rec->last_connect < now-FAILED_RECONNECT_WAIT)) { if (rec == sserver) - conn->port = server->connrec->port; + conn->port = server->connrec->port; sserver_connect(rec, conn); return; } diff --git a/src/core/servers-setup.c b/src/core/servers-setup.c index a505df5b..8662b30c 100644 --- a/src/core/servers-setup.c +++ b/src/core/servers-setup.c @@ -108,6 +108,35 @@ void server_setup_fill_reconn(SERVER_CONNECT_REC *conn, if (sserver->password != NULL && conn->password == NULL) conn->password = g_strdup(sserver->password); + if (sserver->no_proxy) + g_free_and_null(conn->proxy); + + if (sserver->family != 0 && conn->family == 0) + conn->family = sserver->family; + if (sserver->address && !conn->address) + conn->address = g_strdup(sserver->address); + if (sserver->port > 0 && conn->port <= 0) + conn->port = sserver->port; + + conn->use_tls = sserver->use_tls; + if (conn->tls_cert == NULL && sserver->tls_cert != NULL && sserver->tls_cert[0] != '\0') + conn->tls_cert = g_strdup(sserver->tls_cert); + if (conn->tls_pkey == NULL && sserver->tls_pkey != NULL && sserver->tls_pkey[0] != '\0') + conn->tls_pkey = g_strdup(sserver->tls_pkey); + if (conn->tls_pass == NULL && sserver->tls_pass != NULL && sserver->tls_pass[0] != '\0') + conn->tls_pass = g_strdup(sserver->tls_pass); + conn->tls_verify = sserver->tls_verify; + if (conn->tls_cafile == NULL && sserver->tls_cafile != NULL && sserver->tls_cafile[0] != '\0') + conn->tls_cafile = g_strdup(sserver->tls_cafile); + if (conn->tls_capath == NULL && sserver->tls_capath != NULL && sserver->tls_capath[0] != '\0') + conn->tls_capath = g_strdup(sserver->tls_capath); + if (conn->tls_ciphers == NULL && sserver->tls_ciphers != NULL && sserver->tls_ciphers[0] != '\0') + conn->tls_ciphers = g_strdup(sserver->tls_ciphers); + if (conn->tls_pinned_cert == NULL && sserver->tls_pinned_cert != NULL && sserver->tls_pinned_cert[0] != '\0') + 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); + signal_emit("server setup fill reconn", 2, conn, sserver); } @@ -159,33 +188,6 @@ static void server_setup_fill_server(SERVER_CONNECT_REC *conn, sserver->last_connect = time(NULL); - if (sserver->no_proxy) - g_free_and_null(conn->proxy); - - if (sserver->family != 0 && conn->family == 0) - conn->family = sserver->family; - if (sserver->port > 0 && conn->port <= 0) - conn->port = sserver->port; - - conn->use_tls = sserver->use_tls; - if (conn->tls_cert == NULL && sserver->tls_cert != NULL && sserver->tls_cert[0] != '\0') - conn->tls_cert = g_strdup(sserver->tls_cert); - if (conn->tls_pkey == NULL && sserver->tls_pkey != NULL && sserver->tls_pkey[0] != '\0') - conn->tls_pkey = g_strdup(sserver->tls_pkey); - if (conn->tls_pass == NULL && sserver->tls_pass != NULL && sserver->tls_pass[0] != '\0') - conn->tls_pass = g_strdup(sserver->tls_pass); - conn->tls_verify = sserver->tls_verify; - if (conn->tls_cafile == NULL && sserver->tls_cafile != NULL && sserver->tls_cafile[0] != '\0') - conn->tls_cafile = g_strdup(sserver->tls_cafile); - if (conn->tls_capath == NULL && sserver->tls_capath != NULL && sserver->tls_capath[0] != '\0') - conn->tls_capath = g_strdup(sserver->tls_capath); - if (conn->tls_ciphers == NULL && sserver->tls_ciphers != NULL && sserver->tls_ciphers[0] != '\0') - conn->tls_ciphers = g_strdup(sserver->tls_ciphers); - if (conn->tls_pinned_cert == NULL && sserver->tls_pinned_cert != NULL && sserver->tls_pinned_cert[0] != '\0') - 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); - server_setup_fill_reconn(conn, sserver); signal_emit("server setup fill server", 2, conn, sserver);