]> granicus.if.org Git - curl/commitdiff
darwinsssl: add support for TLS False Start
authorNick Zitzmann <nickzman@gmail.com>
Sat, 21 Mar 2015 17:22:56 +0000 (12:22 -0500)
committerNick Zitzmann <nickzman@gmail.com>
Sat, 21 Mar 2015 17:22:56 +0000 (12:22 -0500)
TLS False Start support requires iOS 7.0 or later, or OS X 10.9 or later.

docs/curl.1
docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3
lib/vtls/darwinssl.c
lib/vtls/darwinssl.h

index 2846b693817f038cd3741c582cc54c6adc4563fe..67bf8effcb43a4d76cf8f20880f10a75514c4bce 100644 (file)
@@ -569,7 +569,8 @@ mode where a TLS client will start sending application data before verifying
 the server's Finished message, thus saving a round trip when performing a full
 handshake.
 
-This is currently only implemented in the NSS backend.
+This is currently only implemented in the NSS and Secure Transport (on iOS 7.0
+or later, or OS X 10.9 or later) backends.
 (Added in 7.42.0)
 .IP "-f, --fail"
 (HTTP) Fail silently (no output at all) on server errors. This is mostly done
index 7d88fc4c634444b4721052472b72be2b8b1fa72e..31a05e68e45c98fc43e31265c776331771ea29b5 100644 (file)
@@ -41,8 +41,8 @@ All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-Added in 7.42.0. This option is currently only supported by the NSS TLS
-backend.
+Added in 7.42.0. This option is currently only supported by the NSS and
+Secure Transport (on iOS 7.0 or later, or OS X 10.9 or later) TLS backends.
 .SH RETURN VALUE
 Returns CURLE_OK if false start is supported by the SSL backend, otherwise
 returns CURLE_NOT_BUILT_IN.
index 01e308130607c269b72d9898e41c1f4b96c16642..03adcef28c23dd6cdaa4909eba68b60cb4d6821e 100644 (file)
@@ -1459,9 +1459,12 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
 #if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
   /* We want to enable 1/n-1 when using a CBC cipher unless the user
      specifically doesn't want us doing that: */
-  if(SSLSetSessionOption != NULL)
+  if(SSLSetSessionOption != NULL) {
     SSLSetSessionOption(connssl->ssl_ctx, kSSLSessionOptionSendOneByteRecord,
                       !data->set.ssl_enable_beast);
+    SSLSetSessionOption(connssl->ssl_ctx, kSSLSessionOptionFalseStart,
+                      data->set.ssl.falsestart); /* false start support */
+  }
 #endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */
 
   /* Check if there's a cached ID we can/should use here! */
@@ -2364,6 +2367,14 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
   (void)CC_MD5(tmp, (CC_LONG)tmplen, md5sum);
 }
 
+bool Curl_darwinssl_false_start(void) {
+#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
+  if(SSLSetSessionOption != NULL)
+    return TRUE;
+#endif
+  return FALSE;
+}
+
 static ssize_t darwinssl_send(struct connectdata *conn,
                               int sockindex,
                               const void *mem,
index ae686826502e07e71bfc38b508578c91e60384a4..3bb69c01a4cf4a852cd63b754029d88e7db674d1 100644 (file)
@@ -48,6 +48,7 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
                            size_t tmplen,
                            unsigned char *md5sum, /* output */
                            size_t md5len);
+bool Curl_darwinssl_false_start(void);
 
 /* Set the API backend definition to SecureTransport */
 #define CURL_SSL_BACKEND CURLSSLBACKEND_DARWINSSL
@@ -69,6 +70,7 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
 #define curlssl_data_pending(x,y) Curl_darwinssl_data_pending(x, y)
 #define curlssl_random(x,y,z) ((void)x, Curl_darwinssl_random(y,z))
 #define curlssl_md5sum(a,b,c,d) Curl_darwinssl_md5sum(a,b,c,d)
+#define curlssl_false_start() Curl_darwinssl_false_start()
 
 #endif /* USE_DARWINSSL */
 #endif /* HEADER_CURL_DARWINSSL_H */