mirror of
https://github.com/moparisthebest/curl
synced 2024-12-24 09:08:49 -05:00
multi: provide Curl_multiuse_state to update information
As soon as a TLS backend gets ALPN conformation about the specific HTTP version it can now set the multiplex situation for the "bundle" and trigger moving potentially queued up transfers to the CONNECT state.
This commit is contained in:
parent
5c8783d77f
commit
be6e281cf2
16
lib/multi.c
16
lib/multi.c
@ -2981,6 +2981,22 @@ size_t Curl_multi_max_total_connections(struct Curl_multi *multi)
|
|||||||
return multi ? multi->max_total_connections : 0;
|
return multi ? multi->max_total_connections : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When information about a connection has appeared, call this!
|
||||||
|
*/
|
||||||
|
|
||||||
|
void Curl_multiuse_state(struct connectdata *conn,
|
||||||
|
int bundlestate) /* use BUNDLE_* defines */
|
||||||
|
{
|
||||||
|
DEBUGASSERT(conn);
|
||||||
|
DEBUGASSERT(conn->bundle);
|
||||||
|
DEBUGASSERT(conn->data);
|
||||||
|
DEBUGASSERT(conn->data->multi);
|
||||||
|
|
||||||
|
conn->bundle->multiuse = bundlestate;
|
||||||
|
process_pending_handles(conn->data->multi);
|
||||||
|
}
|
||||||
|
|
||||||
static void process_pending_handles(struct Curl_multi *multi)
|
static void process_pending_handles(struct Curl_multi *multi)
|
||||||
{
|
{
|
||||||
struct curl_llist_element *e = multi->pending.head;
|
struct curl_llist_element *e = multi->pending.head;
|
||||||
|
@ -82,6 +82,9 @@ size_t Curl_multi_max_total_connections(struct Curl_multi *multi);
|
|||||||
|
|
||||||
void Curl_multi_connchanged(struct Curl_multi *multi);
|
void Curl_multi_connchanged(struct Curl_multi *multi);
|
||||||
|
|
||||||
|
void Curl_multiuse_state(struct connectdata *conn,
|
||||||
|
int bundlestate); /* use BUNDLE_* defines */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Curl_multi_closed()
|
* Curl_multi_closed()
|
||||||
*
|
*
|
||||||
|
@ -79,6 +79,7 @@ and that's a problem since options.h hasn't been included yet. */
|
|||||||
#include "strcase.h"
|
#include "strcase.h"
|
||||||
#include "x509asn1.h"
|
#include "x509asn1.h"
|
||||||
#include "curl_printf.h"
|
#include "curl_printf.h"
|
||||||
|
#include "multiif.h"
|
||||||
|
|
||||||
#include <cyassl/openssl/ssl.h>
|
#include <cyassl/openssl/ssl.h>
|
||||||
#include <cyassl/ssl.h>
|
#include <cyassl/ssl.h>
|
||||||
@ -599,6 +600,8 @@ cyassl_connect_step2(struct connectdata *conn,
|
|||||||
else
|
else
|
||||||
infof(data, "ALPN, unrecognized protocol %.*s\n", protocol_len,
|
infof(data, "ALPN, unrecognized protocol %.*s\n", protocol_len,
|
||||||
protocol);
|
protocol);
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
}
|
}
|
||||||
else if(rc == SSL_ALPN_NOT_FOUND)
|
else if(rc == SSL_ALPN_NOT_FOUND)
|
||||||
infof(data, "ALPN, server did not agree to a protocol\n");
|
infof(data, "ALPN, server did not agree to a protocol\n");
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
#include "strcase.h"
|
#include "strcase.h"
|
||||||
#include "warnless.h"
|
#include "warnless.h"
|
||||||
#include "x509asn1.h"
|
#include "x509asn1.h"
|
||||||
|
#include "multiif.h"
|
||||||
#include "curl_printf.h"
|
#include "curl_printf.h"
|
||||||
#include "curl_memory.h"
|
#include "curl_memory.h"
|
||||||
/* The last #include file should be: */
|
/* The last #include file should be: */
|
||||||
@ -1449,6 +1450,9 @@ gtls_connect_step3(struct connectdata *conn,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
infof(data, "ALPN, server did not agree to a protocol\n");
|
infof(data, "ALPN, server did not agree to a protocol\n");
|
||||||
|
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@
|
|||||||
#include "parsedate.h"
|
#include "parsedate.h"
|
||||||
#include "connect.h" /* for the connect timeout */
|
#include "connect.h" /* for the connect timeout */
|
||||||
#include "select.h"
|
#include "select.h"
|
||||||
|
#include "multiif.h"
|
||||||
#include "polarssl_threadlock.h"
|
#include "polarssl_threadlock.h"
|
||||||
|
|
||||||
/* The last 3 #include files should be in this order */
|
/* The last 3 #include files should be in this order */
|
||||||
@ -684,6 +685,8 @@ mbed_connect_step2(struct connectdata *conn,
|
|||||||
else {
|
else {
|
||||||
infof(data, "ALPN, server did not agree to a protocol\n");
|
infof(data, "ALPN, server did not agree to a protocol\n");
|
||||||
}
|
}
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -38,6 +38,7 @@
|
|||||||
#include "select.h"
|
#include "select.h"
|
||||||
#include "vtls.h"
|
#include "vtls.h"
|
||||||
#include "llist.h"
|
#include "llist.h"
|
||||||
|
#include "multiif.h"
|
||||||
#include "curl_printf.h"
|
#include "curl_printf.h"
|
||||||
#include "nssg.h"
|
#include "nssg.h"
|
||||||
#include <nspr.h>
|
#include <nspr.h>
|
||||||
@ -843,6 +844,8 @@ static void HandshakeCallback(PRFileDesc *sock, void *arg)
|
|||||||
!memcmp(ALPN_HTTP_1_1, buf, ALPN_HTTP_1_1_LENGTH)) {
|
!memcmp(ALPN_HTTP_1_1, buf, ALPN_HTTP_1_1_LENGTH)) {
|
||||||
conn->negnpn = CURL_HTTP_VERSION_1_1;
|
conn->negnpn = CURL_HTTP_VERSION_1_1;
|
||||||
}
|
}
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
#include "vtls.h"
|
#include "vtls.h"
|
||||||
#include "strcase.h"
|
#include "strcase.h"
|
||||||
#include "hostcheck.h"
|
#include "hostcheck.h"
|
||||||
|
#include "multiif.h"
|
||||||
#include "curl_printf.h"
|
#include "curl_printf.h"
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
#include <openssl/rand.h>
|
#include <openssl/rand.h>
|
||||||
@ -2917,6 +2918,9 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
infof(data, "ALPN, server did not agree to a protocol\n");
|
infof(data, "ALPN, server did not agree to a protocol\n");
|
||||||
|
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
* Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
|
* Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
@ -55,6 +55,7 @@
|
|||||||
#include "select.h"
|
#include "select.h"
|
||||||
#include "strcase.h"
|
#include "strcase.h"
|
||||||
#include "polarssl_threadlock.h"
|
#include "polarssl_threadlock.h"
|
||||||
|
#include "multiif.h"
|
||||||
#include "curl_printf.h"
|
#include "curl_printf.h"
|
||||||
#include "curl_memory.h"
|
#include "curl_memory.h"
|
||||||
/* The last #include file should be: */
|
/* The last #include file should be: */
|
||||||
@ -593,6 +594,8 @@ polarssl_connect_step2(struct connectdata *conn,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
infof(data, "ALPN, server did not agree to a protocol\n");
|
infof(data, "ALPN, server did not agree to a protocol\n");
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
#include "warnless.h"
|
#include "warnless.h"
|
||||||
#include "x509asn1.h"
|
#include "x509asn1.h"
|
||||||
#include "curl_printf.h"
|
#include "curl_printf.h"
|
||||||
|
#include "multiif.h"
|
||||||
#include "system_win32.h"
|
#include "system_win32.h"
|
||||||
|
|
||||||
/* The last #include file should be: */
|
/* The last #include file should be: */
|
||||||
@ -1269,6 +1270,8 @@ schannel_connect_step3(struct connectdata *conn, int sockindex)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
infof(data, "ALPN, server did not agree to a protocol\n");
|
infof(data, "ALPN, server did not agree to a protocol\n");
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "urldata.h" /* for the Curl_easy definition */
|
#include "urldata.h" /* for the Curl_easy definition */
|
||||||
#include "curl_base64.h"
|
#include "curl_base64.h"
|
||||||
#include "strtok.h"
|
#include "strtok.h"
|
||||||
|
#include "multiif.h"
|
||||||
|
|
||||||
#ifdef USE_SECTRANSP
|
#ifdef USE_SECTRANSP
|
||||||
|
|
||||||
@ -2651,6 +2652,9 @@ sectransp_connect_step2(struct connectdata *conn, int sockindex)
|
|||||||
else
|
else
|
||||||
infof(data, "ALPN, server did not agree to a protocol\n");
|
infof(data, "ALPN, server did not agree to a protocol\n");
|
||||||
|
|
||||||
|
Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
|
||||||
|
BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
|
||||||
|
|
||||||
/* chosenProtocol is a reference to the string within alpnArr
|
/* chosenProtocol is a reference to the string within alpnArr
|
||||||
and doesn't need to be freed separately */
|
and doesn't need to be freed separately */
|
||||||
if(alpnArr)
|
if(alpnArr)
|
||||||
|
Loading…
Reference in New Issue
Block a user