mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Merge branch 'bug1983-port-tor-fw-helper-to-windows' into bug2046
Conflicts: configure.in src/tools/tor-fw-helper/Makefile.am src/tools/tor-fw-helper/tor-fw-helper-upnp.c src/tools/tor-fw-helper/tor-fw-helper.c
This commit is contained in:
commit
6443a756df
5
changes/bug3752
Normal file
5
changes/bug3752
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
o Major bugfixes:
|
||||||
|
- The IOCP backend now works even when the user has not specified
|
||||||
|
the (internal, debbuging-only) _UseFilteringSSLBufferevents option.
|
||||||
|
Fixes part of bug 3752; bugfix on 0.2.3.1-alpha.
|
||||||
|
|
@ -325,6 +325,7 @@ dnl Where do you live, libevent? And how do we call you?
|
|||||||
|
|
||||||
if test "$bwin32" = true; then
|
if test "$bwin32" = true; then
|
||||||
TOR_LIB_WS32=-lws2_32
|
TOR_LIB_WS32=-lws2_32
|
||||||
|
TOR_LIB_IPHLPAPI=-liphlpapi
|
||||||
# Some of the cargo-cults recommend -lwsock32 as well, but I don't
|
# Some of the cargo-cults recommend -lwsock32 as well, but I don't
|
||||||
# think it's actually necessary.
|
# think it's actually necessary.
|
||||||
TOR_LIB_GDI=-lgdi32
|
TOR_LIB_GDI=-lgdi32
|
||||||
@ -334,6 +335,7 @@ else
|
|||||||
fi
|
fi
|
||||||
AC_SUBST(TOR_LIB_WS32)
|
AC_SUBST(TOR_LIB_WS32)
|
||||||
AC_SUBST(TOR_LIB_GDI)
|
AC_SUBST(TOR_LIB_GDI)
|
||||||
|
AC_SUBST(TOR_LIB_IPHLPAPI)
|
||||||
|
|
||||||
dnl We need to do this before we try our disgusting hack below.
|
dnl We need to do this before we try our disgusting hack below.
|
||||||
AC_CHECK_HEADERS([sys/types.h])
|
AC_CHECK_HEADERS([sys/types.h])
|
||||||
@ -559,7 +561,7 @@ dnl There are no packages for Debian or Redhat as of this patch
|
|||||||
|
|
||||||
if test "$upnp" = "true"; then
|
if test "$upnp" = "true"; then
|
||||||
AC_DEFINE(MINIUPNPC, 1, [Define to 1 if we are building with UPnP.])
|
AC_DEFINE(MINIUPNPC, 1, [Define to 1 if we are building with UPnP.])
|
||||||
TOR_SEARCH_LIBRARY(libminiupnpc, $trylibminiupnpcdir, [-lminiupnpc -lws2_32 -liphlpapi],
|
TOR_SEARCH_LIBRARY(libminiupnpc, $trylibminiupnpcdir, [-lminiupnpc $TOR_LIB_WS32 $TOR_LIB_IPHLPAPI],
|
||||||
[#include <miniupnpc/miniwget.h>
|
[#include <miniupnpc/miniwget.h>
|
||||||
#include <miniupnpc/miniupnpc.h>
|
#include <miniupnpc/miniupnpc.h>
|
||||||
#include <miniupnpc/upnpcommands.h>],
|
#include <miniupnpc/upnpcommands.h>],
|
||||||
|
@ -164,6 +164,16 @@ struct event_base *the_event_base = NULL;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_BUFFEREVENTS
|
||||||
|
static int using_iocp_bufferevents = 0;
|
||||||
|
|
||||||
|
int
|
||||||
|
tor_libevent_using_iocp_bufferevents(void)
|
||||||
|
{
|
||||||
|
return using_iocp_bufferevents;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/** Initialize the Libevent library and set up the event base. */
|
/** Initialize the Libevent library and set up the event base. */
|
||||||
void
|
void
|
||||||
tor_libevent_initialize(tor_libevent_cfg *torcfg)
|
tor_libevent_initialize(tor_libevent_cfg *torcfg)
|
||||||
@ -187,6 +197,7 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
|
|||||||
if (! torcfg->disable_iocp) {
|
if (! torcfg->disable_iocp) {
|
||||||
evthread_use_windows_threads();
|
evthread_use_windows_threads();
|
||||||
event_config_set_flag(cfg, EVENT_BASE_FLAG_STARTUP_IOCP);
|
event_config_set_flag(cfg, EVENT_BASE_FLAG_STARTUP_IOCP);
|
||||||
|
using_iocp_bufferevents = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -73,6 +73,7 @@ const char *tor_libevent_get_version_str(void);
|
|||||||
#ifdef USE_BUFFEREVENTS
|
#ifdef USE_BUFFEREVENTS
|
||||||
#define TOR_LIBEVENT_TICKS_PER_SECOND 3
|
#define TOR_LIBEVENT_TICKS_PER_SECOND 3
|
||||||
const struct timeval *tor_libevent_get_one_tick_timeout(void);
|
const struct timeval *tor_libevent_get_one_tick_timeout(void);
|
||||||
|
int tor_libevent_using_iocp_bufferevents(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1892,7 +1892,7 @@ tor_tls_init_bufferevent(tor_tls_t *tls, struct bufferevent *bufev_in,
|
|||||||
const enum bufferevent_ssl_state state = receiving ?
|
const enum bufferevent_ssl_state state = receiving ?
|
||||||
BUFFEREVENT_SSL_ACCEPTING : BUFFEREVENT_SSL_CONNECTING;
|
BUFFEREVENT_SSL_ACCEPTING : BUFFEREVENT_SSL_CONNECTING;
|
||||||
|
|
||||||
if (filter) {
|
if (filter || tor_libevent_using_iocp_bufferevents()) {
|
||||||
/* Grab an extra reference to the SSL, since BEV_OPT_CLOSE_ON_FREE
|
/* Grab an extra reference to the SSL, since BEV_OPT_CLOSE_ON_FREE
|
||||||
means that the SSL will get freed too.
|
means that the SSL will get freed too.
|
||||||
|
|
||||||
|
@ -1054,14 +1054,14 @@ fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out, int linkproto)
|
|||||||
#ifdef USE_BUFFEREVENTS
|
#ifdef USE_BUFFEREVENTS
|
||||||
/** Try to read <b>n</b> bytes from <b>buf</b> at <b>pos</b> (which may be
|
/** Try to read <b>n</b> bytes from <b>buf</b> at <b>pos</b> (which may be
|
||||||
* NULL for the start of the buffer), copying the data only if necessary. Set
|
* NULL for the start of the buffer), copying the data only if necessary. Set
|
||||||
* *<b>data_out</b> to a pointer to the desired bytes. Set <b>free_out</b> to 1
|
* *<b>data_out</b> to a pointer to the desired bytes. Set <b>free_out</b>
|
||||||
* if we needed to malloc *<b>data</b> because the original bytes were
|
* to 1 if we needed to malloc *<b>data</b> because the original bytes were
|
||||||
* noncontiguous; 0 otherwise. Return the number of bytes actually available
|
* noncontiguous; 0 otherwise. Return the number of bytes actually available
|
||||||
* at *<b>data_out</b>.
|
* at *<b>data_out</b>.
|
||||||
*/
|
*/
|
||||||
static ssize_t
|
static ssize_t
|
||||||
inspect_evbuffer(struct evbuffer *buf, char **data_out, size_t n, int *free_out,
|
inspect_evbuffer(struct evbuffer *buf, char **data_out, size_t n,
|
||||||
struct evbuffer_ptr *pos)
|
int *free_out, struct evbuffer_ptr *pos)
|
||||||
{
|
{
|
||||||
int n_vecs, i;
|
int n_vecs, i;
|
||||||
|
|
||||||
@ -1657,9 +1657,9 @@ fetch_from_evbuffer_socks(struct evbuffer *buf, socks_request_t *req,
|
|||||||
|
|
||||||
if (res == 0 && n_drain == 0 && want_length <= last_wanted) {
|
if (res == 0 && n_drain == 0 && want_length <= last_wanted) {
|
||||||
/* If we drained nothing, and we didn't ask for more than last time,
|
/* If we drained nothing, and we didn't ask for more than last time,
|
||||||
* we're stuck in a loop. That's bad. It shouldn't be possible, but
|
* then we probably wanted more data than the buffer actually had,
|
||||||
* let's make sure. */
|
* and we're finding out that we're not satisified with it. It's
|
||||||
log_warn(LD_BUG, "We seem to be caught in a parse loop; breaking out");
|
* time to break until we have more data. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4166,3 +4166,4 @@ connection_free_all(void)
|
|||||||
bufferevent_rate_limit_group_free(global_rate_limit);
|
bufferevent_rate_limit_group_free(global_rate_limit);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ endif
|
|||||||
|
|
||||||
if MINIUPNPC
|
if MINIUPNPC
|
||||||
miniupnpc_ldflags = @TOR_LDFLAGS_libminiupnpc@
|
miniupnpc_ldflags = @TOR_LDFLAGS_libminiupnpc@
|
||||||
miniupnpc_ldadd = -lminiupnpc -lm -liphlpapi
|
miniupnpc_ldadd = -lminiupnpc -lm @TOR_LIB_IPHLPAPI@
|
||||||
miniupnpc_cppflags = @TOR_CPPFLAGS_libminiupnpc@
|
miniupnpc_cppflags = @TOR_CPPFLAGS_libminiupnpc@
|
||||||
else
|
else
|
||||||
miniupnpc_ldflags =
|
miniupnpc_ldflags =
|
||||||
|
@ -9,7 +9,9 @@
|
|||||||
|
|
||||||
#include "orconfig.h"
|
#include "orconfig.h"
|
||||||
#ifdef MINIUPNPC
|
#ifdef MINIUPNPC
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
#define STATICLIB
|
#define STATICLIB
|
||||||
|
#endif
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -236,7 +236,8 @@ network_init(void)
|
|||||||
int r;
|
int r;
|
||||||
r = WSAStartup(0x101, &WSAData);
|
r = WSAStartup(0x101, &WSAData);
|
||||||
if (r) {
|
if (r) {
|
||||||
fprintf(stderr, "E: Error initializing Windows network layer - code was %d", r);
|
fprintf(stderr, "E: Error initializing Windows network layer "
|
||||||
|
"- code was %d", r);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* WSAData.iMaxSockets might show the max sockets we're allowed to use.
|
/* WSAData.iMaxSockets might show the max sockets we're allowed to use.
|
||||||
@ -256,6 +257,7 @@ main(int argc, char **argv)
|
|||||||
backends_t backend_state;
|
backends_t backend_state;
|
||||||
|
|
||||||
memset(&tor_fw_options, 0, sizeof(tor_fw_options));
|
memset(&tor_fw_options, 0, sizeof(tor_fw_options));
|
||||||
|
memset(&backend_state, 0, sizeof(backend_state));
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
int option_index = 0;
|
int option_index = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user