summaryrefslogtreecommitdiff
path: root/libs/libcurl/src/socks.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libcurl/src/socks.c')
-rw-r--r--libs/libcurl/src/socks.c78
1 files changed, 26 insertions, 52 deletions
diff --git a/libs/libcurl/src/socks.c b/libs/libcurl/src/socks.c
index 57ad6e1363..cf99ab1f53 100644
--- a/libs/libcurl/src/socks.c
+++ b/libs/libcurl/src/socks.c
@@ -38,10 +38,10 @@
#include "select.h"
#include "cfilters.h"
#include "connect.h"
-#include "timeval.h"
+#include "curlx/timeval.h"
#include "socks.h"
#include "multiif.h" /* for getsock macros */
-#include "inet_pton.h"
+#include "curlx/inet_pton.h"
#include "url.h"
/* The last 3 #include files should be in this order */
@@ -321,16 +321,16 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf,
/* DNS resolve only for SOCKS4, not SOCKS4a */
if(!protocol4a) {
- enum resolve_t rc =
- Curl_resolv(data, sx->hostname, sx->remote_port, TRUE, &dns);
+ result = Curl_resolv(data, sx->hostname, sx->remote_port,
+ cf->conn->ip_version, TRUE, &dns);
- if(rc == CURLRESOLV_ERROR)
- return CURLPX_RESOLVE_HOST;
- else if(rc == CURLRESOLV_PENDING) {
+ if(result == CURLE_AGAIN) {
sxstate(sx, data, CONNECT_RESOLVING);
infof(data, "SOCKS4 non-blocking resolve of %s", sx->hostname);
return CURLPX_OK;
}
+ else if(result)
+ return CURLPX_RESOLVE_HOST;
sxstate(sx, data, CONNECT_RESOLVED);
goto CONNECT_RESOLVED;
}
@@ -341,23 +341,11 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf,
case CONNECT_RESOLVING:
/* check if we have the name resolved by now */
- dns = Curl_fetch_addr(data, sx->hostname, conn->primary.remote_port);
-
- if(dns) {
-#ifdef CURLRES_ASYNCH
- data->state.async.dns = dns;
- data->state.async.done = TRUE;
-#endif
- infof(data, "Hostname '%s' was found", sx->hostname);
- sxstate(sx, data, CONNECT_RESOLVED);
- }
- else {
- result = Curl_resolv_check(data, &dns);
- if(!dns) {
- if(result)
- return CURLPX_RESOLVE_HOST;
- return CURLPX_OK;
- }
+ result = Curl_resolv_check(data, &dns);
+ if(!dns) {
+ if(result)
+ return CURLPX_RESOLVE_HOST;
+ return CURLPX_OK;
}
FALLTHROUGH();
case CONNECT_RESOLVED:
@@ -406,7 +394,7 @@ CONNECT_REQ_INIT:
/*
* This is currently not supporting "Identification Protocol (RFC1413)".
*/
- socksreq[8] = 0; /* ensure empty userid is NUL-terminated */
+ socksreq[8] = 0; /* ensure empty userid is null-terminated */
if(sx->proxy_user) {
size_t plen = strlen(sx->proxy_user);
if(plen > 255) {
@@ -590,7 +578,6 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf,
bool allow_gssapi = FALSE;
struct Curl_dns_entry *dns = NULL;
- DEBUGASSERT(auth & (CURLAUTH_BASIC | CURLAUTH_GSSAPI));
switch(sx->state) {
case CONNECT_SOCKS_INIT:
if(conn->bits.httpproxy)
@@ -795,16 +782,15 @@ CONNECT_AUTH_INIT:
case CONNECT_REQ_INIT:
CONNECT_REQ_INIT:
if(socks5_resolve_local) {
- enum resolve_t rc = Curl_resolv(data, sx->hostname, sx->remote_port,
- TRUE, &dns);
+ result = Curl_resolv(data, sx->hostname, sx->remote_port,
+ cf->conn->ip_version, TRUE, &dns);
- if(rc == CURLRESOLV_ERROR)
- return CURLPX_RESOLVE_HOST;
-
- if(rc == CURLRESOLV_PENDING) {
+ if(result == CURLE_AGAIN) {
sxstate(sx, data, CONNECT_RESOLVING);
return CURLPX_OK;
}
+ else if(result)
+ return CURLPX_RESOLVE_HOST;
sxstate(sx, data, CONNECT_RESOLVED);
goto CONNECT_RESOLVED;
}
@@ -812,23 +798,11 @@ CONNECT_REQ_INIT:
case CONNECT_RESOLVING:
/* check if we have the name resolved by now */
- dns = Curl_fetch_addr(data, sx->hostname, sx->remote_port);
-
- if(dns) {
-#ifdef CURLRES_ASYNCH
- data->state.async.dns = dns;
- data->state.async.done = TRUE;
-#endif
- infof(data, "SOCKS5: hostname '%s' found", sx->hostname);
- }
-
+ result = Curl_resolv_check(data, &dns);
if(!dns) {
- result = Curl_resolv_check(data, &dns);
- if(!dns) {
- if(result)
- return CURLPX_RESOLVE_HOST;
- return CURLPX_OK;
- }
+ if(result)
+ return CURLPX_RESOLVE_HOST;
+ return CURLPX_OK;
}
FALLTHROUGH();
case CONNECT_RESOLVED:
@@ -912,7 +886,7 @@ CONNECT_RESOLVE_REMOTE:
#ifdef USE_IPV6
if(conn->bits.ipv6_ip) {
char ip6[16];
- if(1 != Curl_inet_pton(AF_INET6, sx->hostname, ip6))
+ if(1 != curlx_inet_pton(AF_INET6, sx->hostname, ip6))
return CURLPX_BAD_ADDRESS_TYPE;
socksreq[len++] = 4;
memcpy(&socksreq[len], ip6, sizeof(ip6));
@@ -920,7 +894,7 @@ CONNECT_RESOLVE_REMOTE:
}
else
#endif
- if(1 == Curl_inet_pton(AF_INET, sx->hostname, ip4)) {
+ if(1 == curlx_inet_pton(AF_INET, sx->hostname, ip4)) {
socksreq[len++] = 1;
memcpy(&socksreq[len], ip4, sizeof(ip4));
len += sizeof(ip4);
@@ -1128,7 +1102,7 @@ static void socks_proxy_cf_free(struct Curl_cfilter *cf)
*/
static CURLcode socks_proxy_cf_connect(struct Curl_cfilter *cf,
struct Curl_easy *data,
- bool blocking, bool *done)
+ bool *done)
{
CURLcode result;
struct connectdata *conn = cf->conn;
@@ -1140,7 +1114,7 @@ static CURLcode socks_proxy_cf_connect(struct Curl_cfilter *cf,
return CURLE_OK;
}
- result = cf->next->cft->do_connect(cf->next, data, blocking, done);
+ result = cf->next->cft->do_connect(cf->next, data, done);
if(result || !*done)
return result;