diff options
Diffstat (limited to 'socket.c')
-rw-r--r-- | socket.c | 111 |
1 files changed, 11 insertions, 100 deletions
@@ -403,77 +403,6 @@ link_socket_update_buffer_sizes (struct link_socket *ls, int rcvbuf, int sndbuf) } /* - * Remote list code allows clients to specify a list of - * potential remote server addresses. - */ - -static void -remote_list_next (struct remote_list *l) -{ - if (l) - { - if (l->no_advance && l->current >= 0) - { - l->no_advance = false; - } - else - { - int i; - if (++l->current >= l->len) - l->current = 0; - - dmsg (D_REMOTE_LIST, "REMOTE_LIST len=%d current=%d", - l->len, l->current); - for (i = 0; i < l->len; ++i) - { - dmsg (D_REMOTE_LIST, "[%d] %s:%d", - i, - l->array[i].hostname, - l->array[i].port); - } - } - } -} - -void -remote_list_randomize (struct remote_list *l) -{ - int i; - if (l) - { - for (i = 0; i < l->len; ++i) - { - const int j = get_random () % l->len; - if (i != j) - { - struct remote_entry tmp; - tmp = l->array[i]; - l->array[i] = l->array[j]; - l->array[j] = tmp; - } - } - } -} - -static const char * -remote_list_host (const struct remote_list *rl) -{ - if (rl) - return rl->array[rl->current].hostname; - else - return NULL; -} - -static int -remote_list_port (const struct remote_list *rl) -{ - if (rl) - return rl->array[rl->current].port; - else - return 0; -} - -/* * SOCKET INITALIZATION CODE. * Create a TCP/UDP socket */ @@ -813,7 +742,7 @@ socket_connect (socket_descriptor_t *sd, struct openvpn_sockaddr *local, bool bind_local, struct openvpn_sockaddr *remote, - struct remote_list *remote_list, + const bool connection_profiles_defined, const char *remote_dynamic, bool *remote_changed, const int connect_retry_seconds, @@ -865,7 +794,7 @@ socket_connect (socket_descriptor_t *sd, openvpn_close_socket (*sd); *sd = SOCKET_UNDEFINED; - if (connect_retry_max > 0 && ++retry >= connect_retry_max) + if ((connect_retry_max > 0 && ++retry >= connect_retry_max) || connection_profiles_defined) { *signal_received = SIGUSR1; goto done; @@ -877,14 +806,6 @@ socket_connect (socket_descriptor_t *sd, if (*signal_received) goto done; - if (remote_list) - { - remote_list_next (remote_list); - remote_dynamic = remote_list_host (remote_list); - remote->sa.sin_port = htons (remote_list_port (remote_list)); - *remote_changed = true; - } - *sd = create_socket_tcp (); if (bind_local) socket_bind (*sd, local, "TCP Client"); @@ -996,7 +917,7 @@ resolve_remote (struct link_socket *sock, int retry = 0; bool status = false; - if (remote_list_len (sock->remote_list) > 1 && sock->resolve_retry_seconds == RESOLV_RETRY_INFINITE) + if (sock->connection_profiles_defined && sock->resolve_retry_seconds == RESOLV_RETRY_INFINITE) { if (phase == 2) flags |= (GETADDR_TRY_ONCE | GETADDR_FATAL); @@ -1099,9 +1020,11 @@ link_socket_new (void) /* bind socket if necessary */ void link_socket_init_phase1 (struct link_socket *sock, + const bool connection_profiles_defined, const char *local_host, - struct remote_list *remote_list, int local_port, + const char *remote_host, + int remote_port, int proto, int mode, const struct link_socket *accept_from, @@ -1129,18 +1052,14 @@ link_socket_init_phase1 (struct link_socket *sock, int sndbuf, unsigned int sockflags) { - const char *remote_host; - int remote_port; - ASSERT (sock); - sock->remote_list = remote_list; - remote_list_next (remote_list); - remote_host = remote_list_host (remote_list); - remote_port = remote_list_port (remote_list); + sock->connection_profiles_defined = connection_profiles_defined; sock->local_host = local_host; sock->local_port = local_port; + sock->remote_host = remote_host; + sock->remote_port = remote_port; #ifdef ENABLE_HTTP_PROXY sock->http_proxy = http_proxy; @@ -1198,10 +1117,6 @@ link_socket_init_phase1 (struct link_socket *sock, /* the OpenVPN server we will use the proxy to connect to */ sock->proxy_dest_host = remote_host; sock->proxy_dest_port = remote_port; - - /* this is needed so that connection retries will go to the proxy server, - not the remote OpenVPN address */ - sock->remote_list = NULL; } #endif #ifdef ENABLE_SOCKS @@ -1218,10 +1133,6 @@ link_socket_init_phase1 (struct link_socket *sock, /* the OpenVPN server we will use the proxy to connect to */ sock->proxy_dest_host = remote_host; sock->proxy_dest_port = remote_port; - - /* this is needed so that connection retries will go to the proxy server, - not the remote OpenVPN address */ - sock->remote_list = NULL; } #endif else @@ -1357,7 +1268,7 @@ link_socket_init_phase2 (struct link_socket *sock, &sock->info.lsa->local, sock->bind_local, &sock->info.lsa->actual.dest, - sock->remote_list, + sock->connection_profiles_defined, remote_dynamic, &remote_changed, sock->connect_retry_seconds, @@ -1405,7 +1316,7 @@ link_socket_init_phase2 (struct link_socket *sock, &sock->info.lsa->local, sock->bind_local, &sock->info.lsa->actual.dest, - NULL, + sock->connection_profiles_defined, remote_dynamic, &remote_changed, sock->connect_retry_seconds, |