]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
https_getsock: provided for schannel backend as well
authorChristian Hägele <haegele@teamviewer.com>
Mon, 9 Jul 2012 11:54:13 +0000 (13:54 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 9 Jul 2012 11:55:23 +0000 (13:55 +0200)
The function https_getsock was only implemented properly when USE_SSLEAY
or USE_GNUTLS is defined, but it is also necessary for USE_SCHANNEL.

The problem occurs when Curl_read_plain or Curl_write_plain returns
CURLE_AGAIN. In that case CURL_OK is returned to the multi-interface an
the used socket is set to state CURL_POLL_REMOVE and the easy-state is
set to CURLM_STATE_PROTOCONNECT. This is fine, because later the socket
should be set to CURL_POLL_IN or CURL_POLL_OUT via multi_getsock. That's
where https_getsock is called and doesn't return any sockets.

lib/http.c

index 4298b213a9601cbdb44dae882082d085b642c0b7..7b0dc38d2075418680c126904ea26ae625b1a9e8 100644 (file)
@@ -1371,9 +1371,9 @@ static CURLcode https_connecting(struct connectdata *conn, bool *done)
 }
 #endif
 
-#if defined(USE_SSLEAY) || defined(USE_GNUTLS)
-/* This function is for OpenSSL and GnuTLS only. It should be made to query
-   the generic SSL layer instead. */
+#if defined(USE_SSLEAY) || defined(USE_GNUTLS) || defined(USE_SCHANNEL)
+/* This function is for OpenSSL, GnuTLS and schannel only. It should be
+   made to query the generic SSL layer instead. */
 static int https_getsock(struct connectdata *conn,
                          curl_socket_t *socks,
                          int numsocks)
@@ -1409,7 +1409,7 @@ static int https_getsock(struct connectdata *conn,
   return GETSOCK_BLANK;
 }
 #endif /* USE_SSL */
-#endif /* USE_SSLEAY || USE_GNUTLS */
+#endif /* USE_SSLEAY || USE_GNUTLS || USE_SCHANNEL */
 
 /*
  * Curl_http_done() gets called from Curl_done() after a single HTTP request