summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2015-11-21 13:13:52 +0100
committerWerner Koch <wk@gnupg.org>2015-11-21 13:13:52 +0100
commit5b927b3dcffa2918e6b503c4907923aadbad0865 (patch)
tree60db2017bc33241a3960091070f819dc567b970e /src
parentcef28d96debcf94003f94f3ea2181e80aff0b665 (diff)
downloadlibassuan-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.c10
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. */