mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Turn select() usage in tor-fw-helper into a function.
This commit is contained in:
parent
a6dc00fa75
commit
1779fee27a
@ -80,6 +80,29 @@ tor_natpmp_cleanup(tor_fw_options_t *tor_fw_options, void *backend_state)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Use select() to wait until we can read on fd. */
|
||||||
|
static int
|
||||||
|
wait_until_fd_readable(int fd, struct timeval *timeout)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
fd_set fds;
|
||||||
|
if (fd >= FD_SETSIZE) {
|
||||||
|
fprintf(stderr, "E: NAT-PMP FD_SETSIZE error %d\n", fd);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
FD_ZERO(&fds);
|
||||||
|
FD_SET(fd, &fds);
|
||||||
|
r = select(fd+1, &fds, NULL, NULL, timeout);
|
||||||
|
if (r == -1) {
|
||||||
|
fprintf(stdout, "V: select failed in wait_until_fd_readable: %s\n",
|
||||||
|
strerror(errno));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* XXXX we should really check to see whether fd was readable, or we timed
|
||||||
|
out. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/** Add a TCP port mapping for a single port stored in <b>tor_fw_options</b>
|
/** Add a TCP port mapping for a single port stored in <b>tor_fw_options</b>
|
||||||
* using the <b>natpmp_t</b> stored in <b>backend_state</b>. */
|
* using the <b>natpmp_t</b> stored in <b>backend_state</b>. */
|
||||||
int
|
int
|
||||||
@ -91,7 +114,6 @@ tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
|
|||||||
int x = 0;
|
int x = 0;
|
||||||
int sav_errno;
|
int sav_errno;
|
||||||
|
|
||||||
fd_set fds;
|
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
|
|
||||||
if (tor_fw_options->verbose)
|
if (tor_fw_options->verbose)
|
||||||
@ -105,16 +127,10 @@ tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
|
|||||||
"returned %d (%s)\n", r, r==12?"SUCCESS":"FAILED");
|
"returned %d (%s)\n", r, r==12?"SUCCESS":"FAILED");
|
||||||
|
|
||||||
do {
|
do {
|
||||||
FD_ZERO(&fds);
|
|
||||||
FD_SET(state->natpmp.s, &fds);
|
|
||||||
getnatpmprequesttimeout(&(state->natpmp), &timeout);
|
getnatpmprequesttimeout(&(state->natpmp), &timeout);
|
||||||
x = select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
|
x = wait_until_fd_readable(state->natpmp.s, &timeout);
|
||||||
if (x == -1)
|
if (x == -1)
|
||||||
{
|
return -1;
|
||||||
fprintf(stdout, "V: select failed in "
|
|
||||||
"tor_natpmp_fetch_public_ip.\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tor_fw_options->verbose)
|
if (tor_fw_options->verbose)
|
||||||
fprintf(stdout, "V: attempting to readnatpmpreponseorretry...\n");
|
fprintf(stdout, "V: attempting to readnatpmpreponseorretry...\n");
|
||||||
@ -166,30 +182,17 @@ tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
|
|||||||
natpmp_state_t *state = (natpmp_state_t *) backend_state;
|
natpmp_state_t *state = (natpmp_state_t *) backend_state;
|
||||||
|
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
fd_set fds;
|
|
||||||
|
|
||||||
r = sendpublicaddressrequest(&(state->natpmp));
|
r = sendpublicaddressrequest(&(state->natpmp));
|
||||||
fprintf(stdout, "tor-fw-helper: NAT-PMP sendpublicaddressrequest returned"
|
fprintf(stdout, "tor-fw-helper: NAT-PMP sendpublicaddressrequest returned"
|
||||||
" %d (%s)\n", r, r==2?"SUCCESS":"FAILED");
|
" %d (%s)\n", r, r==2?"SUCCESS":"FAILED");
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
if (state->natpmp.s >= FD_SETSIZE)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "E: NAT-PMP FD_SETSIZE error %d\n",
|
|
||||||
state->natpmp.s);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
FD_ZERO(&fds);
|
|
||||||
FD_SET(state->natpmp.s, &fds);
|
|
||||||
getnatpmprequesttimeout(&(state->natpmp), &timeout);
|
getnatpmprequesttimeout(&(state->natpmp), &timeout);
|
||||||
x = select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
|
|
||||||
|
x = wait_until_fd_readable(state->natpmp.s, &timeout);
|
||||||
if (x == -1)
|
if (x == -1)
|
||||||
{
|
return -1;
|
||||||
fprintf(stdout, "V: select failed in "
|
|
||||||
"tor_natpmp_fetch_public_ip.\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tor_fw_options->verbose)
|
if (tor_fw_options->verbose)
|
||||||
fprintf(stdout, "V: NAT-PMP attempting to read reponse...\n");
|
fprintf(stdout, "V: NAT-PMP attempting to read reponse...\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user