diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/ftp.c | 4 | ||||
| -rw-r--r-- | lib/http_proxy.c | 22 | ||||
| -rw-r--r-- | lib/http_proxy.h | 5 | 
3 files changed, 19 insertions, 12 deletions
@@ -1887,7 +1887,7 @@ static CURLcode proxy_magic(struct connectdata *conn,      memset(&http_proxy, 0, sizeof(http_proxy));      data->req.protop = &http_proxy; -    result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, newhost, newport); +    result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, newhost, newport, TRUE);      data->req.protop = ftp_save; @@ -3645,7 +3645,7 @@ static CURLcode ftp_do_more(struct connectdata *conn, int *completep)      if(conn->tunnel_state[SECONDARYSOCKET] == TUNNEL_CONNECT) {        /* As we're in TUNNEL_CONNECT state now, we know the proxy name and port           aren't used so we blank their arguments. TODO: make this nicer */ -      result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, NULL, 0); +      result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, NULL, 0, FALSE);        return result;      } diff --git a/lib/http_proxy.c b/lib/http_proxy.c index 5ab9915a6..4373d6284 100644 --- a/lib/http_proxy.c +++ b/lib/http_proxy.c @@ -68,7 +68,7 @@ CURLcode Curl_proxy_connect(struct connectdata *conn)      conn->data->req.protop = &http_proxy;      connkeep(conn, "HTTP proxy CONNECT");      result = Curl_proxyCONNECT(conn, FIRSTSOCKET, -                               conn->host.name, conn->remote_port); +                               conn->host.name, conn->remote_port, FALSE);      conn->data->req.protop = prot_save;      if(CURLE_OK != result)        return result; @@ -85,12 +85,16 @@ CURLcode Curl_proxy_connect(struct connectdata *conn)   * Curl_proxyCONNECT() requires that we're connected to a HTTP proxy. This   * function will issue the necessary commands to get a seamless tunnel through   * this proxy. After that, the socket can be used just as a normal socket. + * + * 'blocking' set to TRUE means that this function will do the entire CONNECT + * + response in a blocking fashion. Should be avoided!   */  CURLcode Curl_proxyCONNECT(struct connectdata *conn,                             int sockindex,                             const char *hostname, -                           int remote_port) +                           int remote_port, +                           bool blocking)  {    int subversion=0;    struct SessionHandle *data=conn->data; @@ -225,12 +229,14 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,        return CURLE_RECV_ERROR;      } -    if(0 == Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, 0)) -      /* return so we'll be called again polling-style */ -      return CURLE_OK; -    else { -      DEBUGF(infof(data, -                   "Read response immediately from proxy CONNECT\n")); +    if(!blocking) { +      if(0 == Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, 0)) +        /* return so we'll be called again polling-style */ +        return CURLE_OK; +      else { +        DEBUGF(infof(data, +               "Read response immediately from proxy CONNECT\n")); +      }      }      /* at this point, the tunnel_connecting phase is over. */ diff --git a/lib/http_proxy.h b/lib/http_proxy.h index 2b5e9c9b4..058a29db9 100644 --- a/lib/http_proxy.h +++ b/lib/http_proxy.h @@ -7,7 +7,7 @@   *                            | (__| |_| |  _ <| |___   *                             \___|\___/|_| \_\_____|   * - * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -26,7 +26,8 @@  /* ftp can use this as well */  CURLcode Curl_proxyCONNECT(struct connectdata *conn,                             int tunnelsocket, -                           const char *hostname, int remote_port); +                           const char *hostname, int remote_port, +                           bool blocking);  /* Default proxy timeout in milliseconds */  #define PROXY_TIMEOUT (3600*1000)  | 
