diff options
author | Werner Koch <wk@gnupg.org> | 2015-11-21 13:13:52 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2015-11-21 13:13:52 +0100 |
commit | 5b927b3dcffa2918e6b503c4907923aadbad0865 (patch) | |
tree | 60db2017bc33241a3960091070f819dc567b970e /src | |
parent | cef28d96debcf94003f94f3ea2181e80aff0b665 (diff) | |
download | libassuan-5b927b3dcffa2918e6b503c4907923aadbad0865.tar.gz |
Also try port 9150 in Tor mode.
* src/assuan-socket.c (TOR_PORT2): New.
(_assuan_sock_wsa2errno): Map WSAECONNREFUSED.
(socks5_connect): Fall back to TOR_PORT2.
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/assuan-socket.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/assuan-socket.c b/src/assuan-socket.c index 5ad7299..9f9f155 100644 --- a/src/assuan-socket.c +++ b/src/assuan-socket.c @@ -110,6 +110,7 @@ /* The standard SOCKS and TOR port. */ #define SOCKS_PORT 1080 #define TOR_PORT 9050 +#define TOR_PORT2 9150 /* The Tor browser is listening there. */ /* In the future, we can allow access to sock_ctx, if that context's hook functions need to be overridden. There can only be one global @@ -300,6 +301,8 @@ _assuan_sock_wsa2errno (int err) return EPIPE; case WSANOTINITIALISED: return ENOSYS; + case WSAECONNREFUSED: + return ECONNREFUSED; default: return EIO; } @@ -730,6 +733,13 @@ socks5_connect (assuan_context_t ctx, assuan_fd_t sock, proxyaddr = (struct sockaddr *)&proxyaddr_in; proxyaddrlen = sizeof proxyaddr_in; ret = _assuan_connect (ctx, HANDLE2SOCKET (sock), proxyaddr, proxyaddrlen); + if (ret && socksport == TOR_PORT && errno == ECONNREFUSED) + { + /* Standard Tor port failed - try the Tor browser port. */ + proxyaddr_in.sin_port = htons (TOR_PORT2); + ret = _assuan_connect (ctx, HANDLE2SOCKET (sock), + proxyaddr, proxyaddrlen); + } if (ret) return ret; buffer[0] = 5; /* RFC-1928 VER field. */ |