#include "fdmisc.h"
#include "misc.h"
#include "proxy.h"
+#include "forward.h"
#include "memdbg.h"
static bool
socks_username_password_auth(struct socks_proxy_info *p,
socket_descriptor_t sd,
+ struct event_timeout *server_poll_timeout,
volatile int *signal_received)
{
char to_send[516];
char buf[2];
int len = 0;
- const int timeout_sec = 5;
struct user_pass creds;
ssize_t size;
bool ret = false;
FD_ZERO(&reads);
openvpn_fd_set(sd, &reads);
- tv.tv_sec = timeout_sec;
+ tv.tv_sec = get_server_poll_remaining_time(server_poll_timeout);
tv.tv_usec = 0;
status = select(sd + 1, &reads, NULL, NULL, &tv);
static bool
socks_handshake(struct socks_proxy_info *p,
socket_descriptor_t sd,
+ struct event_timeout *server_poll_timeout,
volatile int *signal_received)
{
char buf[2];
int len = 0;
- const int timeout_sec = 5;
ssize_t size;
/* VER = 5, NMETHODS = 1, METHODS = [0 (no auth)] */
FD_ZERO(&reads);
openvpn_fd_set(sd, &reads);
- tv.tv_sec = timeout_sec;
+ tv.tv_sec = get_server_poll_remaining_time(server_poll_timeout);
tv.tv_usec = 0;
status = select(sd + 1, &reads, NULL, NULL, &tv);
return false;
}
- if (!socks_username_password_auth(p, sd, signal_received))
+ if (!socks_username_password_auth(p, sd, server_poll_timeout, signal_received))
{
return false;
}
static bool
recv_socks_reply(socket_descriptor_t sd,
struct openvpn_sockaddr *addr,
+ struct event_timeout *server_poll_timeout,
volatile int *signal_received)
{
char atyp = '\0';
int alen = 0;
int len = 0;
char buf[270]; /* 4 + alen(max 256) + 2 */
- const int timeout_sec = 5;
if (addr != NULL)
{
FD_ZERO(&reads);
openvpn_fd_set(sd, &reads);
- tv.tv_sec = timeout_sec;
+ tv.tv_sec = get_server_poll_remaining_time(server_poll_timeout);
tv.tv_usec = 0;
status = select(sd + 1, &reads, NULL, NULL, &tv);
socket_descriptor_t sd, /* already open to proxy */
const char *host, /* openvpn server remote */
const char *servname, /* openvpn server port */
+ struct event_timeout *server_poll_timeout,
struct signal_info *sig_info)
{
char buf[270];
size_t len;
- if (!socks_handshake(p, sd, &sig_info->signal_received))
+ if (!socks_handshake(p, sd, server_poll_timeout, &sig_info->signal_received))
{
goto error;
}
/* receive reply from Socks proxy and discard */
- if (!recv_socks_reply(sd, NULL, &sig_info->signal_received))
+ if (!recv_socks_reply(sd, NULL, server_poll_timeout, &sig_info->signal_received))
{
goto error;
}
socket_descriptor_t ctrl_sd, /* already open to proxy */
socket_descriptor_t udp_sd,
struct openvpn_sockaddr *relay_addr,
+ struct event_timeout *server_poll_timeout,
struct signal_info *sig_info)
{
- if (!socks_handshake(p, ctrl_sd, &sig_info->signal_received))
+ if (!socks_handshake(p, ctrl_sd, server_poll_timeout, &sig_info->signal_received))
{
goto error;
}
/* receive reply from Socks proxy */
CLEAR(*relay_addr);
- if (!recv_socks_reply(ctrl_sd, relay_addr, &sig_info->signal_received))
+ if (!recv_socks_reply(ctrl_sd, relay_addr, server_poll_timeout, &sig_info->signal_received))
{
goto error;
}
socket_descriptor_t sd, /* already open to proxy */
const char *host, /* openvpn server remote */
const char *servname, /* openvpn server port */
+ struct event_timeout *server_poll_timeout,
struct signal_info *sig_info);
void establish_socks_proxy_udpassoc(struct socks_proxy_info *p,
socket_descriptor_t ctrl_sd, /* already open to proxy */
socket_descriptor_t udp_sd,
struct openvpn_sockaddr *relay_addr,
+ struct event_timeout *server_poll_timeout,
struct signal_info *sig_info);
void socks_process_incoming_udp(struct buffer *buf,