]> granicus.if.org Git - curl/commitdiff
mbedtls: Fix ALPN support
authorJay Satiro <raysatiro@yahoo.com>
Thu, 7 Jan 2016 06:49:31 +0000 (01:49 -0500)
committerJay Satiro <raysatiro@yahoo.com>
Thu, 7 Jan 2016 06:49:31 +0000 (01:49 -0500)
- Fix ALPN reply detection.

- Wrap nghttp2 code in ifdef USE_NGHTTP2.

Prior to this change ALPN and HTTP/2 did not work properly in mbedTLS.

lib/vtls/mbedtls.c

index 2fbf9b8d2d93be79c99756b713065904be879753..cfebedf5337e0d75d0895d4142a1f4b044ae8b45 100644 (file)
@@ -374,15 +374,21 @@ mbedtls_connect_step1(struct connectdata *conn,
   }
 
 #ifdef HAS_ALPN
-  if(data->set.httpversion >= CURL_HTTP_VERSION_2) {
-    if(data->set.ssl_enable_alpn) {
-      static const char* protocols[] = {
-        NGHTTP2_PROTO_VERSION_ID, ALPN_HTTP_1_1, NULL
-      };
-      mbedtls_ssl_conf_alpn_protocols(&connssl->config, protocols);
-      infof(data, "ALPN, offering %s, %s\n", protocols[0],
-            protocols[1]);
+  if(data->set.ssl_enable_alpn) {
+    const char *protocols[3];
+    const char **p = protocols;
+#ifdef USE_NGHTTP2
+    if(data->set.httpversion >= CURL_HTTP_VERSION_2)
+      *p++ = NGHTTP2_PROTO_VERSION_ID;
+#endif
+    *p++ = ALPN_HTTP_1_1;
+    *p = NULL;
+    if(mbedtls_ssl_conf_alpn_protocols(&connssl->config, protocols)) {
+      failf(data, "Failed setting ALPN protocols");
+      return CURLE_SSL_CONNECT_ERROR;
     }
+    for(p = protocols; *p; ++p)
+      infof(data, "ALPN, offering %s\n", *p);
   }
 #endif
 
@@ -470,14 +476,18 @@ mbedtls_connect_step2(struct connectdata *conn,
   if(data->set.ssl_enable_alpn) {
     next_protocol = mbedtls_ssl_get_alpn_protocol(&connssl->ssl);
 
-    if(next_protocol != NULL) {
+    if(next_protocol) {
       infof(data, "ALPN, server accepted to use %s\n", next_protocol);
-
-      if(strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
-                  NGHTTP2_PROTO_VERSION_ID_LEN)) {
+#ifdef USE_NGHTTP2
+      if(!strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
+                  NGHTTP2_PROTO_VERSION_ID_LEN) &&
+         !next_protocol[NGHTTP2_PROTO_VERSION_ID_LEN]) {
         conn->negnpn = CURL_HTTP_VERSION_2;
       }
-      else if(strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
+      else
+#endif
+      if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH) &&
+         !next_protocol[ALPN_HTTP_1_1_LENGTH]) {
         conn->negnpn = CURL_HTTP_VERSION_1_1;
       }
     }